制定开源战略
大多数使用开源的公司不一定了解开源对其组织的好处,也并没有与其业务需求一致的战略。此外,根据最新的开源的未来调查,这些公司中只有大约一半声明在实践基本的开源管理,例如社区开发,代码维护等。
创建和记录开源战略是实现开源投资回报比(ROI)的重要第一步,因为开源可以在与组织相关的多个方面产生积极或消极的影响:战略/业务,运营,技术和财务。你的开源战略可以将管理、参与和创建开源软件的计划与其所服务的业务目标关联起来。这可以开放许多机会并促进创新。
为什么要创建开源战略?
正规化你的组织在开源管理及战略的方式,从而创建提升效率和最小化风险的指导原则。无论你是否已经围绕你的开源工作制定了相应的业务战略,您很可能已经知道这一点非常重要。
增加开源投资的关键第一步是创建一个战略文档,其中包括定义开源对您的组织意味着什么,并创建一个共享的分类。这将帮助您最大限度地利用您的组织从开源中获得的好处,同时让你远离可能因错误(如选择错误的许可证或未能正确维护代码)而引起的麻烦。您的开源战略文档可以:
- 让领导层兴奋并参与进来
- 获得公司的各个层面,特别是高层的认同
- 促进分散的多部门组织的决策
- 帮助个人和创造者做出更好的决策
- 帮助围绕创造构建一个健康的社区
- 阐释你的公司参与开源的方式及商业模式,以及对其使用的支持
- 明确你的公司在哪些方面投资于社区驱动、外部研发,以及将侧重于哪些方面的增值差异化
“如果你不从高层的共识开始,推动达成关于策略和投资细节的共识这一过程就会变得非常困难,如果不是不可能的话。”.**-*Ibrahim Haddad,三星研发副总裁兼开源实验室负责人在他的书 《企业中的开源合规》 中提到。
你的开源战略文档
让我们先从最终目标开始,然后解释如何实现目标。你的目标是在一个文档中详细说明你的开源战略,从而能让不同角色的每个人(从研发、法务,到营销和管理高层CXO)都可以参考。本战略文档将帮助您的团队了解您的开源项目背后的业务目标,确保更好的决策,并将风险降至最低。
“在Salesforce,我们向我们的研发团队分发内部文档,提供关于开源的战略指导和导向。这些导向鼓励开源的创建和使用,让他们毫不含糊地知道,且公司的战略领导者完全支持它。此外,如果我们不希望研发人员使用某些类型的开源许可证,或有其它的一些开源指南,都需要在我们的内部文档中明确。” —— Ian Varley, Salesforce的软件架构师。
文档中至少应:
- 说明贵公司的开源路线以及文档背后的目的。对于您的公司来说,成功是什么样子的?开源在实现这一目标中的作用是什么?
“在Autodesk的案例中,我们新的开源路线背后的原因是向云技术转移,因为我们正在转移我们的产品重点,以便在云环境中进行更紧密的集成。如果你转向云,基本上所有这些都是基于开源的,因此你必须加强你的开源战略。” —— Guy Martin,Autodesk的开源负责人(Open@ADSK)。
指定你希望开发人员如何使用开源代码:
- 如果代码从具有不同的开源许可证的项目进入到你的某个产品中,该怎么办?
- 开发人员应该遵循哪些接受、拒绝和例外策略?
- 你的组织对开源的总体立场是什么?
- 一个好的策略文档可以为这些问题提供明确的答案。
指定您希望开发人员如何为开源项目贡献代码,确定对您的业务战略至关重要的项目。(并鼓励他们贡献!)
- 如果开发人员想将一个开源项目的代码贡献到你正在投入的开源项目中,但这两个项目的开源许可证不同,该怎么办?
- 你对开源的贡献如何实现良性循环,从而让你的项目能从贡献中受益?这些考虑是定义战略性贡献的一部分。
“如果你的产品严重依赖某个开源项目,而您在该项目的领导力和战略方面没有话语权,你的业务将面临风险。”——Guy Martin,Autodesk。
为制定新的决策提供指导,鼓励项目接受和承诺:
- 开源的业务治理是否应该与技术治理分开?
- 如何让员工成为开源的拥护者?
- 一个好的战略文档提供了答案,并且还应该阐明你的组织对使用和围绕开源进行开发的总体立场。
对齐你的业务目标和管理导向:
- 哪些类型的开源项目可以直接匹配你的业务目标?
- 列出符合你的代码和理念的使用策略和商标:
- 适当地给开源项目打品牌和给任何创造打品牌一样重要,且不应该有关于使用策略的问题。
提供关于开源最佳实践的详细信息:
- 成功的开源项目拥有丰富的开发者社区,并且往往能被产品化为商业产品进而为企业带来利润。
- 哪些具体实践可以最好地促进这种可持续的生态系统?
- 随着时间的推移回答问题。一个好的开源政策文档应该包含一个常见问答FAQ,并且随着时间的推移,常见问题的解答应该在FAQ中持续的刷新和提供。
“FAQ高度关注用户和开发人员实际提出的问题——而不是你可能期望他们提出的问题,因此,一个维护良好的FAQ往往会给咨询者提供他们想要的东西。好的FAQ不是写出来的,而是成长起来的。它们是反应式文档,随着时间的推移,随着人们提出的问题而不断发展。”—— Karl Fogel, 生产开放软件。
如何创建一个开源战略
制定开源战略的第一步是决定谁应该参与制定战略。这意味着不仅要决定哪些内部业务合作伙伴应该参与进来,还要决定是否应该寻求外部战略帮助和资源。
外部资源
有许多外部资源可以帮助你充实你的开源策略,好消息是它们中的许多都是免费的。Linux基金会提供了广泛的教育资源,可以帮助您引入正确的策略,以及诸如 《开源软件商业使用的最佳实践》 等书籍也可以提供指导。
GitHub出品的 开源指南 也包含了许多可以帮助你构建或贡献开源社区的资源。
谷歌开源了它的 开源策略文档 ,它可以作为一个创建模板来创建你自己的内部策略。
InnerSource Commons,专门帮助公司实现开源原则和实践,以及交流关于内部专有软件和基础设施开发的想法。
另一个关于开源策略的优秀资源是一个名为Changelog的博客。它包括一个涵盖了许多不同的开源话题、名叫“提交请求”的播客。这个播客覆盖了从创建开源软件的人性方面到商业模式和战略问题的所有问题。
请注意,技术行业内外的许多公司都有非常复杂的开源项目。你可以,也应该向他们学习。基于他们自身的需求,他们参与开源的方式有所不同,但是你可以选择和采用最适合你的业务的实践和策略。Linux基金会的 TODO Group 的创建是就为了将这些公司聚集在一起,分享和发展最佳实践。TODO还在GitHub上提供了一套免费开源策略和模板,你可以使用及贡献。
说到开源先锋,通用电气可能不是你第一个想到的公司,但通用电气是开源领域的强力玩家。通用电气软件有一个“工业Dojo”——与 Cloud Foundry基金会 合作运行——为了强化其在解决世界上最大的工业挑战的力量。通用电气从与其合作伙伴的协作中获得收益,反之亦然。
在其他已经开展专业的、自研的用于推进开源和商业化工具的组织中,Netflix是一个真正的突出者。非常值得参观该公司的开源软件中心。Netflix为开源社区贡献了许多有用的工具和应用,从机器学习和编排应用 到在其平台上运行的应用,其中许多工具和应用都经过了大规模测试和加固。反过来,Netflix获得的贡献有助于其平台更高效地运行,同时其开源努力也为各种合作关系打开了大门。
内部资源
虽然这些类型的外部资源可以提供关键的指引,并作为你自己的战略的基准,但内部协作是制定你的开源业务战略的关键。你的开源战略应该根据你自己独特的商业模式量身定做,而你自己公司里的人是最好的信息来源。此外,您需要卷入所有利益相关者来达成共识,以确保每个人都意见一致、并为看到工作取得成功而投入。例如,让高层领导参与协作过程是很重要的。
在这一点上,创建一个开源项目是无价的。TODO Group的开源指南 《创建一个开源项目》 指出:“通过创建开源项目办公室OSPO,企业可以是能、简化和组织开源的使用,并使其直接与公司的长期业务计划挂钩。开源项目办公室旨在成为公司开源运营和组织架构的中心,帮助将所有需要的组件凝聚在一起。
开源项目办公室可以帮助制定代码使用、分发、选择、审计等方面的政策。它还可以为培训开发者、确保法务合规性和建立社区参与提供指导。根据该指南,“办公室还提供在公司内外有关开源的推广宣传和交流。”
“你获得人心(推进开源战略)的唯一方法就是在各个团队中找到那些愿意主动出击的人。” —— Guy Martin, Autodesk 开源负责人(Open@ADSK)。
在选择内部员工帮助制定战略时,请记住,关键是要让有资格提供项目业务和法律治理的人员以及能够提供技术治理的人员参与进来。例如,具有技术技能的员工可能了解当前的开源实践,有资格来制定例如“入站贡献准则”的策略,而具有商业资格的人员可能更有资格制定有关商标的策略;对应的,具有法律资格的员工最适合定义开源许可策略。当然,识别对开源抱有真正热情的利益相关者是至关重要的。关于开源项目办公室的架构及各种管理角色探讨的内容在前面提到的开源指南中有详细说明。
如何让所有的利益相关者参与进来?从交谈开始,最重要的是,倾听什么有效,什么无效。你参与的方式将取决于哪种方式对你所在的公司及其现有文化有效。但在你深入战略之前,先做研究总是有好处的。
Guy Martin刚开始担任Autodesk的开源负责人时,他向老板要了两份名单:“我说,我想要一份名单,上面写着相信你要做的事情(开源)的人,以及你为什么在这个项目中雇佣我。我还要一份名单,上面要么是坚决不相信这项计划会奏效的人,要么是持观望态度的人。“然后Martin和这两个名单上的每个人都进行了交流。诋毁者帮助确定了他们业务的绊脚石在哪里,而他接触到的拥护者们帮助他建立这个项目。
关键注意事项
我们已经介绍了战略文档的关键组成部分以及如何创建战略文档。在制定战略时有两个非常重要的考虑因素:治理和可持续性。
这些概念将为你的项目建立哲学框架,决定它如何运行,并最终帮助决定如何/是否可以最大化你的开源策略。
注意事项1:治理
在你制定开源策略之前,你可能会有许多不同的流程——跨团队和部门、产品团队和IT等——来使用代码或贡献上游。获得标准化的治理是简化和优化流程的关键,可以使得开发人更容易地参与。它还有助于让每个人都在同一页面上,并为衡量实现目标和降低风险的进展提供基础。如果每个人都遵循相同的策略和流程,则更容易查明和解决可能发生的任何障碍。
“我不希望为了一个5行的bug修复代码而花费10周的时间和500页的文档,所以我和法务合作,创建了一个简化的工作流程,让工程师可以在合理的时间内完成。” —— Guy Martin, Autodesk 开源负责人(Open@ADSK)。
你的策略应该非常具体地覆盖你所在组织内外的开源治理。正确的治理需要具体的策略和过程,但也应该指导围绕构建、部署和维护开源软件的文化。特别是,开源文化是面向透明,开放,并鼓励来自多元化的贡献者的参与。
有一些开源项目欢迎外部贡献,但项目的路线图和治理在很大程度上掌握在一家公司手中。还有一种是真正的社区驱动的开源。“你在做什么类型的项目?” —— Joe Beda, Kubernetes项目联合创始人,Heptio联合创始人及CTO。
治理可以帮助将风险降至最低。例如,许多开发人员乐于在线获取开源工具,并将其与现有代码、平台和应用集成。然而允许他们在没有任何正式获取流程的情况下这样做,意味着面临从安全风险到法律风险等重大风险。同样,开源许可证和策略也会对组织对技术和知识产权组合的控制产生巨大影响。此外,对于同样拥有商业版的开源项目,是否应该让外部利益相关者参与治理也是值得考虑的。
与外部贡献相比,拥有与外部开源社区结构紧密对应的内部治理架构,也可以简化你的开发人员在处理面向内部工作的项目时的“上下文切换”。当一个内部项目最终开源时,这样也简化了过渡,因为开发人员已经在这种治理模式下工作。
“我们在Kubernetes社区中尝试的一件事是项目优先于人或公司的理念。什么对项目有好处是一个独立的问题(相比什么对参与项目的公司有好处)。当你遇到与一家公司过于紧密捆绑的开源项目时,真正棘手的问题可能会出现。” —— Joe Beda, Heptio。
注意事项2:可持续性
你的开源项目取得成功的一个关键驱动力是制定一个围绕鼓励其他公司依赖你的开源项目的策略。长期的、可持续的项目产生于功能丰富的开发者社区,这些社区的代码产品化为商业产品,商业产品获利并反向再投资到项目中。目标是使能一个良性的项目构建产生利润的产品,并将利润再投资到项目社区生命周期中。
伙伴关系、贡献者协议和商业依存关系可以推动基于公认的治理和知识产权模型的商业和社区参与的良性循环。一个被明智地定义的开源项目可以帮助推动所有这些。你的组织在分享开源创造并将其货币化以及推动合作关系和商业依赖方面的策略是什么?
例如,许多开源工具在线提供免费版,但也存在收费的、受支持的实例,外部贡献者推进商业提供的平台和应用是很常见的。明智的做法是在您的战略文档中,准确地定义这些版本的差异以及将如何对它们施加控制,记住控制水平可能会随着时间的推移而变化。
其它
除了前面讨论的战略的关键要素之外,还有许多其他策略可以在战略文档中列出。好消息是有一些来自可信赖的外部资源的免费指引可以利用。
例如,Synopsys提供了一套有用的开源战略制定四支柱指导准则:
- 定义构建开源平台和应用的策略
- 定义使用开源的策略,例如将现有产品和服务与开源工具集成
- 定义开源社区建设的策略,例如鼓励对现有开源项目的贡献和参与
- 定义基于开源的构建策略,包括基于开源的内部平台改造或应用部署
除了这些战略支柱和治理指导方针外,以下是您的战略文档中需要包含的其他一些关键组件:
- 目标:定义你的业务战略的目标,以及开源如何推动实现你的目标。例如,许多公司目前正在通过迁移到OpenStack等开放云平台来改造其平台基础架构。在许多情况下,这是因为他们研究了通过将基础设施迁移到云可以获得的投资回报ROI,确定了他们可以在多大程度上避免供应商锁定,并为他们想要实现的特定财务里程碑设定了目标。
为您的战略文档建立一套完整的目标,并提供实现的度量指标。 在要跟踪的指标中,考虑报告上游贡献的增加、研发成本的削减以及维护者招聘的增加。除了这些指标之外,你的业务目标清单还应该提供关于开源领导力里程碑、项目安全性和性能提升的细节。不过,也要牢记世界上没有魔力指标。
“查找您正在参与的每个社区的度量指标。我倾向于根据一个特定的社区所感受到的痛苦来寻找度量标准,然后试图改变这些度量标准。并不存在一个神奇的评估,假设你只要盯紧张六个指标(从拉取请求PR到贡献者数量)然后就可以突然宣布你的社区和生态是健康的。” —— Sarah Novotny,谷歌Kubernetes社区项目经理
管理计划:一旦你的战略文件包含了具体的目标,确保它也列出了实现你的开源业务目标的具体行动,并分配角色和责任来跟踪进展。最重要的部分是得到你的高层们的认可。
提供特定的KPI(关键绩效指标):用于跟踪目标的实现情况。
策略和流程:除了开源许可证和接受贡献和外部代码的规则之外,管理策略和流程也是关键。Linux基金会的TODO(Talk Openly Develop Openly:开放的讨论、开放的开发)Group在GitHub上提供了 开源策略样例及模板 。
合作和收购:合作和收购是一个成功的开源业务战略的关键部分。你的战略文档应该明确这些领域的目标,并应该列出你的组织可能与其他组织(如TODO、Cloud Foundry基金会等)建立的重要战略伙伴关系。
专利和知识产权:专利和知识产权指引可以对开源的使用方式产生巨大的影响,特别是在许多情况下设计到商业化应用时。你的战略文档应该具体说明你的专利、与专利相关的规则以及你的知识产权指引。如果你的组织有单独的知识产权战略,请确保你的开源战略与之保持一致。
基金会和赞助:近年来,开源基金会和其他非营利组织对开源世界产生了巨大的影响。你的组织可以从与Linux基金会、Eclipse基金会、Apache软件基金会等基金会的合作中受益,您甚至可以从启动一个以开源为中心的基金会中受益。你的战略文件应该提供任何已有的合作关系以及与基金会合作的计划。
“基金会提供了很多价值。没有它们,历史上很多非常关键的项目都很难获得所需的资金。它们有助于确保一个平等的竞争环境,并为组织提供了一种使其能够在不直接贡献开发者的情况下也能回馈开源项目的机制。“ —— Luke Faraone,Dropbox软件工程师
- 入站贡献准则/度量指标:你的战略可以从入站贡献中获得巨大的收益(请参阅我们关于可持续性考虑因素的部分)。你的战略文档应该为贡献提供指导方针和衡量标准。
您不需要从头开始制定相关策略; 贡献者契约 是一个坚如磐石的行为规则和贡献者规则文档,被 超过4万个开源项目(包括Kubernetes、Rails和Swift) 。同样,TODO Group、Linux基金会和Synopsys等组织在设置入站贡献规则方面也有丰富的经验。
一个好的入站贡献策略还包括仔细记录你的API(这也一直是最佳实践)。OpenAPI已经成为描述RESTful API的行业标准。
“在构建开源社区时最重要的一件事就是确保你自己的流程是开放的。你的决策流程越透明,你的社区就越有主人翁意识。你也要确保你的流程不会成为阻碍者。如果你的开源流程(无论是入站贡献还是出站贡献)是繁重的,人们会希望绕过这个流程,或者只是认为贡献太难了。” —— Luke Faraone,Dropbox软件工程师
“你需要给人们提供方法来参与你的项目,而不需要他们拥有博士学位或在相关领域有25年工作经验。你需要的是让他们快速地参与进来,这意味着你需要非常好的启动文档,以及要有活跃、健康的论坛。”-Ian Varley,Salesforce的软件架构师。
何时投资及投资的金额:确定ROI
没有办法能让你一挥魔杖就看清可以从你的开源项目中获得的确切好处,但有关于如何实现它的指引。你必须考虑投资回报率(ROI)与你的战略之间的关系。底线是,你应该从多个角度来考虑可以从你的开源战略中获得的投资回报。
首先,您必须权衡开源的好处与管理它的风险和成本。来自Novaica和OpenLogic的 白皮书《开源投资回报比ROI:实现开源软件的财务承诺》 (PDF) 提供了许多计算开源的ROI并围绕其制定战略的具体方法。例如,以下来自白皮书的图表显示,项目开发的持续时间对ROI计算的各种要素(从许可费用到IT/服务费用)有着深远的影响:
在计算ROI时,请记住以下准则:
- 计算来自成本节省的收益:在确定开源策略的好处时,需要评估的一个关键指标是计算成本节省。评估开源部署和开源开发带来的成本节省,同时考虑许可费、硬件、支持等方面等。
对于许多组织来说,支持是一个主要的成本中心,如果你能够降低支持成本,您就可以获得巨大的财务收益。同样,通过迁移到Linux及OpenStack等开源平台,你可以消除哪些具体的硬件和许可成本?例如在开放云平台的情况下,云中的存储和计算资源可以完全消除许多内部对此类资源的需求。但一定要记住,尽管“免费”的开源软件可能没有与专有软件相同的许可费用,但它也会产生开发成本,包括贡献上游、与其他产品集成等等。
按到达率和转化率计算收益:通过跟踪你创建的开源项目的进展,你可以收集有用的信息,在某些情况下,还可以衡量你的组织的产品和服务的转化率。报管理器(npm和RubyGems.org等)可用于分发开源项目,之后也允许你跟踪下载。许多组织将他们的项目放在GitHub上,在GitHub上的“流量”页面可以详细看到一个项目被克隆了多少次等等。这些指标可以帮助你的项目的品牌知名度、获得贡献者的可能性等等。
做运营风险评估:开放式Web 应用程序安全项目(OWASP) 最近将“使用具有已知漏洞的组件”列入其十大风险列表,开源软件在某些情况下可能引入漏洞。开源软件安全审计 让你可以查看代码中的组件和漏洞。黑鸭可以执行评估,Wireshark 和Nikto 等工具可以识别漏洞和问题。
避免法律风险:运营风险和法律风险是不同的,但评估两者都很重要。围绕开源的法律风险可以包括使用错误许可证的法律诉讼成本,具有不兼容的开源许可协议项目的代码合入成本等。
开源定义 是你应该开始了解开源项目应该如何许可,以及什么是真正的开源的地方。也可以查看 开放标准要求。
你还必须评估你的项目应该采用哪些类型的开源许可证。软件自由法律中心(SFLC)提供了一套关于开源许可证和版权如何运作的在线资源。此外,还可以在Choosealicense.com上找到开源许可证特点的简化列表。
你还需要考虑开源许可证合规的成本和好处。不遵守开源许可证的成本可能很高,并涉及诉讼。Linux基金会的开源合规计划 提供了多种资源,包括出版物、培训资料、以及为开发者提供的免费培训课程 。(你还可以查看我们的 使用开源代码 指南,其中有合规基础的概述。)
法律问题当然应该由你自己的法律专家来评估。SFLC的作者们是那些参与了主流开源许可证的律师们。参考最新的以及历史版本的 国际自由和开源软件法律评论也是一个很好的办法。
决定投资方向
投资开源可以从多个角度进行,包括利用内部资源和外部资源。请记住将开发者资源投入到开源和上游贡献是投资开源的一部分。理解进入和输出的代码以及项目是如何产生及分发非常重要。
识别哪些开源项目对交付产品或服务至关重要:一旦一家公司了解了其知识产权组合以及其开发者希望做出的开源贡献,它就可以努力来保障其开发者有能力做出这些贡献。
进行内部审计:你是否通过收购获得了开源工具和平台,你是否从中获得了最大化的收益?在你的审计中对此进行评估。
确定哪些内部项目可以开源
你还可以采用好的方法来识别在你的组织内部存在或应该存在的开源项目。例如,许多硅谷公司都有内部竞赛和黑客马拉松活动,为员工的中最好的开源创造提供大奖。通过这些方法,从PayPal到谷歌等公司都将员工的开源创造内置到自己的架构和产品组合中。
“在黑客马拉松中发生的意见伟大的事就是重组的力量——开发者说‘我知道有一个方法来实现这个,这里有另一个项目来帮助这个过程,而我可以把这些东西组合在一起。’如果所有东西都是闭源的,那么问题是你可以使用的构建模块就会少很多。相比之下,有了开源意味着世界尽在你的掌握之中,你有更多的构建模块可供你使用。” —— Ian Varley,Salesforce软件架构师。
然后,借助外部资源来帮助确定你尚未使用或参与、但可能具有业务利益的项目。在一开始就选择正确的开源项目和社区具有巨大的影响力。选择具有重要战略意义的项目来作为重点至关重要。
与其他组织合作:它们可以帮助你选择最好的项目来参与,并识别它们从哪些项目中获得收益。有几个独立的组织可以提供帮助,Linux基金会、TODO Group、Innersource Commons和OSI都可以提供指导。
检查你所在行业的其他组织为哪些项目做出了贡献:它们可以引导你去参与正确的项目。例如,许多电信企业正在从开放式网络功能虚拟化(NFV)技术中获得巨大收益,该技术可以消除电信技术堆栈中的历史专有组件。其中一些公司与Linux基金会合作开展NFV计划,还有几个专注于NFV的工作组。这些专注于行业的工作组可以为你提供有价值的指引。
对更多的能帮助你建立战略的资源感兴趣?下面是一些优质资源:
衡量开源ROI
启动成功的开源项目
法务资源
Licensing开源许可证
贡献者行为准则
开源策略
开源战略博客
开源战略播客
致谢
贡献者:
- Andrew Aitken,全球开源实践领导者,Wipro
- Chris Aniszczyk,CNCF 基金会CTO
- Joe Beda, Kubernetes项目联合创始人,Heptio联合创始人及CTO
- Luke Faraone,Dropbox软件工程师
- Jim Jagielski,Consensys开源总监
- Guy Martin,Open at Autodesk开源负责人
- Sarah Novotny,谷歌Kubernetes社区项目经理
- Ian Varley,Salesforce软件架构师