创建一个开源商业生态系统

成功的开源项目通常围绕着一个繁荣的公司和产品生态系统构建。那么,什么是开源商业生态系统,以及如何帮助创建和支持可持续的开源项目呢?本书探讨了一些方法可以树立对项目长期可行性的信心,鼓励公司在开源项目的基础上构建商业产品和服务,并通过贡献、内容和其他资源重新投资于开源项目,从而促进整个生态系统的发展。

目录

定义和创建可持续的开源商业生态系统

开源项目办公室(OSPO)可以通过两种不同的方式与开源社区互动:

任何包含使用开源软件的商业或产品策略都需要将资源重新投资到该策略所依赖的项目中。这可以促成开源商业生态系统的形成,为这些项目的可行性和长期可持续性做出贡献。然而,在公司投入资源之前,必须先对项目的未来前景有信心,愿意在其之上建立商业依赖关系。

虽然无法保证开源项目一定能成功,但可以通过一些做法来为其成功铺平道路,帮助其周围建立商业生态系统。如果能加快这个过程,就能加速创新,让产品上市更快,让项目被人更快的采用。正如 Accel Partners 的投资者李平所描述的那样,这将形成一个良性循环。

李平确定了项目、产品和利润三个可持续性阶段。

一旦开源创作通过上述三个阶段取得了进展,商业依赖和重新投资推动的良性循环就完成了。此时,项目已经达到了稳定的社区开发状态,有众多开发者参与其中,有人来修复 bug 并进行安全更新,这就可以形成有利可图的合作伙伴关系等等。

商业依赖导致用户的增加,用户购买解决方案产生利润,利润增加了投资社区的资源。健康的社区还可以促进项目之间的合作和交流,从而提高质量。

开源生态系统成功的要素

在追求开源创作的最佳生态系统中,首要任务是创建解决问题的独特代码。例如,OpenStack 帮助了无数组织将资源集中在云中,从而降低了内部存储和计算资源的成本。同样,网络功能虚拟化(NFV)技术帮助电信公司减少了对昂贵专有组件的依赖。

一旦解决问题的创作存在,就可以专注于建立社区和贡献、增强商业采用的信心和遵循开源文化。

建立社区/增加贡献

要在开源项目周围建立一个健康的社区,关键是开发人员培训和招募,以及定义入站贡献的指南和纪律性的开发实践,如版本管理、构建和测试自动化、文档、贡献的入口和问题和修订的跟踪。

你需要为人们提供参与你的项目的方式,而这些方式不需要他们拥有博士学位或在类似领域工作了 25 年。你需要为他们提供快速参与的方式。这意味着你需要真正好的设置文档,还意味着你需要有活跃和健康的论坛和负责任的维护者。 – Ian Varley, Salesforce 软件架构师

Contributor Covenant是一个可靠的行为准则和贡献者指南文件,被包括 Kubernetes、Rails 和 Swift 在内的 40000 多个开源项目使用。同样,像 Linux 基金会的 TODO Group 这样的组织在设置入站贡献指南方面有丰富的经验。

Cloud Foundry 的行为准则提供了一个很好的例子,展示了如何为社区成员制定官方准则。它详细说明了社区成员如何报告事件,什么行为算是不可接受的,等等。

增强商业采用的信心

随着一个开源软件项目的发展,一项研究显示,它会达到一个拐点,此时企业希望参与进来,但对于该开源项目的知识产权制度(或缺乏制度)可能不太放心。以下做法有助于增强那些可能在边缘徘徊、等待承诺的公司的信心。

遵循开源文化

一个没有生态系统和社区的下游项目实际上没有充分利用开源的价值。遵循开源文化是成功的关键。

在构建开源社区时最重要的一点是确保你自己的流程是开放的。你的决策过程越透明,你的社区就会越有归属感。你还需要确保你的流程不会成为一个阻碍因素。如果你的开源流程无论是入站还是出站的贡献都过于繁琐,人们会尝试绕过这个流程,或者干脆认为贡献太困难。 – Luke Faraone, Dropbox 软件工程师

如何构建开源生态系统

要围绕你的项目构建开源生态系统,你必须关注以下几点:治理;将开源项目作为商业依赖所需的资源;跟踪进展并进行调整。让我们分别看看这些内容和它们对你的商业生态系统战略所带来的价值。

1. 建立健康的治理体系

创建一个中立的结构,使竞争对手易于参与,并考虑是否应该让外部利益相关者参与治理过程,这是至关重要的。当治理是独立的并接受多样化的贡献时,你的生态系统才能最健康。

如果你负责项目的技术治理,那么在支持、商标管理或许可方面做决策时,你的资质很可能较低。同样,你必须分开技术决策和财务决策。一些最好的技术进展发生在鼓励大胆尝试的环境中。鼓励技术贡献者追求大胆的目标,而独立的决策者可以评估它们是否在财务上可行。

我们在 Kubernetes 社区中尝试培养的一个最重要的思想是,项目优先于人或公司。对于项目来说什么是好的与参与项目的公司的利益无关。当你的开源项目与单一公司过于紧密地联系在一起时,可能会出现非常棘手的问题。 – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官

2. 评估资源

当合作伙伴或客户决定是否在他们的业务中使用开源项目时,他们可能会评估或考虑以下不同的资源:

看看你的社区是如何互动的,新的领导者是如何成长和指导的,痛点是如何演变的。例如,Kubernetes 目前的一个痛点是拉取请求的审核时间非常长,所以我们开始建立一个指导计划来帮助指导新的审阅者。通过指导计划,我们将能够跟踪测量,并希望看到审查过程所需的时间减少。 – Sarah Novotny, Azure FOSS 战略部

3. 跟踪进展并进行调整

当然,你在开源周围建立一个健康的商业生态系统的努力是一个不断变化的目标。你必须让负责治理结构的人参与进来,并让你的社区提供反馈。 “倾听、衡量和调整”是在这方面的一个很好的建议。你的社区成员可以就如何进行必要的改进和吸引更多人提供非常好的反馈。请记住,每个社区都是不同的。

为你与之合作的每个社区找到适当的度量标准。我倾向于根据特定社区的痛点找到一些度量标准,并努力改变这些度量标准以取得更好的效果。没有一个神奇的评估方法,如果你查看六个度量标准,从拉取请求到贡献者数量,你会突然宣布你的社区和生态系统是健康的。你可能有一个非常小的项目,但它非常健康,因为它有六个核心贡献者和十几个活跃但不是维护者的人。可能有很好的讨论,并且拉取请求可能会迅速处理,这可能是一个非常健康的社区,即使它在GitHub上没有一百万个星星或分支。 – Sarah Novotny, Azure CTO 办公室的开源专家

示例:Google 开源办公室

许多公司已经建立了成功的开源项目办公室。这种趋势始于技术行业,因为 IBM 和 Oracle 等大公司意识到开源严重影响了软件生态系统,但现在,各行各业的公司都在运行开源项目。例如,Walmart Labs 和 Netflix 拥有蓬勃发展、高度结构化的开源计划,并定期向社区贡献项目。开源项目办公室无处不在,因为开源无处不在。事实上,根据 Black Duck 和 North Bridge 的 Future of Open Source Survey,仅有三个百分点的受访者(其中大多数来自企业)表示他们不使用任何开源工具或平台。

在开源项目中,Google 的开源项目办公室也许是最被广泛模仿的。Google 发布了大量的开源贡献,并且公司领导人非常坦率地表示,公司从随之而来的社区参与中获得了商业利益。只需看看 Android 和 Kubernetes 通过社区开发和贡献获得的势头。在一篇关于开源计划的文章中,Capital One 的开源项目办公室主任 John Mark Walker 指出:

技术供应商别无选择——合作还是退出。他们可以自愿忽视趋势,但最终会对他们不利。他们最好从 Google 和其他 TODO Group 的参与者那里借鉴一些方法,以及采取一种全面的开源生态系统方法:哪些项目具有战略重要性,参与如何帮助更快地推出新产品和服务?而且对于额外的魔力,Google 还显示出接受公司主要产品关注之外的使命也会产生结果。

这一点再真实不过了,这些建议不仅适用于技术供应商,所有公司都可以从 Google 的开源项目中学到宝贵的经验。最近,Google 为其开源项目、流程和倡议推出了一个新的主页。这个网站非常详尽,并提供了几个途径,对于任何想在开源项目周围创建商业生态系统的人来说都值得关注。

Google 的网站提供了一个开源项目目录和一个社区部分,很好地展示了培训、活动和其他努力如何从开源社区中获得能量。然而,如果你想围绕开源项目创建一个商业生态系统,最重要的是写好文档,这被称为“我们在 Google 内部如何处理开源事项的文档”。从开源贡献者和开发人员到实施开源项目的公司,Google 网站上有一大堆经过测试和验证的文档。文档要包含三个部分:

根据 Google 开源项目办公室的前软件工程师 Will Norris 的说法:“这些文档解释了我们发布新的开源项目的过程提交补丁给其他项目的过程,以及我们如何管理引入公司内部的开源代码。除了如何做的过程,它还概述了为什么要以这种方式做事,比如为什么我们只使用特定许可证的代码,或者为什么我们要求所有收到的补丁都需要贡献者许可协议。”

Google 发布了优秀的开源流程文档,实际上是在阐述他们的内部政策和程序。他们关于内部所有权模型的描述绝对是有指导意义的。我也非常推荐在网上以 Creative Commons 许可证发布的 Karl Fogel 编写的《Producing Open-Source Software》一书。 – Luke Faraone, Dropbox 软件工程师

深入了解 Google 的开源项目办公室的工作方式表明,该公司非常注重社区多样性和推进其开源社区的各种多样化计划。关注社区的概念在你努力构建一个围绕开源的健康商业生态系统时是非常值得关注的。

一个开源项目只有整个社区都积极参与,它才有最好的机会变成一个成功的生态系统。这包括代码提交者、用户、文档编写者、软件供应商、平台供应商和集成商等每个人。 – Abby Kearns, Puppet 首席技术官

致谢

感谢本书的各位贡献者: