Linux基金会:企业如何建立开源战略?
22 June, 2022

大多数使用开源软件的公司都明白开源的商业价值,认识到开源在开发效率、灵活性、互操作性和创新速度方面的优势。然而,根据最新的“开源的未来”调查报告,只有一半的公司开展了最基本的开源管理,如社区开发、代码维护等等。


创建并文档化开源战略是实现开源投资回报率的首要一步。公司开源战略会将管理、参与和创建开源软件与商业目标结合起来,还会开辟许多机会并催化创新。


目录

1. 为什么要制定开源商业战略?

2. 开源战略文档

3. 开源战略方法

4. 开源战略关键点

5. 其他组成部分

6. 开源战略投资回报率

7. 在哪里投资


为什么要制定开源商业战略?

为了推动开源治理工作,确立开源战略指南,提高工作效率及降低风险,公司需要制定开源商业战略。


增加开源投资的首要一步是创建一个战略计划书。内容包括:企业如何从开源中获得最大利益?如何规避并降低开源误用所产生的麻烦?如何选择开源许可证等。

  • 领导认识到开源战略的价值并积极参与进来

  • 开源战略获得公司广泛认同

  • 促进分散的、多部门组织的协作

  • 帮助个人和发明者做出更好的决定

  • 帮助建立一个健康的开源社区

  • 就公司对开源的态度及可能的支持做出解释

  • 明确公司对社区驱动、外部研发、附加值差异化的支持政策


“如果高层就开源商业战略不能形成共识,要想推动开源政策并就投入达成一致往往是非常困难的,甚至是不可能的。"

——Ibrahim Haddad,三星公司研发副总裁和开源实验室负责人



开源战略文档

  • 企业制定开源商业战略的目标是什么?实现的路径是什么?都需要在文档中详细说明。这样,不管是工程技术人员、法律人士,还是市场营销人员、企业高管,每个人都有明确的职责。开源战略文档有助于团队理解开源项目背后的商业目标,确保目标一致,并尽量减少风险。

”Salesforce有一些内部文档,我们将其分发给我们的工程团队,围绕开源提供战略指导和鼓励。这些文件鼓励创建和使用开源代码,让他们明确知道公司的战略领导人完全支持开源。此外,我们还会明确地列出工程师应规避的开源许可证。”

---- Ian Varley,Salesforce软件架构师

  • 文档至少应该解释公司对开源的态度和文件背后的目的。对公司来说,商业目标是什么?开源在实现这一目标中的作用是什么?

“就Autodesk而言,推行开源战略的目的是云技术迈进,即将产品重点转移到云环境中,或者与云计算更紧密地整合。而所有的云计算都是建立在开源之上的,所以公司必须加强开源战略。”

---- Autodesk开放主管Guy Martin

  • 明确开发者如何使用开源代码。如果所采用的开源代码来自不同的开源协议,怎么办?开发者应该接受还是拒绝,或者采用例外政策?公司对开源开发持什么态度?一个好的开源战略文档对以上问题应该有明确的说法。

  • 明确说明开发者如何向开源项目贡献代码,并指明哪些开源项目对实现公司商业战略至关重要。(并鼓励他们做出贡献!)如果一位开发者想把一个开源项目的代码贡献给你正在做的那个项目,而这两个项目有不同的许可证,怎么办?如何实现开源项目良性循环,无论是贡献者还是代码采用者?这些问题都是应该开源战略中予以明确。

“如果公司产品严重依赖一个开源项目,而公司对该开源项目又缺乏主导权或话语权,那你的业务就会面临风险。”

---- Autodesk开放主管Guy Martin

  • 为开源项目决策提供指导方针,鼓励项目购买和承诺。开源的业务治理是否应该与技术治理分开?如何让员工成为开源的拥护者?一个好的开源战略文档应该予以明确说明,并就开源开发表明公司立场。

  • 促使公司商业目标和管理体系一致。哪些类型的开源项目与公司业务目标直接相关且目标一致?

  • 确立开源许可证、开源章程和开源政策的指导方针。如何记录API?是否制定了一个每个人都可以使用的贡献者许可协议?是否为开源项目确立了正确的许可证?你的战略文件应该具体说明许可做法和API。

  • 制定一个合适的代码和概念使用政策和商标。为发明建立品牌重要,为一个开源项目建立适当的品牌同样重要,二者在使用政策方面没有区别。

  • 提供开源最佳实践。成功的开源项目有丰富的开发者社区,并经常被产品化为商业产品,为企业带来利润。总结促进可持续生态系统的最佳做法。

  • 设立问题回答区。一个好的开源政策文件应该包括一个FAQ,并且随着时间的推移,FAQ中应该不断提供对常见问题的回答。

“常见问题”是根据用户和开发者实际提出的问题而确立的,绝不是你可能期望他们提出的问题。因此,一个维护良好的“常见问题”往往会给那些咨询它的人提供他们正在寻找的东西。好的FAQ不是写出来的,而是慢慢形成的。根据定义,它们是反应性的文件,随着时间的推移,对人们提出的问题作出反应而不断发展。

——Karl Fogel, 开源软件制作



如何制定开源战略

制定开源战略的第一步是决定谁应该参与制定开源战略。邀请哪些内部业务伙伴参与,是否寻求外部资源帮助。

外部资源

有许多外部资源可以帮助你制定开源战略。Black Duck为数以千计的企业提供咨询,帮助他们制定开源战略,并提供开源战略指南和教程。Linux基金会也有丰富的教育资源,可以帮助你制定正确的战略,《开源软件商业使用的最佳实践》就是一本很好的指导书。


Linux基金会下的TODO(Talk Openly Develop Openly)小组也是一个很好的资源。


还有GitHub的《开源指南》。


谷歌最近开源了它的开源政策文件,可以作为模板来创建自己的内部政策。


由PayPal创立的Inner Source Commons也专门帮助公司实现开源原则和实践,以及交流内部、专有软件和基础设施开发的想法。


另一个关于开源策略的优秀资源是一个叫Changelog的博客。它包括一个播客,涵盖了很多不同的开源主题,叫做“请求提交”。该播客解决了从创建开源软件的人性方面到商业模式和战略方面的问题。


请注意,技术行业内外的许多公司都有非常成熟的开源项目。他们对待开源的方式不同,但你可以选择和调整最适合你的业务的做法和策略。Linux基金会的TODO小组就是为了把这些公司聚集在一起,分享和发展最佳实践而建立的。TODO还在GitHub上提供了一套免费的开源政策和模板,你可以使用和贡献。


在谈到推动开源的时候,通用电气可能不是你第一个想到的公司,但通用电气在开源方面是一个强有力的参与者。通用电气软件公司有一个“工业道场”,它与Cloud Foundry基金会合作运行,以加强其解决世界最大工业挑战的努力。通用电气从其在这些努力中合作的伙伴那里获得好处,反之亦然。


在其他推出专注于推进开源和商业化工具的专业内部项目的组织中,Netflix是一个真正的佼佼者。其开源软件中心值得参观。Netflix为开源社区贡献了许多有用的工具和应用程序,从机器学习和协调应用程序到在其平台上运行的实用程序,其中许多都经过了大规模的测试和加固。反过来,Netflix也得到了帮助其平台更有效运行的贡献,其开源努力也为各种伙伴关系打开了大门。

内部资源

以上外部资源可以为企业开源战略提供指导,也是公司开源战略的基准,但内部合作才是制定开源业务战略的关键。公司开源战略应根据其自有的商业模式来制定,公司内部人员是最好的信息来源。此外,需要与所有利益相关者形成共识,以确保每个人都在同一起跑线上,并为成功而投入。例如,让行政领导层参与合作过程很重要。


在这一点上,创建一个开源项目是非常有价值的。TODO在“创建开源项目”开源指南中指出:“通过创建一个开源项目办公室,企业可以使开源的使用直接与公司的长期业务计划挂钩,并使之合理化和组织化。开源项目办公室旨在成为一个公司的开源业务和结构的宇宙中心,帮助将所有需要的组成部分结合起来”。


一个开源项目办公室可以帮助确定代码使用、分发、选择、审计等方面的政策。它还可以为培训开发人员提供指导,确保法律合规,提高社区参与度。根据该指南,“开源项目办公室还可以在公司内外提供有关所有开源事物的宣传和沟通。”


“获得人心(以推进你的开源战略)的唯一途径是在各个团队中找到愿意主动出击的人”。

----- Autodesk开放主管Guy Martin


从人选上看,关键是要让企业内部有资格为项目提供商业和法律治理的人以及能够提供技术治理的人参与进来。例如,具有技术技能的员工可能对当前的开源实践有所了解,并有资格制定诸如“内部贡献指南”的政策,而商务人士更有资格制定有关商务的政策。反之,具有法律资格的员工最适合定义许可政策。当然,确定对开源有真正热情的利益相关者也是至关重要的。对开源项目办公室结构的考虑和对各种管理角色的讨论在前面提到的开源指南中详细说明。


如何让所有利益相关者参与进来?从交谈开始,关键是要倾听哪些是有效的,哪些是无效的。一个公司及其文化决定了其参与开源的方式。在制定公司开源战略时,这些都是值得研究的问题。


当Guy Martin刚开始担任Autodesk开源主管时,他向老板要了两份名单。“我想要一份公司内部想做开源的人名单,而且要说明雇佣我做开源的原因。我还想要另一份名单,即完全不相信开源或对开源持观望态度的人”。然后,Martin与这两份名单上的所有人交谈。诋毁者帮助确定开源业务的绊脚石在哪里,拥护者则是建立开源项目的人选。



开源战略:明确每一利益相关方的目标

要推动企业开源战略健康发展,就必须明确所有参与者或受影响各方在执行开源战略时的工作目标。下表所示为利益相关者及其工作目标。


公司目标

  • 节省成本

  • 丰富工程资源

  • 快速响应市场变化

  • 高质量源代码

  • 源代码修改的灵活性高

  • 影响开源项目方向

  • 吸引更好的开发者人才

  • 吸引第三方开发者/贡献者

  • 在开源的基础上建立差异化优势

开发人员

  • 鼓励开发新功能、替换或改进现有功能的开放平台

  • 对产品中使用的技术产生影响

  • 可靠的、开放的、值得信赖的平台合作伙伴

  • 获得代码、API、文档和专家的支持

产品目标

  • 更便宜的产品

  • 高质量的产品

  • 安全、可靠的产品

  • 功能丰富的产品



开源战略关键因素

前面所谈的是开源战略文档的关键组成部分,以及如何去创建开源战略文档。下面,我们探讨一下制定战略时必须考虑的两个重要因素:开源治理及可持续性。


这两个因素是开源战略的哲学基础,决定开源项目的运营模式,并最终决定如何以及在多大程度上推动公司开源战略。

#1:开源治理

在制定开源战略之前,有关开源很可能有许多不同的流程:跨越团队和部门、产品团队和IT部门等都在使用开源代码或向上游贡献。建立标准化模式是精简和优化流程的关键,这使开发者更容易参与。所有人都站在同一起跑线上,有助于实现整体目标、减少可能的风险。如果每个人都遵循相同的政策和流程,就更容易确定和解决可能发生的问题。

“为修复一个错误需要5行代码,我不希望为此需要10个星期的流程和500页的文件。所以,与法律部门合作,创建一个精简的工作流程,工程师可以在合理的时间内完成。”

--  Autodesk开放主管Guy Martin

企业开源战略文档有关组织内部和外部的开源治理的描述应该非常具体。完备的开源治理需要具体的政策和流程,以指导开源软件的建设、部署和维护的文化。特别指出的是,开源文化是以透明、开放和鼓励不同贡献者的参与为导向的。

“有些开源项目欢迎外部贡献,但项目的路线图和管理在很大程度上掌握在一家公司手中。然后是真正由社区驱动的开源项目。你在和哪种项目合作?”

-- 谷歌Kubernetes联合创始人、Heptio联合创始人兼首席技术官Joe Beda

开源治理有助于降低风险。许多开发人员直接从网上下载开源工具,并将其与现有的代码、平台和应用程序集成,这隐藏着安全和法律的重大风险。同样,开源许可证和政策也会对一个组织所用技术和知识产权组合的控制产生巨大影响。有些开源项目有商业版本,就需要考虑是否邀请外部利益相关者参与开源治理。


从内部治理结构上,建立与外部开源社区的紧密联系,可以简化开发人员在从事内部工作时与外部贡献相比的“上下文切换”。当一个内部项目最终被开源时,它也会减轻过渡的难度,因为开发人员已经在这种治理模式下工作了。

“在Kubernetes社区,我们试图灌输项目高于个人或公司的思想。对项目有利与对参与项目公司有利是一个完全不同的问题。当你的开源项目最终与一家公司捆绑得太紧时,就会出现很棘手的问题。”

——Heptio首席技术官Joe Beda


#2:开源项目可持续性

一个开源项目是否成功,关键在于其他公司对你的开源项目存在商业依赖关系。长期的、可持续的项目产生于功能丰富的开发者社区,他们的代码在商业产品中被产品化,使企业获利,而企业又反过来重新投资于项目。我们的目标是使一个良性的项目建立产品、产生利润,再投入到项目社区的生命周期中。


基于公认的开源治理和知识产权模式,合作关系、贡献者协议和商业依赖可以促进商业和社区参与的良性循环。一个明智地定义的开源项目可以帮助推动所有这些。你的组织对共享和货币化开源发明以及推动伙伴关系和商业依赖的政策是什么?


例如,许多开源工具在网上提供免费版本,但也存在基于收费的支持实例,而且外部贡献者推进商业化提供的平台和应用是很常见的。明智的做法是,在你的战略文件中准确定义这些版本有什么不同,以及如何对它们进行控制,同时牢记控制水平可能随着时间的推移而大不相同。

其他组成部分

除了前面讨论的关键要素外,开源战略还应该包括如下政策。相关内容可以从外部资源提供的指南中获取。


例如,Black Duck提供了一套有用的四大准则,用于制定你的开源战略。

  • 确定构建开源平台和应用程序的战略

  • 确定使用开源的策略,例如将现有的产品和服务与开源工具进行整合

  • 确定为开源而建设的策略,如鼓励对现有项目的贡献和参与

  • 定义在开源基础上的建设战略,包括基于开源的内部重新平台化或应用推广

除了这些战略支柱和治理准则外,这里还有一些其他的关键内容要包括在你的战略文件中。

  • 目标。 界定你的商业战略目标,以及开源如何推动目标的实现。例如,许多公司目前正在通过转移到开放云平台(如OpenStack)来改造他们的平台基础设施。在许多情况下,这是因为他们研究了通过将基础设施转移到云中可以获得的投资回报率,确定了他们可以避免哪些级别的供应商锁定,并为他们想要实现的特定财务里程碑设定了目标。


围绕开源战略建立一套全面可度量的指标体系。如:向上游贡献代码的数量及增加比例、开发成本的削减和维护者招募的增加。除了这些指标,还可以包括公司商业目的和目标清单、开源领导力里程碑事件,以及开源项目安全性和性能等具体信息。当然,要记住,这些指标体系也不是万能的。

“建立衡量开源社区的指标体系。我认为应根据开源社区的痛点建立指标体系,并试图改变这些衡量标准,使之更好。世界上也不存在万能的指标体系。从PR拉动请求到贡献者人数,你可以突然宣布你的社区和生态系统是健康的。”

--谷歌Kubernetes社区项目经理Sarah Novotny

  • 开源战略管理。公司开源战略文档应包括具体要实现的目标,列出具体的行动以确保开源业务目标的实现,由谁来跟踪进展?其角色和责任是什么?

  • 明确实现开源战略目标的KPI(关键绩效指标)。

  • 政策和流程。除了许可证和接受贡献和外部代码的规则外,管理政策和流程是关键。Linux基金会的TODO(Talk Openly  Develop Openly)小组在GitHub上提供免费的开源政策范例和模板。

  • 伙伴关系和收购。 伙伴关系和收购是成功的开源商业战略的关键部分。开源战略文档应具体说明这些领域的目标,并列出所有关键战略伙伴(如 TODO、The Cloud Foundry Foundation 等)。

  • 专利和知识产权。专利权和知识产权准则对发明的使用方式有巨大的影响,在许多情况下还会对发明进行商业利用。开源战略文档应该具体说明专利、与专利有关的规则以及知识产权准则。

  • 基金会和赞助。开源基金会和非营利组织对开源世界影响巨大。企业可以从与Linux基金会、Eclipse基金会和Apache软件基金会等基金会的合作中受益,公司可以从一个开源基金会中受益。开源战略文档应该包括与伙伴关系和与基金会合作的计划。

“基金会提供了很多有价值的帮助。没有基金会,很多非常关键的项目很难得到维持所需的资金。基金会可以确保一个公平的竞争环境,有回馈开源项目的组织机制,而不是直接贡献给开发者”。

-- Luke Faraone,Dropbox软件工程师

  • 内部开源贡献指南/衡量标准。公司开源战略可以从内部贡献中获得巨大的利益(关于可持续发展部分)。公司开源战略文档应该提供贡献的指导方针和衡量标准。

贡献者公约》(https://www.contributor-covenant.org/)是一份强有力的行为准则和贡献者指南文件,已有4万多个开源项目采用,包括Kubernetes、Rails和Swift。 同样地,TODO、Linux基金会和Black Duck等组织在制定内部贡献指南方面也有丰富的经验。


一个好的内部开源贡献策略还包括仔细记录你的API,这是一个最佳实践。OpenAPI已经成为描述RESTful APIs的行业标准。

“在建立一个开源社区时,最重要的事情之一是确保你自己的流程是开放的。你能使你的决策过程越透明,你的社区就越有所有权的感觉。你也要确保你的过程不会成为一个阻挠者。如果你的开放源码的入库或出库程序是繁琐的,人们就会寻求绕过这个程序,或者干脆决定贡献太难了。”

-- Luke Faraone, Dropbox软件工程师

“你需要给人们提供参与你的项目的方法,不需要他们有博士学位或在类似领域工作了25年。你需要有办法让他们迅速参与进来。这意味着你需要真正好的设置文档,也意味着要有活跃和健康的论坛。”

——Ian Varley,Salesforce软件架构师


何时投资和投资多少:确定开源投资回报率

我们承认,的确没有办法计算开源项目的投资回报率,但还是有办法去评估。公司必须从投资回报率角度审视开源战略。最起码,可以从多个角度看开源战略的投资回报率。


首先,公司必须权衡开源所获得的好处与开源治理的风险和成本。Novica和OpenLogic联合推出的白皮书(PDF)介绍了多种计算开源投资回报率和围绕它制定战略的具体方法。如白皮书中下图所示,随着项目开发时间的持续,许可证费用及IT费用(包括技术投入及服务费用)都会显著上升。

图1说明了项目期限对项目不同成本要素关系的影响。虽然项目第一年的许可费在项目成本中所占的比例比IT/服务成本小,但由于其经常性的维护费用(通常为原始许可费的20%),它们最终会成为项目总成本的主要部分。 因此,在进行开源项目的投资回报率计算时,使用一个现实的项目寿命预测是至关重要的,因为这将使投资回报率评估更加准确。投资回报率项目规划的一个常见做法是创建一个基于三年、五年和十年项目期限的投资回报率计算表。这使得项目规划可以在更广泛的投资回报率信息下进行,以协助决策过程。(资料来源:开源的投资回报:实现开源软件的财务承诺(Navica和OpenLogic))


计算开源投资回报率应遵循以下准则:

  • 计算成本节约。 企业在制定开源战略时,最重要的一个指标就是节约成本。如开源部署和开源创新带来的成本节约,还要考虑许可费、硬件、支持等方面的节约。技术支持是许多组织的主要成本中心,如果你能减少技术支持方面的成本,你就能获得很大的经济效益。同样地,你可以通过转移到从Linux到OpenStack的开源平台来消除哪些具体的硬件和许可费用?例如,在开放云平台的情况下,云中的存储和计算资源可以完全消除对内部许多此类资源的需求。还要记住,虽然开源软件“免费”,没有专有软件许可费,但它也有开发成本,如上游的贡献,与其他产品整合所带来的成本。

  • 通过影响力和转换率来计算收益。 创建开源项目会提升企业影响力,并转化为企业产品或服务的销售。企业可以使用软件包管理器npm和RubyGems.org来发布开源项目,随后跟踪下载次数。许多企业将开源项目放在GitHub上,“流量”页面可以详细说明一个项目被克隆了多少次以及更多。这些指标可以帮助你的项目提高品牌知名度,获得更多开发者的贡献,等等。

  • 做一个运营风险评估。 开放网络应用安全项目(OWASP)最近将“使用有已知漏洞的组件”添加到其十大风险列表中,而开源软件在某些情况下可以引入漏洞。开源软件的安全审计可以让你看到代码中的组件和漏洞。Black Duck就从事开源审计工作,而Wireshark和Nikto等工具可以识别漏洞和问题。

  • 避免法律风险。 操作风险和法律风险是不同的,但评估两者都很重要。围绕开源的法律风险可能包括:使用错误许可证所带来的法律行动成本,在具有不同许可证的项目之间合并代码的成本,等等。


从开源的定义出发,我们应该明白开源项目如何分配,什么才有资格开源。这一点,可参考开放标准相关要求https://opensource.org/osr)。


必须评估项目应该采用什么样的许可证。软件自由法律中心(SFLC)提供了一套在线资源,介绍开源许可证和版权如何运作,以及更多的内容。而且,在Choosealicense.com可以找到一个简化的许可证特征矩阵。


还需考虑遵守许可证的成本和好处。Linux基金会的Open Compliance计划提供了一些资源,包括出版物、培训材料和针对开发者的免费培训课程。(你也可以看看我们的《使用开放源代码》指南,其中概述了一个最基本的合规计划)。


当然,法律问题应该由公司法务人员来评估。SFLC作者是参与创建流行的开源代码许可证的律师。可参阅《国际自由与开源软件法律评论》。


确定投资方向

可以从多个角度投资开源,包括利用内部资源和外部资源。请记住,开发人员参与开源与上游贡献都是投资开源的一部分。了解开源代码和开源项目的传入和传出,它们又是如何到达和传播的,这一点很重要。

进行一次内部审计。你是否通过收购获得了开源工具和平台,你是否从中获得了最大的利益?在你的审计中评估这一点。


识别哪些开源项目对交付产品或服务至关重要。一旦公司了解了它的知识产权组合和它的开发者想要做出的开源贡献,它就可以努力确保它的开发者有能力做出这些贡献。


确定哪些内部项目可以开源。


可以以更好的方式来识别开源项目,这些项目或许就在你的组织内部。硅谷许多公司都有内部竞赛和黑客马拉松活动,为员工的最佳开源发明提供最高奖励。PayPal和谷歌等公司都通过这些活动,将员工的开源作品纳入自己的结构和产品组合。


“黑客马拉松期间所发生的一件大事就是重组所展现的力量。发明者往往会利用另一项目的经验,来解决现实问题。如果所有的东西都是闭源的,就不会有那么多的构建可以使用。有力开源,你就拥有了整个世界,你可以使用所有开源组件。” 

-- Ian Varley,Salesforce软件架构师


借助外部资源,公司可以确定参与哪些尚未使用或参与的项目,而这些项目可能具有商业利益。从一开始就选择正确的开源项目和社区,会有巨大的杠杆作用。选择具有战略意义的项目作为重点是至关重要的。


与其他组织合作。他们可以帮助你帮助你选择最好的项目来参与,并确定他们从哪些项目中获得好处。而且,有几个独立的组织可以提供帮助。Linux基金会、TODO、Innersource Commons和Open Source Initiative都可以提供指导。


检查你所在行业的其他组织对哪些项目做出了贡献。他们可以引导你参与到正确的项目中去。例如,许多电信公司正在从开放的网络功能虚拟化(NFV)技术中获得巨大的利益,该技术可以消除电信技术堆栈中历史上的专有组件。其中一些公司与Linux基金会合作开展NFV计划,有几个工作组专注于NFV。这些以行业为重点的工作组可以为你提供宝贵的指导。


撰稿人

Ian Varley,Salesforce软件架构师

Guy Martin,欧特克开放部总监

Joe Beda,谷歌Kubernetes联合创始人,Heptio联合创始人兼CTO

Sarah Novotny,谷歌Kubernetes社区项目经理

Chris Aniszczyk,CNCFCTO

Luke Faraone,Dropbox软件工程师

Jim Jagielski,Consensys开源主管