这些开源指南是由TODO小组与Linux基金会和更大的开源社区合作开发的。他们从从事开放源码开发的领先公司收集最佳实践,旨在帮助你的组织成功地实现和运行开源计划办公室。我们期望这些指南通过社区贡献而发展的活文档。 对于针对个人贡献者定制的指南,我们推荐GitHub的社区指南(https://opensource.guide/zh-cn/)。
不仅仅在技术领域,在各个行业,开源已经成为开发软件的实际途径。随着公司使用开源代码来开发自己的商业产品和服务,他们也看到了开源贡献回馈给开源项目的策略价值。
然而,这些公司如果不了解这些项目,不了解项目所处的开源社区以及项目是如何运作的,就参与开源的话,可能会给公司本身和开源社区带来不利影响。没有确立策略就接触开源贡献的话,可能会影响公司在开源社区中的声誉并招致法律风险。
本指南说明了作为一个组织为开源做贡献意味着什么,并指明了如何成为一个优秀的开源社区企业公民。通过阅读本指南,可以了解开源项目是如何构建的,如何进行开源贡献,为什么内部开发者参与开源贡献是重要的,以及为什么为开源参与和开源管理制定策略是重要的。
目录
为何进行开源贡献?
在今天,几乎不可能找到一个没有从开源软件中以某种方式获益过的组织。一些公司,如英特尔、IBM和三星,所有的开源项目都为开源社区做出贡献。当系统管理员或开发人员将软件带入开源社区时,其他公司几乎无意中便成为了开源的消费者。
许多公司取得商业上的成功,开源软件对其至关重要。因此,为开源软件项目做贡献变得有益(且必要)。自2005年起,已经有来自1,300多家不同公司的超过13,500名开发人员为Linux kernel 做出了贡献,而这,仅仅只是一个项目!
“我们知道,对于许多大型项目来说,我们的大多数贡献者将会是那些需要使用像Ceph和Gluster这样项目的公司的员工。我们有很多客户,客户会为开源软件做贡献,是因为他们需要使用这些软件。不论是个人参与贡献还是企业参与贡献,我们都将它们视为成功的案例。” Stormy Peters – Red Hat开源社区领导高级经理
比起开源社区中一些受益于企业回馈的贡献,有很多强有力的商业原因显示贵组织内部所使用的开源软件项目会从开源社区受益更多。这里有几点开源贡献的益处:
但是,您需要注意一下您参与这些社区的方式,以避免您的贡献被错误认知或出现其他问题。每个开源项目在规范、期望和流程上都有细微的差别,所以在贵组织开始提供贡献之前,需要全面地了解这些项目。可以通过让人加入社区并花一些时间观察项目,或者聘请已经在社区中具有良好的参与记录的人等方式来实现对项目的全面了解。
如何管理开源项目
第一眼看上去,开源项目可能显得很混乱。完全不了解开源软件的人常常会想知道,随机的一群人写出的代码如何能做出被数百万人使用的稳定产品。但他们很快就会意识到,这并不是开源软件的运作方式。几乎每个开源项目都有一定的结构,而最好的项目都会在项目网站或文件中清晰地阐述其结构和项目治理。(GitHub的贡献者指南提供了很好的项目解析概述。)
尽管项目之间确切的管理模式有很大差异,但还是存在一些共同点:
社区是可以成就一个开源项目,也可以搞垮一个开源项目的因素之一,所以拥有一个强大的、充满活力的且多样化的开源社区对项目的成功至关重要。上文列出的角色中的所有人都是这个社区的一部分,同时还有人在项目中填补了文件编制、市场营销、用户支持和其他多方面的关键角色岗位。
贡献过程如何运作
贡献过程在开源项目之间有所不同。例如:
这些只是贡献形式可能会有所不同的几个方面,因此以阅读有关如何贡献的文件作为开端是非常重要的。许多项目都会将此文件以“贡献指导(CONTRIBUTING)”或“自述文件(README)”的形式,包含在代码存储库的主目录中,但如果没有,您可能需要深入到网站的文件或社区部分来寻找这一文件。为了确保您能够准确理解一个特定项目所期望的贡献行为,如果能获取的话,阅读一些其他的文件、社区指南和行为规范也是一种好方法。
如果您是第一次为项目做贡献,您可能需要考虑找一位导师或经验丰富的项目成员,他们可以在您准备您的第一次贡献时审查您的工作并提供一些反馈意见。
在按照文档中描述的流程提交贡献后,您将需要能够对反馈做出回应。常见的反馈可能包括有关某些事物如何运作或您为何选择某个特定方法的问题,以及改进建议或变更要求。这种反馈有时可能会是难以回应的,因此假定这些反馈的本意是为了让您的贡献变得更好,并且避免让自己陷入防备状态会对回馈反应有所帮助。在您的代码被采纳之前,您可能需要经过几轮的重新提交和补充反馈,甚至在某些情况下您的贡献可能会被拒绝。有些事物不被接受可能有多个合理的原因,所以如果您的代码被拒绝,不要介意,而且如果可能的话,尝试了解更多关于您的贡献未被接受的原因,以帮助增大您下一个贡献被采纳的机会。
请记住,如果您的贡献被采纳了,您可能会被期望来长期维护这个贡献。对于较大的贡献、新性能的提出或独立的代码而言尤其是如此,例如一个特定硬件的驱动程序。而对于较小的贡献和漏洞修复而言,则不太可能被期望有任何长期维护。
组织如何进行开源贡献
多年来,一些开源项目与那些使用或贡献于这些项目的公司或其他组织之间的关系有点难以明确。组织通常建立业务关系的方式不太适合开源项目,因此一些组织很难了解如何以富有成效的方式进行开源贡献。
另一个挑战是,当组织的需求与开源项目的需求不一致时,组织会表现得比较自私或让人感到棘手,这会导致开源社区对组织的贡献的背后动机产生怀疑。过去,一些组织曾尝试做出与开源项目目标不一致的巨大贡献,而且在某些项目中,这样的历史教训可能会让开源社区更加难以信任组织。
但是,也有许多成功案例,例如Linux kernel,该项目中的组织就以有意义的方式进行了开源贡献。组织为开源项目做贡献的最常见和最简单的方式,就是向花费大量时间投入开源项目的员工支付薪酬。为了让这个方式取得成功,这些员工需要了解该项目的贡献流程和规范,以提高他们的贡献被接受的可能性。如果您的组织刚开始接触一个开源项目或者刚开始接触开源,则您应该考虑聘请已经参与过贡献并且在您所想要进行贡献的开源项目中广为人知的人员,以便他们能够为组织提供关于更可能在项目中取得成功的贡献方式的指导。经验丰富的贡献者可能很愿意作为导师来帮助您的员工, 因为他们追求开源职业发展之路。(参阅“TODO指南:招募开源开发者”)
在大多数项目中,组织都有其他的方式来参与其中,但这些方式可能会因项目的不同而有所差异。开源项目和支持这些项目的基金会常常需要组织可以提供的资源,包括基础架构、资金、市场营销服务、法律服务等等。许多项目允许企业通过向开源项目提供资金和/或人员,来以更加正式的方式赞助或参与项目,作为回报,企业可以获得项目中的一些顾问的角色或提升企业的曝光度。
例如,Node.js基金董事会由企业成员代表、技术指导委员会代表和个体成员选出的代表组成。含董事会部分成员在内的企业成员为小型组织支付的费用从5000美元到250,000美元不等。虽然每个项目的赞助资格或会员资格的获取方式略有不同,但为开源项目提供资金有助于开源项目支付其费用开支并且可以帮助项目取得成功。
在参与开源项目时,如何成为良好的企业公民
一般而言,如果说本指南和开放源代码有一个潜在主题的话,那就是每个项目都是不同的。每次您加入一个开源项目时,您都需要花一些时间来确定自己在项目中的定位并学习项目是如何运作的。
对于参与开源项目的组织来说,每个员工都需要为他们参与的每个项目完成这个学习过程。这里有一些可以帮助您正确地迈出第一步的建议。
当您的组织理解了刚开始时如何做出那些较小的贡献后,您将需要在这些贡献的基础上,开始为项目做出更大的贡献,并对项目产生更大的影响。
但是,从长远来看,比起让上游项目接受它所耗费的精力,速成补丁需要在每个升级周期中被测试、更新与重新应用几乎总是需要耗费更多的时间和精力。这种行为也可能在社区中被看作是自私的,因为别人也可能从您的修复中受益,所以它可能会损害贵组织在开源社区中的声誉。
贡献代码到上游的最佳实践
在您的组织内部:
面向项目外部:
对于组织来说,最具挑战性的事情之一就是学会如何在开源项目中获得影响力。仅仅因为您的组织很重要,并不意味着您可以期待在没有赢得开源社区的尊重的情况下就像重要人物一样被对待。影响力源于参与,而且一些贡献于开源项目的人在证明他们是可靠且负责任的后,最终将随着时间的推移赢得具有更大影响力和领导力的地位。
您还应该预计出现一些意见冲突,并准备好专业地去解决这些冲突。当有人不同意贡献的决策、方法或风格时,审查过程可能会变得非常激烈。确认反馈始终是聚焦在贡献上而不是变得个性化,同时保持冷静和专业是很重要的。请记住,您在开源项目的参与过程是公开的,且可能会永远留在互联网上,一次失控的激烈讨论,可能会以组织或个人的形式在往后又返回来困扰您。因为所有的这些参与过程都是非常公开的,所以为您的员工提供一些关于与难以相处的人打交道与解决冲突的培训可能是一个好方法。
如何制定您的开源贡献策略
拥有一个仔细斟酌且周到的开源贡献战略,不仅有助于在参与开源项目时为您的员工提供指导, 还可以帮助您向贵组织内的高级管理层说明开源项目的参与过程。开始时要看看组织的整体业务目标,以确定您的开源工作该如何适应贵组织的更广泛的战略,这是很重要的。(请参阅“TODO指南:制定开源策略”)通过明确地将您的开源贡献战略与组织的战略性工作挂钩,您可以向高级管理层展示为什么这项工作对组织至关重要,并帮助您的员工了解其贡献的影响。
“领导层的支持以及对开源是您战略的业务关键部分的认同都是非常重要的。您应该真正理解公司的目标以及如何在您的开源战略中实现这些目标。” Nithya Ruff – Comcast开源实践高级主任
一旦您确定了一些与业务目标一致的目标和策略,您就需要制定一个实施计划。以下这些问题将有助于您思考您的计划中可能需要解决的一些问题:
精通开源贡献的11个技巧
如何在组织为开源贡献构建一个健康的环境:
结语
开源项目会留在这里,而且它们在大多数组织向客户提供产品和服务的能力方面发挥着关键作用。作为一个组织,如果您想要影响驱动您的业务取得成功的开源项目,您就需要参与其中。为贵组织制定可靠的贡献战略和实施计划,将助您走上通往成为一名优秀的企业开源公民之路。祝您好运!
鸣谢
贡献者:
这些资源是与TODO(公开对话,开放式开发)小组 – Linux基金会的专业开源程序网络小组合作创建的。 特别感谢那些贡献自己的时间和知识来制作这些综合指南的开源项目经理。 参与的公司包括Autodesk,Comcast,Dropbox,Facebook,Google,Intel,Microsoft,Netflix,Oath(Yahoo + AOL),Red Hat,Salesforce和Samsung。 要了解更多信息,请访问:todogroup.org。 我们邀请您在GitHub上下载或参与这些指南。所有内容使用CC-BY-SA 4.0授权。