前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TODO指南:参与开源社区

TODO指南:参与开源社区

作者头像
CNCF
发布2019-12-05 13:10:33
8570
发布2019-12-05 13:10:33
举报
文章被收录于专栏:CNCFCNCF

这些开源指南是由TODO小组与Linux基金会和更大的开源社区合作开发的。他们从从事开放源码开发的领先公司收集最佳实践,旨在帮助你的组织成功地实现和运行开源计划办公室。我们期望这些指南通过社区贡献而发展的活文档。 对于针对个人贡献者定制的指南,我们推荐GitHub的社区指南(https://opensource.guide/zh-cn/)。

不仅仅在技术领域,在各个行业,开源已经成为开发软件的实际途径。随着公司使用开源代码来开发自己的商业产品和服务,他们也看到了开源贡献回馈给开源项目的策略价值。

然而,这些公司如果不了解这些项目,不了解项目所处的开源社区以及项目是如何运作的,就参与开源的话,可能会给公司本身和开源社区带来不利影响。没有确立策略就接触开源贡献的话,可能会影响公司在开源社区中的声誉并招致法律风险。

本指南说明了作为一个组织为开源做贡献意味着什么,并指明了如何成为一个优秀的开源社区企业公民。通过阅读本指南,可以了解开源项目是如何构建的,如何进行开源贡献,为什么内部开发者参与开源贡献是重要的,以及为什么为开源参与和开源管理制定策略是重要的。

目录

  • 为何进行开源贡献?
  • 如何管理开源项目
  • 贡献过程如何运作
  • 组织如何进行开源贡献
  • 在参与开源项目时,如何成为良好的企业公民
  • 贡献代码到上游的最佳实践
  • 如何制定您的开源贡献策略
  • 精通开源贡献的11个技巧
  • 结语
  • 鸣谢

为何进行开源贡献?

在今天,几乎不可能找到一个没有从开源软件中以某种方式获益过的组织。一些公司,如英特尔、IBM和三星,所有的开源项目都为开源社区做出贡献。当系统管理员或开发人员将软件带入开源社区时,其他公司几乎无意中便成为了开源的消费者。

许多公司取得商业上的成功,开源软件对其至关重要。因此,为开源软件项目做贡献变得有益(且必要)。自2005年起,已经有来自1,300多家不同公司的超过13,500名开发人员为Linux kernel 做出了贡献,而这,仅仅只是一个项目!

“我们知道,对于许多大型项目来说,我们的大多数贡献者将会是那些需要使用像Ceph和Gluster这样项目的公司的员工。我们有很多客户,客户会为开源软件做贡献,是因为他们需要使用这些软件。不论是个人参与贡献还是企业参与贡献,我们都将它们视为成功的案例。” Stormy Peters – Red Hat开源社区领导高级经理

比起开源社区中一些受益于企业回馈的贡献,有很多强有力的商业原因显示贵组织内部所使用的开源软件项目会从开源社区受益更多。这里有几点开源贡献的益处:

  • 吸引人才 - 当您依赖开源软件时,找到了解该项目内外部情况的人员的最佳地点就是在该项目的开源社区中。通过在社区中公开地工作,您可以吸引那些意识到他们可以为自己最喜欢的开源项目工作并获得报酬的人。当您的员工每天与这些人并肩工作时,他们可以帮助您找到适合贵公司的人才。(请参阅“TODO指南:招募开源开发者”)
  • 降低维护成本 - 那些没有将新特性或新功能贡献回馈给上游项目,就开始修复漏洞或者为开源项目增加新特性和新功能的企业,很快就会认识到,新功能增加或应用安全修复的升级滞后,可能会成为一场驱使维护成本不断上升的噩梦。而将您的变更贡献回馈给上游项目,意味着这些变更会自动包含在之后的更新中,而不会产生额外的维护成本。
  • 影响方向 - 在开源项目中,新的特性和功能源于贡献,而且这些贡献会影响项目的方向。如果您希望项目能够拥有对贵组织来说至关重要的功能,那么您就需要有能够实施任何潜在变更的活跃贡献者。只要您的变更与项目目标保持一致,您就可以通过您的贡献对项目方向产生一定影响。

但是,您需要注意一下您参与这些社区的方式,以避免您的贡献被错误认知或出现其他问题。每个开源项目在规范、期望和流程上都有细微的差别,所以在贵组织开始提供贡献之前,需要全面地了解这些项目。可以通过让人加入社区并花一些时间观察项目,或者聘请已经在社区中具有良好的参与记录的人等方式来实现对项目的全面了解。

如何管理开源项目

第一眼看上去,开源项目可能显得很混乱。完全不了解开源软件的人常常会想知道,随机的一群人写出的代码如何能做出被数百万人使用的稳定产品。但他们很快就会意识到,这并不是开源软件的运作方式。几乎每个开源项目都有一定的结构,而最好的项目都会在项目网站或文件中清晰地阐述其结构和项目治理。(GitHub的贡献者指南提供了很好的项目解析概述。)

尽管项目之间确切的管理模式有很大差异,但还是存在一些共同点:

  • 负责人:最起码应该有专人负责性能、发布以及其它活动的最终决策。在某些情况下,这些活动由一个人负责,例如,Linus Torvalds是原创人员,并且对与Linux kernel相关的任何事务拥有最终发言权。而在其它项目中,可能有一个或多个委员会负责项目的各个方面,如管理Node.js项目的核心技术委员会(the Core Technical Committee)。
  • 维护人员:大多数领导者会将一些决策委托给那些负责维护项目特定部分的人员,而在大型项目中,这些维护人员还可能将其中部分工作委托给其他负责人员。例如,Linus Torvalds将Linux kernel文件决策权委托给Jonathan Corbet。
  • 提交者:一些项目中,有一些曾为项目做贡献的人,他们被认为足够可靠且负责任,所以被允许直接提交至项目的全部或部分内容,而不必提交给维护人员审查。而对贡献存有疑虑时,这些提交者的贡献仍然需要由维护人员或项目领导者进行审查,而且这些贡献可能被拒绝。
  • 贡献者:许多人通过代码、文件和其他方式为开源项目做贡献。这些贡献在被采纳之前通常需要一位经验丰富的提交者和/或维护人员的审查。
  • 用户:开源项目中最重要的一群人可能就是实际使用该产品的人,因为用户给予项目一个目标并帮助其发展。这些有价值的社区成员可以提供有关性能、漏洞及其他更多方面的反馈。

社区是可以成就一个开源项目,也可以搞垮一个开源项目的因素之一,所以拥有一个强大的、充满活力的且多样化的开源社区对项目的成功至关重要。上文列出的角色中的所有人都是这个社区的一部分,同时还有人在项目中填补了文件编制、市场营销、用户支持和其他多方面的关键角色岗位。

贡献过程如何运作

贡献过程在开源项目之间有所不同。例如:

  • 项目拥有带有关于编码风格、语言、格式、漏洞/工单号、发布时间等信息的不同的指南。
  • 有些项目要求签署贡献者协议,而其他项目则要求发布人的署名或其他流程。
  • 有项目可能要求将修补程序发布到邮件列表中,而其他项目会提出合并请求。

这些只是贡献形式可能会有所不同的几个方面,因此以阅读有关如何贡献的文件作为开端是非常重要的。许多项目都会将此文件以“贡献指导(CONTRIBUTING)”或“自述文件(README)”的形式,包含在代码存储库的主目录中,但如果没有,您可能需要深入到网站的文件或社区部分来寻找这一文件。为了确保您能够准确理解一个特定项目所期望的贡献行为,如果能获取的话,阅读一些其他的文件、社区指南和行为规范也是一种好方法。

如果您是第一次为项目做贡献,您可能需要考虑找一位导师或经验丰富的项目成员,他们可以在您准备您的第一次贡献时审查您的工作并提供一些反馈意见。

在按照文档中描述的流程提交贡献后,您将需要能够对反馈做出回应。常见的反馈可能包括有关某些事物如何运作或您为何选择某个特定方法的问题,以及改进建议或变更要求。这种反馈有时可能会是难以回应的,因此假定这些反馈的本意是为了让您的贡献变得更好,并且避免让自己陷入防备状态会对回馈反应有所帮助。在您的代码被采纳之前,您可能需要经过几轮的重新提交和补充反馈,甚至在某些情况下您的贡献可能会被拒绝。有些事物不被接受可能有多个合理的原因,所以如果您的代码被拒绝,不要介意,而且如果可能的话,尝试了解更多关于您的贡献未被接受的原因,以帮助增大您下一个贡献被采纳的机会。

请记住,如果您的贡献被采纳了,您可能会被期望来长期维护这个贡献。对于较大的贡献、新性能的提出或独立的代码而言尤其是如此,例如一个特定硬件的驱动程序。而对于较小的贡献和漏洞修复而言,则不太可能被期望有任何长期维护。

组织如何进行开源贡献

多年来,一些开源项目与那些使用或贡献于这些项目的公司或其他组织之间的关系有点难以明确。组织通常建立业务关系的方式不太适合开源项目,因此一些组织很难了解如何以富有成效的方式进行开源贡献。

另一个挑战是,当组织的需求与开源项目的需求不一致时,组织会表现得比较自私或让人感到棘手,这会导致开源社区对组织的贡献的背后动机产生怀疑。过去,一些组织曾尝试做出与开源项目目标不一致的巨大贡献,而且在某些项目中,这样的历史教训可能会让开源社区更加难以信任组织。

但是,也有许多成功案例,例如Linux kernel,该项目中的组织就以有意义的方式进行了开源贡献。组织为开源项目做贡献的最常见和最简单的方式,就是向花费大量时间投入开源项目的员工支付薪酬。为了让这个方式取得成功,这些员工需要了解该项目的贡献流程和规范,以提高他们的贡献被接受的可能性。如果您的组织刚开始接触一个开源项目或者刚开始接触开源,则您应该考虑聘请已经参与过贡献并且在您所想要进行贡献的开源项目中广为人知的人员,以便他们能够为组织提供关于更可能在项目中取得成功的贡献方式的指导。经验丰富的贡献者可能很愿意作为导师来帮助您的员工, 因为他们追求开源职业发展之路。(参阅“TODO指南:招募开源开发者”)

在大多数项目中,组织都有其他的方式来参与其中,但这些方式可能会因项目的不同而有所差异。开源项目和支持这些项目的基金会常常需要组织可以提供的资源,包括基础架构、资金、市场营销服务、法律服务等等。许多项目允许企业通过向开源项目提供资金和/或人员,来以更加正式的方式赞助或参与项目,作为回报,企业可以获得项目中的一些顾问的角色或提升企业的曝光度。

例如,Node.js基金董事会由企业成员代表、技术指导委员会代表和个体成员选出的代表组成。含董事会部分成员在内的企业成员为小型组织支付的费用从5000美元到250,000美元不等。虽然每个项目的赞助资格或会员资格的获取方式略有不同,但为开源项目提供资金有助于开源项目支付其费用开支并且可以帮助项目取得成功。

在参与开源项目时,如何成为良好的企业公民

一般而言,如果说本指南和开放源代码有一个潜在主题的话,那就是每个项目都是不同的。每次您加入一个开源项目时,您都需要花一些时间来确定自己在项目中的定位并学习项目是如何运作的。

对于参与开源项目的组织来说,每个员工都需要为他们参与的每个项目完成这个学习过程。这里有一些可以帮助您正确地迈出第一步的建议。

  • 加入社区 - 每个社区有着稍微不同的参与方式和不同的沟通渠道。请阅读文件以了解社区并加入关键沟通渠道。这些渠道可能包括邮件列表、论坛、互联网中继聊天(IRC)、Slack、漏洞追踪器、源代码库等等。
  • 先潜心学习 - 加入社区后,您需要先潜心花费大量时间去阅读档案资料,在您开始进行开源贡献之前先了解和吸收社区文化。您将希望在参与社区之前了解这个社区的规范和期望。您花费在阅读和倾听上的时间越多,您的第一份贡献被很好地接受的可能性越大。
  • 了解项目治理 - 在进行贡献之前阅读有关项目管理和领导的文档或网站内容。您将希望了解项目中的决策是如何制定的,以及是谁为各种类型的贡献做决策的。
  • 从小事开始 - 以解决一个简单的漏洞或文件修复作为开端。了解贡献过程并修正对贵组织的需求来说无关紧要的小贡献中的错误是会更容易的。在不太重要的较小贡献上犯错误,及时修正并积累经验,然后逐步发展到有能力做出组织需要的更为复杂的贡献。

当您的组织理解了刚开始时如何做出那些较小的贡献后,您将需要在这些贡献的基础上,开始为项目做出更大的贡献,并对项目产生更大的影响。

  • 在活动中建立关系 - 个人层面和组织层面的关系是参与开源社区的一个重要方面。与其他项目成员建立长久关系的最佳方式之一就是参加活动。我们作为他们电子邮件或在线操作另一端的人, 没有任何方式可以像亲自见面这样,有助于了解他们。这些活动有着来自许多组织的项目负责人和产品热心用户的多样人员构成,他们会直接参与到活动当中,通过赞助、展位和样品来展示其所在组织是如何进行贡献的。如果没有赞助组织的资金支持,这些活动中的大多数活动将不可能允许我们聚集在一起互相学习同时帮助实现项目目标。
  • 尽早并经常性地参与社区 - 一些组织会犯的错误是在内部开发大量代码,然后将它们转储到开源项目中的错误,这并不是参与社区的积极方式。事实上,开源项目可以很复杂,看起来似乎显而易见的变更,可能会对项目的其他部分产生持续的副作用。任何重大变更在实施之前可能都需要经过一些社区讨论,以确保其没有副作用,并且确保解决方案与项目更广泛的目标保持一致。在您花费过多时间在创建一套代码之前,与社区讨论它,这将有助于您把注意力集中在问题本身,而不是特定的解决方案上。(请参阅JonCorbet的关于如何参与Linux Kernel社区的指南 )
  • 向上游做贡献 - 这一点是指将您对开源项目所做的任何更改反馈给原始维护人员,以便更改能够被纳入之后发布的软件版本中。如果贵组织刚刚接触开放源代码,您可能需要花费一些时间教育您的员工关于向上游做贡献的重要性。在某些情况下,人们可能认为做一个快速而又随性的补丁来在您的基础架构中运作会更容易,而且这样做不用费心去清理它,也不用经过使之被上游项目接受的过程。

但是,从长远来看,比起让上游项目接受它所耗费的精力,速成补丁需要在每个升级周期中被测试、更新与重新应用几乎总是需要耗费更多的时间和精力。这种行为也可能在社区中被看作是自私的,因为别人也可能从您的修复中受益,所以它可能会损害贵组织在开源社区中的声誉。

贡献代码到上游的最佳实践

在您的组织内部:

  1. 基于正当理由而决定向上游贡献。
  2. 设计和执行代码时,要考虑到上游。
  3. 采取“上游优先”政策。先将补丁提交给上游,然后再在自己的下游产品中使用补丁。
  4. 保持您的开发人员一直参与到开源项目中,即使是软性参与。

面向项目外部:

  1. 确保您的贡献对他人是有用的。
  2. 遵循恰当的编码风格。
  3. 参与项目提交过程的工作。
  4. 提供关于您的贡献的文件与说明。
  5. 听取反馈并采取相应行动。
  6. 保持耐心并反复修改代码直至被接受。

对于组织来说,最具挑战性的事情之一就是学会如何在开源项目中获得影响力。仅仅因为您的组织很重要,并不意味着您可以期待在没有赢得开源社区的尊重的情况下就像重要人物一样被对待。影响力源于参与,而且一些贡献于开源项目的人在证明他们是可靠且负责任的后,最终将随着时间的推移赢得具有更大影响力和领导力的地位。

您还应该预计出现一些意见冲突,并准备好专业地去解决这些冲突。当有人不同意贡献的决策、方法或风格时,审查过程可能会变得非常激烈。确认反馈始终是聚焦在贡献上而不是变得个性化,同时保持冷静和专业是很重要的。请记住,您在开源项目的参与过程是公开的,且可能会永远留在互联网上,一次失控的激烈讨论,可能会以组织或个人的形式在往后又返回来困扰您。因为所有的这些参与过程都是非常公开的,所以为您的员工提供一些关于与难以相处的人打交道与解决冲突的培训可能是一个好方法。

如何制定您的开源贡献策略

拥有一个仔细斟酌且周到的开源贡献战略,不仅有助于在参与开源项目时为您的员工提供指导, 还可以帮助您向贵组织内的高级管理层说明开源项目的参与过程。开始时要看看组织的整体业务目标,以确定您的开源工作该如何适应贵组织的更广泛的战略,这是很重要的。(请参阅“TODO指南:制定开源策略”)通过明确地将您的开源贡献战略与组织的战略性工作挂钩,您可以向高级管理层展示为什么这项工作对组织至关重要,并帮助您的员工了解其贡献的影响。

“领导层的支持以及对开源是您战略的业务关键部分的认同都是非常重要的。您应该真正理解公司的目标以及如何在您的开源战略中实现这些目标。” Nithya Ruff – Comcast开源实践高级主任

一旦您确定了一些与业务目标一致的目标和策略,您就需要制定一个实施计划。以下这些问题将有助于您思考您的计划中可能需要解决的一些问题:

  • 为什么这些贡献很重要?您很容易直接进入就开始谈论您计划要做的所有大事,所以不要忘记先列出为什么这些工作对组织来说至关重要且具有战略意义的有力论据。
  • 我们在组织内使用哪些开源项目?花一些时间去评估目前已经在整个组织中使用的开源项目,以确定哪些开源项目对您的业务具有战略意义。您可能想要将您的评估聚焦在几个地方:关键业务基础架构(运营)、影响您产品发布能力的开发和部署工具,以及对于面向客户的产品或服务非常重要的软件。
  • 我们应该以什么项目作为贡献目标?大多数组织使用许多开源项目,因此确保您的贡献计划着力于那些最重要的项目是非常重要的。一个项目不在您的贡献目标清单上并不意味着人们不可以贡献于这个项目,这只是表示这个项目不是贵组织所重点关注的。如果一个开源项目对于您的业务至关重要,并且有可能导致严重的工作停止或中断您为客户提供服务的能力,那么这个开源项目很可能就是您进行开源贡献的一个良好的备选目标。
  • 我们已经做了哪些贡献?在某些情况下,您可能已经让人对开源项目进行了变更。他们可能正在创建内部使用的补丁,或者他们可能已经在将这些补丁贡献回上游项目以避免维护它们。在评估您的员工中是否已经有人可能具备开源贡献的技能和兴趣的同时,请花一些时间与您的内部团队交流以找出您可以作为发展基础的潜在贡献。
  • 我们是否已经拥有相关专业知识,或者我们是否需要聘用专业人员?正如本指南前文所述,寻找有能力做出贡献的人与有能力与社区工作并促使社区接受贡献的人是非常重要的。如果贵组织中已经有人为这些项目中的一部分项目做出了贡献,那么您可能可以利用现有的员工基础。如果没有,您应该考虑聘请已经为项目做出成功贡献的人。与任何计划一样,您需要确保您拥有成功所必需的资源和雇佣预算。
  • 我们需要哪些资金用于项目赞助资格/企业会员资格?查看您所选择的项目的管理模式,以确定是否有企业会员资格、项目赞助资格或项目负责基金会的选项。这些选项提供了资金来帮助项目取得成功,而且在某些情况下,这也可以帮助贵组织以顾问的角色更多地参与项目或提高贵组织对项目的影响力。大多数开源项目都会举办会议,而且除了直接为开源项目提供资金支持之外,您还应该考虑赞助项目会议,这可能是一个很好的宣传您工作的方式,同时也是与您可能想要招募的人才见面的好地方。
  • 我们应该如何提升我们的开源工作?对您的组织来说,营销或提升您的开源贡献可能会非常麻烦,这就是为什么在您的实施计划中包括如何营销或提升您的开源贡献,以确保每个人都知道您计划如何向公众介绍您的贡献是非常重要的。赞助项目会议或其他活动和在这些会议及活动上进行报告,可能是提升您正在进行的开源工作并招募贡献者的一个好方法。特别是不要忽略在您拥有员工的本地用户群体中的参与。赞助这些本地群体并让贡献者进行报告可能是招募热衷于特定开源项目的本地人员的好方法。
  • 我们需要什么样的贡献指南或流程?这些指南及流程应该更多的是关于帮助人们为开源项目做出成功贡献,而关于规章制度的内容则较少。如果人们有指南和清单的话,可能有助于确保他们拥有所需的一切条件,从而可以在没有发生许可或保密问题的情况下做出成功的贡献。尤其是对于新的贡献者来说,这也有助于他们在进行贡献之前有一个可获得的内部审查流程来作为获取反馈意见的安全之处。
  • 我们需要提供什么培训?针对开源贡献最佳实践案例的培训,以及一些关于开源社区参与的许可、管理、以及规范的一般性开源培训将会对人员有所帮助。有关冲突解决、和难以相处的人打交道以及其他人员技能的培训也有助于避免之后的问题。您的培训计划还应包括提供经验丰富的开源贡献者作为新贡献者的导师的项目,以此作为随着时间的推移扩大您的贡献工作的一种方式。
  • 我们将如何确定计划是否成功?每个计划都应该有成功标准和一个用于衡量您是否实现目标的计划。这应该直接来源于您的战略,以确保您正在追踪的是那些对贵组织而言最重要的活动,而不是那些最容易测量的活动。如果您需要测量和指标工具,开源GrimoireLab项目是一个很好的开始。(请参阅“TODO指南:评估开源计划的成功”)
  • 我们是否需要一个开源办公室来管理所有的开源工作?所有这些都需要思考,而且拥有一个开源项目办公室或负责实施开源计划的专职人员将会有所帮助。至少,您会希望有专人负责将流程和培训落实到位,提供许可证指导,回答高级管理层或贡献者提出的问题,以及将更新内容传达给整个组织。(请参阅“TODO指南:怎样创建开源计划办公室”)

精通开源贡献的11个技巧

如何在组织为开源贡献构建一个健康的环境:

  1. 建立政策和流程来指导开源贡献
  2. 成立一个团队来监督所有开源贡献的审批
  3. 将贡献集中在可以启用您的技术的领域
  4. 为贡献者提供所需的IT基础架构和工具
  5. 为您的员工提供最佳开源贡献案例的培训
  6. 追踪贡献,衡量影响,改进与沟通
  7. 建立导师项目以培训经验不足的开发人员
  8. 提供贡献指南,说明如何做、该做什么和不该做什么
  9. 为开发人员提供无障碍的开源法律支持
  10. 从您认为最有价值的开源社区中招募员工
  11. 始终遵循每个项目特有的社区流程/实施规范

结语

开源项目会留在这里,而且它们在大多数组织向客户提供产品和服务的能力方面发挥着关键作用。作为一个组织,如果您想要影响驱动您的业务取得成功的开源项目,您就需要参与其中。为贵组织制定可靠的贡献战略和实施计划,将助您走上通往成为一名优秀的企业开源公民之路。祝您好运!

鸣谢

贡献者:

  • Stormy Peters,Red Hat开源社区领导高级经理
  • Nithya Ruff,Comcast开源实践高级主任

这些资源是与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授权。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档