Linux基金会企业开源指南系列之五 —— 公司如何以利益最大化的姿态参与开源社区(上)...

640?wx_fmt=jpeg

640?wx_fmt=png

翻译:开源之道 | 编辑:Corrie

640?wx_fmt=png


特别声明

本文拥有创作共用授权之相同方式共享授权4.0版国际许可协议(Creative Commons Attribution ShareAlike 4.0 International License)授权许可。 开源之道独立精心翻译分享,欢迎同道中人商讨。

 

01

参与到开源社区



源已经是构建软件的事实上的方式,这不仅体现在 IT 技术本身,而且跨多个行业。那么企业一旦使用开源代码来构建他们自身的商业产品和服务,那么就应该考虑参与到项目中去,而且要提高到战略的高度


那么问题来了,如果没有正确的理解项目、社区,以及开源项目是如何运转的,就开始参与开源,就可能会带来不好的影响,不仅是贵公司,甚至也会波及到社区。就开源而言,一家公司若是没有将之列为战略上的考虑,就冒然的去进军开源,可能会犯错,进而影响公司在开源社区的声誉,甚至会招来法律上的风险。

本指南涵盖了作为一个组织去贡献开源,以及如何成为一个好的企业员工并且会说明一些其它开源相关知识,如开源项目的组织结构、如何做贡献、为什么说内部的开发者参与开源是有益的、以及为什么说开源的参与和管理提高到战略高度是非常重要的事情。


02


为什么要贡献开源



如今已经几乎不可能找到没有从开源软件受益的公司或组织了。有些公司如Intel 、IBM 、三星等,均是设立了专门的开源项目部门去专门贡献开源社区的,而还有的公司之所以成为了开源的用户,完全是因为他们的系统管理员或开发者在工作中出乎意料的引进的。

很多公司都在商业上依赖开源软件,而且还获得了很大的成功,所以他们也懂得和明白为开源软件项目做贡献。我们来看一组数据,从2005年,截止到现在,单单 Linux 内核一个项目,就有来自1300个不同的企业的13500位开发者参与了贡献。

“对于很多大型项目来说,红帽知道我们大多数的贡献者均是来自实际使用开源项目的其它公司的人们,如Ceph、Gluster等。红帽有自己的客户,而且这些客户也经常会贡献项目,因为他们在使用这些项目。红帽认为无论是个人参与还是公司参与,都是值得诉说的成功。”

——Stormy Peters  ,  Red Hat 开源社区领导者高级经理

640?wx_fmt=jpeg

或许有一部分的企业的贡献仅仅是为了回馈社区,但是仍然有很大一部分企业有更为充足的理由去贡献开源项目的,因为内部使用了相应的项目贡献会获益更多。这里列出几个贡献上游的益处:

吸引人才

当贵司依赖开源软件,那么寻找人才最好的地方莫过于熟悉项目内部本身,而且还是项目社区成员。通过在社区的公开的工作,贵司可以吸引到一些既是做自己喜欢的工作,还能获得一定报酬的人。尤其重要的一点,贵司现有的项目参与的员工,每天都会和他们在一起打交道,自然是非常熟悉的,找到他们也很容易。(更多详情,请参考招聘开发人员指南系列)

降低维护成本

如果一个企业开始在本地的分支做缺陷修复、增加新的功能,然而却没有将这些代码提交到上游的开源项目中,那么很快维护本地的分支,将成为该公司的一个成本噩梦。将上游作为优先的提交缺陷修复和增加新功能是最为明智的做法,因为这样的维护成本最低。

项目影响力

在一个开源的项目中,新的特性或功能来自社区的贡献,那么这些贡献就会影响到项目的走向,如果你认为为项目所贡献的新功能对于贵司非常的重要,那么你应该去安排积极的贡献者对这些功能进行开发和实现。通过贵司的贡献,自然而然就可以影响到项目的走向(只要你的变更符合项目本身的目标)。


当然,参与社区是需要适当的方式方法的,若是方式不当的话,那么就可能出现不可预料的问题,即使真正的做了贡献。每个开源项目在具体的规范、期望和流程上都有一些细微的差别,所以贵司在参与一个项目之前,首先要做的就是去了解这些项目。这点可以有多种方式来完成,如先安排员工加入社区并花时间和精力去实地的考察,又或者是直接在该社区招聘已经有了贡献记录的参与者,进而了解项目本身。


03

开源项目是如何被管理的?

如果你是第一次接触开源项目的话,可能看起来它们混乱不堪。对于开源完全不了解的人来说,一群来自世界各地的”乌合之众”,将那些不知道是什么的代码“扔”在一起,竟然能够开发出让数百万人使用的稳定产品。但是,当他进入到开源的世界,了解了一阵子之后,会发现,开源软件的开发和维护工作也是有理可循的。其实几乎每个开源项目都有良好的组织架构,而且优秀的项目往往会在其项目主页或文档中清晰的将组织架构和社区治理方式描述出来。( GitHub 的开源指南有针对贡献者提供的良好的项目分析)。


虽然说各个项目的治理模式有着千差万别,但是综述起来,它们还是有一些共同点的:

领导者

一个项目,必须要有人承担起决策的事情,如特性、发布、以及日常活动。最为极端的情况,某些开源项目就仅仅是一个人,比如 Linus Torvalds,作为内核的创始人,对于Linux Kernel相关的任何事务都拥有最终话语权。然而在另外的一些项目中,可能有一个或多个委员会负责项目的各个方面,如 Node.js 项目采用的是核心技术委员会机制(the Core Technical Committee)。

维护者

大多数开源项目的领导者(上一条)会将一些决策委托给负责维护项目特定部分的开发者,而在大型项目中,这些维护人员还可能将其中部分工作委托给其他负责人员。例如,Linus Torvalds 将 Linux Kernel 文件系统的相关决策权就委托给 Jonathan Corbet 。


提交者

有一些开源项目还会设置一组可以直接提交代码到主干的人,他们已经证明了自己可以胜任工作并且靠谱,而且往往并不是先去提交给维护者去进行审核。当然,作为提交者,仍然对于代码没有最终的决定权,维护者或项目的领导者如果发现了什么,还是可以将提交的内容打回去的。

贡献者

有很多人为开源项目贡献代码、文档、以及其它事项,这些贡献通常都需要更为有经验的提交者或维护者进行审核之后方能合并的。这也就意味着贡献者的决定权范围更小一些。

使用者

其实从某种程度上讲,开源项目的实际使用者才是对项目的成长和开发是最为重要的,这些使用者或者称用户的人们,为项目提供了终极目标,并且帮助项目持续的进化,他们作为社区成员最具价值的部分莫过于针对功能提供反馈、报告缺陷、并建议些什么。


社区对于开源项目来说,犹如古人说的:“水能载舟亦能覆舟”,社区对于开源项目的成功至关重要,但是若是做的不好的话,它同样可以让一个项目置于死地。所以,要努力的去建设一个强大的、充满活力的且多样化的开源社区,这是项目的成功充分必要条件。以上列出的这些角色也是属于社区的一个部分而已,这里未列出的其它重要角色还有文档、营销人员、技术支持等等。


04


贡献是怎么进行的


贡献的流程要视具体的项目而定,可谓是五花八门,缤纷世界。这里仅列举其中一些较为典型的例子:

一般项目会针对代码风格、语言、格式、bug/ticket 号、发布时间等等信息给出相应的向导和指南。

有些项目会让贡献者签署一个协议,而有些项目会要求署名,也有其它各式各样的。还有一些较为古老的项目是使用邮件列表来提交补丁的,当然现在很多项目都使用 GitHub 的 PR 了。


以上只是列举出来不同的贡献风格的其中一小部分内容,所以作为贡献者的你,想要明白具体项目的具体规则,还是去读一读实际的文档吧。很多项目均在代码仓库的主目录下包含了 CONTRIBUTING 这个文档,也有的是直接写到了 README 文件中的,有的或许需要你去深入文档或者是网站介绍社区的部分才能发现具体的规则。这样也好,让你去阅读一下整个项目的文档,如社区指南、行为准则等等,这样能够确保你更加完整的理解特定的项目


如果你是头一次为开源项目作贡献,你或许应该考虑寻找一位导师,或者更有经验的项目成员,他们可以审核你的工作,并为你提供一些反馈,尤其是在准备阶段。


当在文档中详细说明了提交贡献的流程之后,那么接下来要做的事情,就是倾听反馈的声音,并要做到响应及时。常见的反馈包括一些诸如某些事项是如何运行的、为何选择此类方式等等问题,还有就是一些改进的建议或变更请求。有的时候,人们会问一些刁钻的问题,可能回答起来比较的棘手,不过没有关系,凡是要往好处想,这些人之所以提交这些反馈,是因为他们是很在意这个开源项目的,你真实而坦率的回答即可。要避免采取不理睬的姿态处理。


当人们提交了代码之后,在正式被采纳并合并到主干,是需要经历一番波折的,甚至会有被拒绝。这都是常见的合理的现象,维护者一般均会给出合理的解释,假如被拒绝了,没有关系,及时的进行沟通,要去虚心的了解自己的被拒绝的真实原因,通过进一步的修正,争取下一次被采纳。


这里仍然要提醒的是,请记住,如果你的共享被采纳了,后续的维护工作还需要你来做。这对于相对比较大的贡献,如新的功能特性或者是独立的代码模块显得尤为重要,拿Linux内核来说吧,比如提交的是一个特定的硬件的驱动程序。当然,如果相对较小的贡献,如修复一个字符串的拼写错误之类的,就没有必要进行长期的维护。

05


企业参与贡献意味着什么



多年以来,关于开源项目、使用或参与贡献该项目的公司之间的关系并非是那么的明朗。这其中一大原因就是,公司通常建立业务关系的方式并不适合于开源项目,所以,一些公司对于如何富有成效的为开源做贡献是很犯难的。


还有另外一个大的挑战就是,当公司自身的需求和开源项目的需求并不一致的时候,企业会做出利己的决定,或者是认为是烫手的山芋而置之不理。那么这样就会导致开源合区对该公司背后的动机产生怀疑。过去大量的实践验证,确实有很多的案例说明一些公司曾经尝试做出和开源项目目标不一致的地方,而且在其中某些项目中,还确实发生了社区对公司严重的信任危机。


然后,历史的结果证明,还是有很多个成功的案例的。其中之一就是大名鼎鼎的 Linux 内核项目,在此项目中,各家公司以卓有成效的方式进行着积极的贡献。所谓的公司为开源项目做贡献,最为常见也是最为简单的方式就是让自己的员工花大部分甚至的全职的时间到开源项目中,而且公司为这些员工提供薪酬。当然,为了让这样的方式行之有效,这些属于公司的员工需要了解开源项目的贡献流程和行为准则,从而提高他们的贡献被采纳的几率。


如果贵司是刚刚开始接触开源项目,或者干脆是刚接触开源,那么应该考虑招聘一些拥有相关经验的,而且在贵司想要参与的项目中拥有一定知名度的人,如果能够幸运的招聘到他们,那么就会大大加快贵司参与项目的速度。不要有什么顾虑,那些社区的工作者可能非常愿意作为导师来帮助你的员工,因为他们也希望自己的职业生涯更为的顺畅。(更多招聘内容,请参考招募开源开发者一章。)


640?wx_fmt=png


上图为CNCF旗下的种子项目Kubernetes 参与的多样化的公司/组织分布饼图


当然,以上所谈并不是唯一的企业参与开源的方式,还有很多种方式可以参与,而且还要根据具体不同的项目而做出调整。开源项目及其相应的基金会所需要的一些资源,是企业可以提供的,如基础设施、基金、市场营销、法律服务等等。还有的一些开源项目让公司以提供资金和人员的方式来参与,作为回报,公司可以获得项目中一些顾问的角色,或者是提升企业的曝光率。


这里举一个例子,Node.js 基金会的董事会成员就是由企业成员代表、技术指导委员会代表、以及个体成员选出的代表组成。其中包括哪些仅仅通过赞助金额的公司成员,他们赞助的金额在5000美金到250000美金不等。虽然每个项目的赞助资格或会员资格的获取方式不同,但是为开源项目提供资金有助于开源项目支付其日常的开支,为项目的成功添砖加瓦



640?wx_fmt=jpeg

640?wx_fmt=png

贡献者 / Contributor

Stormy Peters - Red Hat 开源社区领导者高级经理                                                   

640?wx_fmt=png

贡献者 / Contributor

Nithya Ruff - Comcast 开源实践高级经理                                                                


这些资源是与 TODO (公开对话,开放式开发)小组 – Linux基金会的专业开源程序网络小组合作创建的。 特别感谢那些贡献自己的时间和知识来制作这些综合指南的开源项目经理。 参与的公司包括Autodesk,Comcast,Dropbox,Facebook,Google,Intel,Microsoft,Netflix,Oath(Yahoo + AOL),Red Hat,Salesforce和Samsung。 要了解更多信息,请访问 todogroup.org。我们邀请您在GitHub上下载、传播,如果可以请积极的参与这些指南。

640?wx_fmt=png

精彩推荐

Linux 基金会企业开源指南系列之四 - 度量开源项目的成功要素(上)

 Linux基金会企业开源指南系列之四 - 度量开源项目的成功要素(下)

Linux基金会企业开源指南系列之三--一份让你彻底理解开源的读书列表

Linux基金会企业开源指南系列之二 -- 开始创建开源项目(上) 

 Linux基金会企业开源指南系列之二 -- 开始创建开源项目(中)

 Linux基金会企业开源指南系列之二 -- 开始创建开源项目(下)

 Linux基金会企业开源指南系列之一——公司如何创建开源项目办公室(上)

Linux基金会企业开源指南系列之一——公司如何创建开源项目办公室(下)


640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值