成功的开源项目通常围绕着一个繁荣的公司和产品生态系统构建。那么,什么是开源商业生态系统,以及如何帮助创建和支持可持续的开源项目呢?本书探讨了一些方法可以树立对项目长期可行性的信心,鼓励公司在开源项目的基础上构建商业产品和服务,并通过贡献、内容和其他资源重新投资于开源项目,从而促进整个生态系统的发展。
目录
定义和创建可持续的开源商业生态系统
开源项目办公室(OSPO)可以通过两种不同的方式与开源社区互动:
- 出站:对现有开源项目做贡献,或发布新的开源项目
- 入站:借鉴当前的一些开源项目
任何包含使用开源软件的商业或产品策略都需要将资源重新投资到该策略所依赖的项目中。这可以促成开源商业生态系统的形成,为这些项目的可行性和长期可持续性做出贡献。然而,在公司投入资源之前,必须先对项目的未来前景有信心,愿意在其之上建立商业依赖关系。
虽然无法保证开源项目一定能成功,但可以通过一些做法来为其成功铺平道路,帮助其周围建立商业生态系统。如果能加快这个过程,就能加速创新,让产品上市更快,让项目被人更快的采用。正如 Accel Partners 的投资者李平所描述的那样,这将形成一个良性循环。
李平确定了项目、产品和利润三个可持续性阶段。
项目。 创建一个真正有用、目标明确的项目并建立强大的社区是创建繁荣生态系统的第一步。可以通过从头开始创建一个伟大的发明、分叉一个现有的发明或重新利用一个现有项目来实现这一目标。你知道广受欢迎的 OpenStack 云平台最初是 NASA 内部使用的开源项目吗?同样,广受欢迎的 Kubernetes 编排工具是从 Google 的内部开源项目演变而来的。创建、分叉(Fork)重新利用都可以引起对项目的强烈需求。
产品。 就在几年前,开源领域包括许多纯粹主义者,他们对任何关于产品化和商业化开源创作的讨论都不屑一顾。现在情况已经发生了巨大的变化。像 Red Hat 这样的公司通过为开源软件提供强化支持建立了数十亿美元的业务,而像 OpenStack 这样的平台则催生了像 Mirantis 这样的强大公司。现在许多开源项目通常提供一个社区版,辅以全面支持的商业版。可以将这看作是从项目到产品的转变。
利润。 利润是各个公司追求的目标,而开源创作可以通过从项目到产品再到利润的良性循环来实现可持续发展。为开源发明建立利润模型可能需要创造力。像 Red Hat 为其企业 Linux 和许多其他开源产品提供的关键支持一样,最有利可图的路径是提供关键任务支持吗?像 Android 生态系统中的与硬件制造商合作的许可费或利润模型呢?比如可以对服务收费,而不对软件本身收费,可以接受捐赠的资金、众筹捐款等实现开源利润。
一旦开源创作通过上述三个阶段取得了进展,商业依赖和重新投资推动的良性循环就完成了。此时,项目已经达到了稳定的社区开发状态,有众多开发者参与其中,有人来修复 bug 并进行安全更新,这就可以形成有利可图的合作伙伴关系等等。
商业依赖导致用户的增加,用户购买解决方案产生利润,利润增加了投资社区的资源。健康的社区还可以促进项目之间的合作和交流,从而提高质量。
开源生态系统成功的要素
在追求开源创作的最佳生态系统中,首要任务是创建解决问题的独特代码。例如,OpenStack 帮助了无数组织将资源集中在云中,从而降低了内部存储和计算资源的成本。同样,网络功能虚拟化(NFV)技术帮助电信公司减少了对昂贵专有组件的依赖。
一旦解决问题的创作存在,就可以专注于建立社区和贡献、增强商业采用的信心和遵循开源文化。
建立社区/增加贡献
要在开源项目周围建立一个健康的社区,关键是开发人员培训和招募,以及定义入站贡献的指南和纪律性的开发实践,如版本管理、构建和测试自动化、文档、贡献的入口和问题和修订的跟踪。
你需要为人们提供参与你的项目的方式,而这些方式不需要他们拥有博士学位或在类似领域工作了 25 年。你需要为他们提供快速参与的方式。这意味着你需要真正好的设置文档,还意味着你需要有活跃和健康的论坛和负责任的维护者。 – Ian Varley, Salesforce 软件架构师
Contributor Covenant是一个可靠的行为准则和贡献者指南文件,被包括 Kubernetes、Rails 和 Swift 在内的 40000 多个开源项目使用。同样,像 Linux 基金会的 TODO Group 这样的组织在设置入站贡献指南方面有丰富的经验。
Cloud Foundry 的行为准则提供了一个很好的例子,展示了如何为社区成员制定官方准则。它详细说明了社区成员如何报告事件,什么行为算是不可接受的,等等。
增强商业采用的信心
随着一个开源软件项目的发展,一项研究显示,它会达到一个拐点,此时企业希望参与进来,但对于该开源项目的知识产权制度(或缺乏制度)可能不太放心。以下做法有助于增强那些可能在边缘徘徊、等待承诺的公司的信心。
知识产权和商标管理。 开源许可证和政策以及商标可以对一个项目是否实现商业采用产生巨大影响。有许多免费资源可用于管理这些。
独立治理。 对于某个成长阶段的项目来说,建立独立治理和中立的项目资产变得至关重要。请记住,至关重要的是将能够提供项目商业和法律治理的合格人员纳入进来,以及能够提供技术治理的人员。例如,具有技术技能的人可能对入站贡献指南有一定的了解,而具有商业资质的人可能有资格制定商标方面的政策。
“在促进健康的商业生态系统时,要对项目的治理有一个清晰的愿景,明确哪些是项目的组成部分哪些不是。要有一套明确的接口,作为商业生态系统可以连接或附着到项目的地方。在开始开发生态系统时,你希望公司在与你合作时感到安全。” – Sarah Novotny, Azure FOSS 战略部
支持、安全和可靠的代码和基础设施。 Red Hat 因为为开源软件提供强化支持而获得了多少好处?非常多。除了审核代码以确保可靠性和安全性之外,还要提供支持,并利用社区论坛等资源。像 Black Duck 等许多公司还提供开源安全性和可靠性审计服务。
公关和营销支持。 你的项目是否有博客?是否有营销和公关计划?围绕项目创建自己的内容,并通过在开源活动中进行演讲以及与媒体和市场营销的联系来补充这一努力,可以让你的项目被人们所讨论和采用。与专有软件产品相比,许多商业开源项目的转化率(通过下载者中购买某些东西的百分比)并不高,因此低成本且可扩展的营销功能对盈利至关重要。
创建强大的客户反馈循环。 问问成功的商业人士他们如何看待客户,他们会说客户至上。这是一个商业原则,在技术文化中可能并不强调。确保提供直接的客户反馈途径并鼓励反馈。论坛可以提供丰富的客户反馈。回答来自各个渠道的客户问题,包括论坛以及电话支持等。
遵循开源文化
一个没有生态系统和社区的下游项目实际上没有充分利用开源的价值。遵循开源文化是成功的关键。
在构建开源社区时最重要的一点是确保你自己的流程是开放的。你的决策过程越透明,你的社区就会越有归属感。你还需要确保你的流程不会成为一个阻碍因素。如果你的开源流程无论是入站还是出站的贡献都过于繁琐,人们会尝试绕过这个流程,或者干脆认为贡献太困难。 – Luke Faraone, Dropbox 软件工程师
平衡控制和开放性。 许多用户更喜欢开源软件而不是专有软件,仅仅是因为专有软件通常带有成本和控制。在围绕开源项目创建商业战略时,您必须平衡控制产品某些方面(例如,支持的程度),与开放性(例如是否提供免费的社区版,可以作为商业版的入口)。此外,请记住,项目创始人在项目的控制方面随着时间的推移往往比起初时要少。
随着开源项目的发展,你需要找到一种方式来建立一个信任的圈子,让你能够委托给其他人,相信他们能够做出决策。这个转变是困难的。一开始,你有一个小项目,创始人对项目的所有事情都了如指掌,并且在某种程度上拥有完全的控制权。然后,项目变成了社区驱动,没有一个单一的人或团队拥有完全的控制权。 – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官
透明度。 透明度的概念长期以来一直是开源文化的核心。毕竟,直接进入代码仓库不需要开放和透明吗?然而,透明度对于大多数企业来说并不是一个核心原则。事实上,有些企业竭尽全力将内部信息和资产严格保密。在制定基于开源的商业成功策略时,评估透明度的好处。许多人会欣赏以商业为导向的透明度,就像他们欣赏代码的透明度一样。
有些开源项目欢迎外部贡献,但项目的路线图和治理在很大程度上掌握在一家公司手中。然后还有真正以社区驱动的开源项目。你正在与哪种类型的项目合作? – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官
基金会。 近年来,基金会对开源世界产生了巨大影响。你的组织可以通过与从 Linux 基金会到 Apache 软件基金会等基金会合作,受益于基金会的工作,并可能受益于成立一个专注于开源的基金会。了解开源基金会在促进可持续开源项目方面的作用,以及何时以及如何参与其中,将有助于为成功打下基础。
基金会提供了很多价值。没有它们,很多非常重要的项目很难获得它们需要的资金以进行良好的维护。它们有助于确保公平竞争,并为组织提供了向开源项目回馈而不是直接贡献开发者的机制。 — Luke Faraone, Dropbox 软件工程师
如何构建开源生态系统
要围绕你的项目构建开源生态系统,你必须关注以下几点:治理;将开源项目作为商业依赖所需的资源;跟踪进展并进行调整。让我们分别看看这些内容和它们对你的商业生态系统战略所带来的价值。
1. 建立健康的治理体系
创建一个中立的结构,使竞争对手易于参与,并考虑是否应该让外部利益相关者参与治理过程,这是至关重要的。当治理是独立的并接受多样化的贡献时,你的生态系统才能最健康。
如果你负责项目的技术治理,那么在支持、商标管理或许可方面做决策时,你的资质很可能较低。同样,你必须分开技术决策和财务决策。一些最好的技术进展发生在鼓励大胆尝试的环境中。鼓励技术贡献者追求大胆的目标,而独立的决策者可以评估它们是否在财务上可行。
我们在 Kubernetes 社区中尝试培养的一个最重要的思想是,项目优先于人或公司。对于项目来说什么是好的与参与项目的公司的利益无关。当你的开源项目与单一公司过于紧密地联系在一起时,可能会出现非常棘手的问题。 – Joe Beda, Kubernetes 联合创始人,Heptio 联合创始人兼首席技术官
2. 评估资源
当合作伙伴或客户决定是否在他们的业务中使用开源项目时,他们可能会评估或考虑以下不同的资源:
安全策略: 漏洞管理是客户或合作伙伴可能关注的一个关键问题。你需要确保具备所有必要的基础设施和一个政策,以应对商业版或开源产品中发现的漏洞。开源不能在安全性上低于付费客户,这不能成为区分你的商业产品的方式。
法律政策: 与开源项目相关的法律资源的成本可能很高,但也要记住存在免费的法律资源。软件自由法律中心(SFLC)提供了一系列关于开源许可证和版权的很好的在线资源,还有更多。SFLC 的作者是创建流行的开源许可证等的律师。不要错误地认为免费版项目不需要法律保护或关于许可方面的预先考虑。
社区管理: 社区往往是一个成功的开源项目最强大的资产,投入资源来建设一个健康的社区是一个最佳实践。通常,一个充满热情的社区从一个受人喜爱的免费社区版项目中发展而来,因此,仅仅为商业版投资社区增长是一个错误的策略。
看看你的社区是如何互动的,新的领导者是如何成长和指导的,痛点是如何演变的。例如,Kubernetes 目前的一个痛点是拉取请求的审核时间非常长,所以我们开始建立一个指导计划来帮助指导新的审阅者。通过指导计划,我们将能够跟踪测量,并希望看到审查过程所需的时间减少。 – Sarah Novotny, Azure FOSS 战略部
访问测试基础设施/环境: 一些开源应用程序需要专用服务器、专业工具、自动化质量控制和/或安全加固。在资源被用于付费和支持版本的同时剥夺免费的社区版本的资源是一个糟糕的策略,因为免费的社区版本通常为潜在客户的第一步提供了机会。确保开源版本和任何开源开发人员都可以访问与你的员工开发人员或付费版本运行的相同工具、检查和自动化。不同版本和合作者之间的平等是关键。
明智投资教育: 对于健康的方式了解在开源生态系统中何时何地以及如何与之互动,开源教育至关重要。
培训 - 教育和培训提供了一个良性循环,受过培训的用户推动了你的开源创作的进展。
认证 - 认证计划帮助用户宣传他们在你的创作周围的技能,并提高他们的市场价值和你的市场价值。记住,你不仅可以认证具有技能的人。考虑一下 Linux 基金会的核心基础设施倡议(CII)徽章计划。其中包括一个最佳实践徽章,可以展示一个开源项目对安全性的承诺,建立信任。
导师制和实习计划 - 通过导师制和实习计划,你可以培养与你的开源产品相关的更广泛的知识库,并创造机会。
举办活动 - 如果整个社区都积极参与,那么一个开源项目在成功生态系统中增长的机会就很大。活动是促进群体参与的绝佳方式。
回馈: 参与你在产品中使用的项目并向上游贡献的好处是巨大的。如果一个开源项目对你和你的组织产生了积极影响,你可能也可以通过贡献对其产生积极影响。这种给予和接受是开源领域的一种实践。只需看看 Red Hat 和 IBM,它们都是 Linux 的主要贡献者。
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 网站上有一大堆经过测试和验证的文档。文档要包含三个部分:
- 创建部分介绍了 Googl e开发人员如何发布他们编写的代码,无论是以新项目的形式还是作为对外部项目的补丁。
- 使用部分解释了 Google 如何将开源代码引入公司并使用它。它深入探讨了维护许可合规性等内容。
- 成长部分描述了 Google 在公司内外运行的一些支持开源社区的计划。
根据 Google 开源项目办公室的前软件工程师 Will Norris 的说法:“这些文档解释了我们发布新的开源项目的过程,提交补丁给其他项目的过程,以及我们如何管理引入公司内部的开源代码。除了如何做的过程,它还概述了为什么要以这种方式做事,比如为什么我们只使用特定许可证的代码,或者为什么我们要求所有收到的补丁都需要贡献者许可协议。”
Google 发布了优秀的开源流程文档,实际上是在阐述他们的内部政策和程序。他们关于内部所有权模型的描述绝对是有指导意义的。我也非常推荐在网上以 Creative Commons 许可证发布的 Karl Fogel 编写的《Producing Open-Source Software》一书。 – Luke Faraone, Dropbox 软件工程师
深入了解 Google 的开源项目办公室的工作方式表明,该公司非常注重社区多样性和推进其开源社区的各种多样化计划。关注社区的概念在你努力构建一个围绕开源的健康商业生态系统时是非常值得关注的。
一个开源项目只有整个社区都积极参与,它才有最好的机会变成一个成功的生态系统。这包括代码提交者、用户、文档编写者、软件供应商、平台供应商和集成商等每个人。 – Abby Kearns, Puppet 首席技术官
致谢
感谢本书的各位贡献者:
- Craig Northway
- Ana Jimenez
- Gergely Csatari
- Georg Kunz
- Bill Mulligan