Linux基金会企业开源指南系列之九————公司如何提升开源开发的影响力

公司拥抱开源成功的秘诀是什么?本文抛开这些具体的做法,其实很好的体现了作为现代软件开发核心是什么。软件开发的核心是人,而如何激励人去积极的最大化发挥自己的才能,这是所有公司永恒思考的命题。

Thu Jan 3, 2019 | 10900 Words | 大约需要阅读 22 分钟 | |

特别声明

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

改进贵司的开源开发影响力

开源的开发方式对于绝大多数公司所习以为常的软件工程有着非常不一样的内容,当然也不要畏惧或排斥它,凡是尽力计划就好。不过值得庆幸的是,贵司并非是拓荒者,已经有很多的公司和个人通过战略性的方式已经成功的为重要的开源项目做出了贡献。本指南将会帮助读者你和贵司来改进内部的开发流程,并会帮助贵司准备好贡献到开源项目中,尤其是对于贵司业务很重要的开源项目。众所周知,能够贡献到 Linux 内核对于开源开发者来说是最具挑战性的事情之一,所以本指南就以贡献Linux社区为例说明,这件事本身就极具代表性。当然,本指南对于其它的开源项目也具有普适性。

什么是开源开发的影响力?

开发者的贡献作为贵司开源项目办公室实现业务目标(贵司开源战略的支撑)的主要方式,其实有多种影响开源项目方向的办法,从在不同的环境下测试代码、为代码添加文档注释,到资金赞助项目或基金会、参与项目委员会、甚至是在其它开源项目中引入现在的开源项目等等,但是归根结底,贵司在开源项目中的影响力来自代码贡献的质量、数量和一致性,才是发挥最大影响力的因素。因此,为贵司的团队提供高质量、高效的代码工具和流程,才是符合贵司最佳利益的方式。

拥有影响力的开源代码,是可以影响贵司所贡献的开源项目的技术方向的,而且能够以最少的代价来维护代码,同时还提高产品质量。

通过开源的贡献方式来改进贵司开发团队的效率是本指南的目标。通过帮助贵司开展本指南所推荐的开源开发最佳实践,贵司可以实现以下几项内容:

  • 减少产品团队的工作量
  • 最小化维护源代码和内部分支的开销
  • 改进代码质量
  • 加速开发周期
  • 开发更稳定的代码以作为产品的基础
  • 在关键的开源社区提高贵司的声誉

开源项目办公室在开源开发中所扮演的角色

贵司的开源项目办公室会对产品产生影响,无论它是直接的影响还是间接的左右,也无关具体的采用形式,即不管是公司内部的基础设施或服务,还是作为商业产品来提供。而且这些影响是可以度量的,如果有不足的情况,也会可以科学改进的,这些影响甚至还能够生成精确的报告,让你来向公司的领导层进行汇报 ———— 可以展现开源项目的价值以及所带来的投资回报率。

直接影响

开源项目办公室可以直接影响贵司的开源代码开发,即通过贡献代码本身。每家公司都会根据最适合其自身业务目标发展和最适合公司结构的方式构建开源项目和工程贡献(请参阅我们开源项目指南中的如何创建开源项目办公室)。但是贡献代码仍然是影响开源项目的最佳方式,也是在开源社区中赢得声誉的最佳方式。

就三星来说,开源项目办公室有其自身的工程团队,为了满足公司的研发部门和产品团队的开源开发需求而设。项目办公室也会帮助三星内部的代码贡献到各式各样的开源项目中,而且已经帮助三星将自身产品相关的驱动合并到上游代码中了,产品团队拥有自己的开发人员,并且他们为开源项目做出贡献,但由于他们与产品开发紧密相关,所以他们的自由度较低。所以当开源项目办公室收到诸如“我们需要在内核中实现某个功能”之类的需求之后,就会让工程团队去实现相应的功能,并提交到Linux内核上游。

“基于这些开源组件,我们在提交到上游代码的专业,让我们更加的有价值,而且这样做的最直接的结果就是三星产品和服务中使用到的内核代码的维护减少到了最低。” – Ibrahim Haddad,三星美国研究院研发副总裁兼开源小组负责人

但是大多数的开源项目办公室和三星的情况是不一样的,他们大多不会设立专门的工程团队来贡献代码,而是更加聚焦于政策和流程上的内容。这样的话,就要安排跨部门的工程师去合理的分配时间去关注开源组件的任何变更,以推进紧跟上游的代码。

其实工程团队的具体架构是无关要紧的,目标是为了最大限度的减少开源组件的技术负债。如果开发团队在自己的本地进行了开发,而没有推进到上游仓库中,那么产品团队将会陷入维护分支的巨大代码库中,而且这个分支会和上游渐行渐远,这样的话,他们会消耗掉大量的时间来打理这个分支的内容,会很难有精力来推进产品真正需要的部分。

这里需要特别提醒的一点就是,也是通常情况下有违直觉的,那就是一位深入参与到上游开源项目的开发者,是很难做到和公司所在的产品团队去进行一些所谓的上游工作、相应的责任(作为提交者和维护者而言)和产品的平衡的,几乎不可能有时间来处理运营相关的事情的。

每个开源项目办公室都会根据其业务需求进行独一无二的架构设计。例如,Facebook 在开源项目办公室内有一个专属的工具团队,负责开发内部工具以用来帮助其开源组合的管理工作。这个开源组合包括 Facebook 共享的项目,项目主要托管在GitHub上,除此之外还包括其做出贡献的其他外部项目,如Linux Kernel。(请参考案例分享之 Facebook 的开源历程。)

间接左右

开源项目办公室的影响力,可不止于组织开发者去为开源项目贡献代码,在很多地方都可以发挥力量,从公共关系、市场营销,到法律支持、开发者培训等等,开源项目办公室可以以多种方式来实现。这里仅列出四中以非代码贡献的方式来间接推动开发:

  1. 外部的技术讨论 通过参与到技术讨论中是在各式各样的社区中增加影响力的其中一个主要方式,贵司的开源开发人员会通过积极参与邮件列表和IRC聊天来参与讨论,并可以随时了解最新的项目更新。而在有正式管理结构的大型项目中,也可以通过参加技术指导委员会做出贡献。

  2. 内部技术讨论 在内部,开源开发人员可以参与政策和架构讨论,以确保组织的决策与特定项目社区的方向方向相匹配。例如,开源开发人员应该参与到关于对依赖开源代码的产品的长期规划的所有战略讨论中。

  3. 合规性支持 开源项目办公室经理还可以提供帮助来解决常规性问题,并用其收到的开源常规性的问询来支持合规团队。

  4. 缺陷修复 另外,也可以通过保持稳定的代码参与到开源项目中,测试软件并提交、修复缺陷、并提交到上游,这样可以提高代码对所有项目用户(包括贵公司)的整体价值。

改进的常见领域

改进开源项目中开发者的生产力和效率,开源办公室能够努力的地方有这么三块:文化、流程和工具。其中在每个具体的领域又有相应的细则需要来处理,从而满足不同的开源模式。

开源团队在企业环境中所面临的特殊挑战

文化

文化上的挑战是大家不得不面对的一个事实,它的根源在于传统软件开发实践和开源开发的需求之间巨大的落差,落差可以通过雇佣开源的专家,或者是找那些熟悉开源开发模式的人为贵司进行培训来进行弥补。

“我们的目标是为开源工程师提供足够的时间来履行对上游的责任,以让他们能够成长,进而让三星拥有充足的开源领导力。” – Ibrahim Haddad,三星美国研究院研发副总裁兼开源小组负责人

流程

开源的开发是动态的、而且进展非常的迅速,对于合规性来说有着特殊的需求。公司如果依然使用原有的一套流程是无法满足这样的开发形式的,只能让自己更落伍。开发者需要被积极的鼓励去快速的为上游代码做贡献,所以公司内部的代码政策都得围绕这个原则来进行相应的修改。

首先,让团队负责维护正确的开源合规性以避免法律问题的行为是至关重要的。(请参考Linux基金会发布的免费电子书:企业内部的开源合规性.)

你可能针对开源的使用和贡献建立一个简单的内部审批流程,经年累月,三星已经从高度复杂和繁琐的政策转向了更简单的接收、审核和批准源代码贡献的方法,这是一个能够平衡所有相关方(法律、工程和开源)的决策。三星目前采用较为折衷的办法来为专门的开放源代码的团队提供支持,该方法能够一次性批准并且为多个开源项目做出贡献。但对于那些根据所贡献代码的不同性质而需要获得不同级别审批的其他团队来说,情况并非如此简单(例如,简单的漏洞修复,改进现有功能的代码,提供新功能的代码或启动新项目的代码)。

工具

作为开源项目办公室,还需要确保从一开始团队所使用的工具是和开源开放模式配合默契的。创建一些步骤,不仅能够满足开源项目办公室需求,而且同时也符合企业的IT指南。

再以三星为例,三星公司发布的Linux设备可以确保与其工程师在参与开源开发过程中所需的所有工具配合使用。这种环境允许开发人员不需要对其工作方式进行大幅度改变就可以加入开发团队。他们还支持在家办公,实际上在硅谷只有极少数开源开发人员会在办公室工作——其他所有员工都在世界各地远程办公。

最受推荐的实践

让我们先来回顾一段历史。2000 年的12月对于开源的历史是至关重要的月份,因为 IBM 公开承诺将在Linux 研发上投入10亿美元,就这件事来说,IBM 是真正的开拓者,因为那时的企业界还没有人将赌注压在 Linux 和开源上,而 IBM 真的做了,更何况 IBM 体量这么大的公司。当然,IBM 在参与的过程中,就开源软件和各式各样的项目社区,付出了不少的学习成本,以历史后来者的角度来看,这些都是非常值得的。

IBM 为后来者趟出了一条道路,从此开启了企业进入开源的大门,后来有几十家公司加入开源阵营,随后是几百家,到今天,已经有成千家公司在开源领域,因为今天开源的开发模式已经是软件的新常态了。那么问题来了: 企业该如何才能最小化学习的曲线?如何迅速获得正确的”开源之道”?

其实答案很简单,但是具体实践起来,尤其是针对特殊的企业文化,却是个巨大的难题。接下来就让我们来探索拥有在开源软件方面18年+的企业的丰富经验,从中挑选出来“简单”的方面,从而让读者能够腾出时间来思考,应对特定企业环境的难题方面。

郑重提示: 除了以下所列出的具体实践之外,开源项目办公室要担当起引领开发者从传统的软件开发实践到更加开放的、倡导协作的文化转型。公司内部需要动态的支持开源相关工作的开展,作为贵司内部的开源领导者,你将面临诸多的挑战:获得资金上的资源、判断投资回报率、聚焦上游等等,这些对于思维模式的转变提出很大的要求,而且要在整个生态链上学习更多内容。

1) 从项目社区雇佣关键的开发者和维护者

培养内部开源专家需要相当长的时间,雇佣关键的开发者是非常重要的一步,它可以让贵司快速的获得相应的技能和识别能力。

两到三个关键开发人员将会是一个良好的开端,他们能在诸如Linux Kernel这样的大型项目中产生明显的影响,吸引更多可雇佣的人员,并能够给予足够的资源来指导现有的初级开发人员。(请参考企业开源指南系列之正确的招聘开源人才。)

我们的目标是找到那些拥有足够的同行认可度,并且在社区中具有影响力的关键开发人员。对这些人而言,要达到这种高度,通常有三大核心要素:领域内的专业知识,开源方法论和开源实践经验。

当然,还有更为重要的一点,要兼顾公司的重点关注和个人的兴趣方向:当特定项目中高级开源开发人员的个人兴趣与公司重点关注的不一致时,那么激励这些开发者工作的热情会是非常具有挑战性的事情。例如,一个 Linux 内存管理方面的专家可能对公司优先考虑的文件系统的工作并不感兴趣,因此,寻找兴趣匹配的关键开发人员对于维系好长期的关系显得至关重要。

2) 为上游的贡献分配足够的时间

雇佣开源开发者的核心原则是让他们支撑贵司的开源开发且让他们积极的活跃在上游项目,或许你还希望他们能够在他们的专业领域内能够尽力支持产品团队。然而,事实的情况是,你不能指望他们花过多的时间尽可能多地从事到产品开发工作中,因为上游的工作已经足够的复杂和充满挑战性,他们可能无暇兼顾,那么可能的结果就是,你花了很长时间找到的开发者,会选择离开贵司。这事一旦发生,贵司的规划可能就要延误实施,损失颇大。

因此,将上游工作和产品工作区分开来,不仅是建立起这个事,还要好好的维护它,这是非常重要的事情。换句话说,建议您为开源开发人员提供有保证的时间来满足他们的上游愿望和责任,尤其是当他们是维护人员时。对于在产品组成部分中使用开放源代码的初级开发人员或其他内部开发人员来说,与上游社区的这种互动将增强他们的在语言、沟通和技术上的能力。在没有这种为上游服务的时间保证的情况下,这些开发人员很容易被吸收并成为产品团队的延伸,导致他们在上游的焦点变得越来越倾向于产品开发方面。

开源项目办公室同样要成为产品团队的上游好伙伴,产品团队常常觉得自己处于高压环境下,特别是在电子产品的消费环境中。产品团队会经常人手不足,缺乏支持同产品并行的上游开发的意识,并且不断面临着在紧张的时间内交付最终产品的压力。在这样的情形下,很容易为了在短期内节省时间而忽略了上游工作的益处,非常糟糕的情况是,在这点上,很多公司或团队都会犯错,因为这么做的话会导致长期的技术债务,这样会产生较高成本。开源项目办公室在这点上帮助产品团队,责无旁贷,必须能够以上游的角度出发来说服产品团队,从而减少这种技术债务的损失。

要去鼓励开源团队之外的开发者去学习并贡献到开源社区,(嗯,要经常布道。–开源之道注)开源项目办公室尽其所能的帮助大家去到上游做贡献,但是资源通常都是有限的,更何况对于公司的产品缺乏深入的理解,然而,这些产品需要清晰确认其中的哪些代码是可以向上游提交的。所以,要和开源团队之外的同事进行友好的协作,通过鼓励他们参与到开源社区,可以让公司在上游获得更多重要的代码,并提高与社区互动的能力。

3) 建立导师制度

和贵司产品相关的特定技术领域的开源人才需求正在变得紧俏,其中有一种办法就是从公司外部来直接雇佣,但是这样的话有一些限制。

那么一个替代的办法就是现有的开发者转化为开源的贡献者,通过在技术领域的培训以及讲授一些开源的方法论。如果这些开发者有相应的导师带领的话,那么提高技能水平就会更加的高效。

所以要建立导师制度,让那些经验丰富、资深的开源开发者为新上手的、缺少经验的开发者提供指导。通常,导师项目时间将持续3至6个月,在此期间,导师应监督追踪受指导者的工作,给他们分配任务并确保结果的正确性。导师还会为受指导者创作的所有内容进行代码审核,并在受指导者将代码提交给上游项目之前提供评价。

建立导师制度的目标是让公司更多的开发者参与到贡献上游项目的代码提交中,并通过提高改善代码质量和提高上游项目接受的代码百分比来提高个人效率。一般而言,分配给一个指定导师的初级开发者不应超过4-5 名,理想情况下,他们应该与导师在同一领域工作,这样的话,代码的审核会更有效率。

4) 将开源的职业规划路径正规化

要在贵司的人力资源(HR)系统中创建关于开源开发者的追溯,从而让已经被聘用为开源开发者的员工能够很好地了解到,对比其他非开源开发人员,他们的职业生涯在公司内部将如何发展。此外,还应该将与开源开发工作相关的目标成果纳入绩效奖励考核中。衡量专业或封闭式源代码开发人员绩效的指标通常与开源开发人员的不同。

在一些公司中,开源开发者和非开源开发者是明显区别对待的,但是在很多公司,并没有那么的夸张,对这两类开发者做出明显的区分。因为公司之间的组织架构和开源战略等都是不一样的。其实,在现实中,你已经很难找到一名完全闭源的开发者了,在开源开发占主流的时代,他们的个人技术栈或多或少都有开源相关的痕迹。不同的是,他们的代码有时会留在公司内部,有时会被发布(贡献给第三方, 或作为一个新项目发布)。贵司的 HR 系统在跟踪和奖励层面上要能够做到反映出贵司独特的架构和开源策略。

最后,无论一般的公司与办公方式相关的政策如何制定,请贵司允许开源开发者在家办公。尤其是最近,我们看到很多公司的在家办公政策发生彻底的改变,其中有许多公司禁止在家办公或者给在家办公的开源开发人员设置了诸多严格的限制要求,这么做的结果就是让开源开发者远离他们。但在开源世界中,在家办公的政策几乎是默认的,因为开源专家遍布全球,所以这么做往往是唯一能够聘请他们的途径。

灵活的办公方式其实对于公司的运营也是好处多多。据斯坦福大学公布的一项研究称,提供远程办公可以减少员工的流失率,并且“员工流失率的下降超过了50%”。由一家领先的软件服务供应商PGI提供的一项研究同样表明,80%的员工在家办公时更加士气高涨,69%的员工缺勤率更低。

5) 提供培训

没有任何一家公司能够在特定的领域将全部的资深的、最专业的开发者招致麾下。这句话不仅适用于Linux内核这样的开源项目,也适用于其它的知名的开源项目。因此,必须采用某种方法提高贵公司的开发人员在特定技术领域的竞争力。除了技术培训外,您还需要通过培训来教授给他们开源开发模型和传达开源法律合规的基本概念。

常见的培训课程包括:

  • 涵盖LinuxKernel中各个领域的技术培训。维护人员或高级开发人员通常会介绍这些内容以增强内部的Kernel专业知识能力;鉴于聘请专业的Kernel开发人员的难度,这种专业知识的教授至关重要。
  • 开展开源开发方法论的课程,要为新手传授关于开放源代码和Linux内核开发如何运作,以及他们应该如何最好地参与其中的内容讨论。
  • 开展源代码合规性课程,教授给员工合规性原则和开源许可的基础知识。同时也应该传达给他们贵公司的政策和流程的具体内容。(Linux基金会为开发人员提供免费的在线开源合规培训。课程可在这里找到

6) 参与开源相关的活动

须以公司层面支持开发者们去参加一些开源的研讨会或活动,如本地社区的 Meetup、黑客松、技术峰会等。诸如此类的活动,可以帮助开发者们建立个人层面上的点对点的联系、构建关系网、面对面的社交互动,而且可以紧跟项目的发展方向。

如果说贵司的开发者所做的工作对于其他人是有兴趣可言的,那么请积极的帮助他们做相应的演示工作。

最后,贵司应该赞助一些大大小小的开源活动,因为可以增加贵司在项目所在社区的曝光率,更何况在这些活动是寻找相应人才的绝佳之处。

7) 提供灵活的 IT 基础设施

提供灵活的 IT 基础设施可以让开源开发者们进行无障碍的沟通、在诸如Linux内核社区之类的开源项目中不会遇到任何的交流阻碍。此外,建立与外部使用的工具相匹配的内部IT基础架构,以帮助实现缩小内部团队与Kernel社区或其他开源项目社区之间的差距的目标。贵司大部分基础架构都会随着开源的发展而自然发展,但重要的是要意识到基础架构实施的必要性和计划。

在开源开发中有三大主流的 IT 服务:知识共享(维基、协作编辑平台、以及公共的网站)、沟通和问题解决(邮件列表、论坛、以及及时聊天)、代码开发和分发(代码仓库、缺陷追踪)。这些部分或全部工具需要能够在内部提供以便可以充分地支持开源开发。这有可能与现有的全公司的IT策略相冲突,假如发生了这样的情况,如何解决这些冲突就显得至关重要,并且要允许开源开发人员使用他们熟悉的工具工作。

说实话,本指南所谈到的开源实践是建立在一个没有众多标准和IT政策限制的IT基础架构。

“在三星,为了支持开源的开发,花了很多年进行持久的讨论、妥协才突破传统IT的限制,总算是满足了目前的需求,这些宝贵的经验同样也适用于贵司。” – Ibrahim Haddad,三星美国研究院研发副总裁兼开源小组负责人

8) 跟踪开发者的代码贡献

要创建一个内部的系统,用来持续的跟踪开发者们的贡献和影响。贡献通常包括上游的开发、支持产品团队、知识传授(导师、培训)、曝光度(公关、演讲)、发起新的开源项目、以及和其它管对或小组建立内部的协作项目。

还是有许多的工具可以帮助跟踪源代码贡献的,举例来说,Linux基金会使用的工具叫做 gitdm,它也是Linux基金会生成Linux内核年度报告的生成工具。该工具可以用户跟踪独立开发者和团队整体的表现。独立开发者被跟踪的内容有他们提交的补丁数量、补丁被接受的几率(补丁提交需要通过被接受和被拒绝来进行区分)、补丁的类型(比如是新的功能、还是原有功能的改进、缺陷修复、文档注释等等。)。

其它的工具如GrimoireLab 可以以图表和可视化的内容呈现所衡量的内容,更多详细细节请继续阅读下一章的专门关于衡量的内容。

9) 识别有广泛影响的重点领域

向那些多个业务单元或多个产品获益的领域多做贡献,并聚焦这些领域。这样的话有助于开源项目办公室跨部门的提供价值和展现投资回报率,乃至增加获得更多资金和支持的几率。

将贵司的贡献聚焦于能够为公司战略和产品直接受益的上游项目。在开源开发当中,特别容易流连忘返于那些林林总总有趣的项目之间。但是企业界有着完全不同的环境,开源被视为成本中心,开源项目办公室必须全力以赴聚焦于那些能够支持产品开发的开源项目上。

还是以三星为例,三星每年对其产品组合进行一次审查,努力关注参与到能够被尽可能多的产品所共同使用的开源项目中,然后会根据几个因素把这些项目按照优先顺序列成清单,并将精力集中在最重要的项目上。用一个方法论来推动您的优先事项是坚持重要、合理和可靠的重要方式。

10) 促进内部协作

和同样在他们的产品中使用到同样的开源项目的另外的业务部门协作。这些具体的协作事项包含方方面面:

  • 为开发者提供相应的培训
  • 针对特定的问题或事项开展 WorkShop
  • 开发新的功能
  • 排查和解决 issue 和漏洞
  • 上游化他们没有资源实现的现有的代码
  • 帮助他们脱离旧的分支并回到主线版本中
  • 还有更多

协作的目标是为了帮助产品团队理解他们的需求,并通过采用开源来满足他们产品的目标。

贵司务必在跨不同部门之间分享信息和优先级,为了形象的表达这个观点,我们举个相反的例子,你可以想象一下自己处于一个开源团队中,有人希望你实现一款设备的驱动程序,然而却不提供相应的硬件手册和说明书,这就犹如在黑暗中玩飞镖游戏。虽然这只是个比喻,但是和共享信息的道理是一致的。请记住,信息的共享是开源团队和其他人进行内部协作成功与否的关键所在。

三星的开源

三星的开源小组(OSG)成立于2013年2月,旨在两个重要目标:第一,通过帮助公司其他部门了解如何参与开源开发项目并从中受益,从而在三星内部提供开源领导力。第二,以代表三星的身份参与到各式各样的开源社区中。团队的任务是通过积极为开源贡献力量来专注提高关键的开源项目数量和技术能力,以及积极参与到各种开源组织和基金会中。

衡量过程

一旦开始实现上述的开源最佳实践,那么就需要设立合适的开源相关指标来驱动事情朝着我们所想的方向发展,其中包括开发的方方面面。当然,现实中常见的情况是,企业已经拥有一套指标,即传统上用于产品组织的,这并不能适用于开源开发的相关方面。所以需要做一些事情。

举例来讲,跟踪代码的变更数量和代码行数对于开源开发影响力是不错的指标,但是如果说由于贵司的开发者获得了社区的支持,在新版本中多个功能实现均被上游接受,这样的话,代码的变更数量和代码行数就显得没有那么的重要了,所以事情要观察的更为全面,不要去做一刀切的事情。

时间度量下的提交数和代码行数

最基本的追踪目标之一,就是在特定时间段内(例如每周,每月或每年)变化的代码提交数量和代码行数。

每个项目的每周总得提交和代码变化度量是个不错的开始

透过这些数据,开源项目办公室可以从来自各个内部团队进行贡献比较,从而可以确定源代码贡献的来源,进而确保资源的合理分配。

在这部分可以创建图表来比较各个内部团队的累积贡献、总贡献的百分比以及向上游提交代码所花费的时间(下面的图表供参考)。

示意图2: 可以通过跟踪随时间变化的累积贡献,来比较内部团队,并确定那些正在增加在特定开源社区中活动参与的团队(本图展示的是Linux 内核的相关指标)

示意图 3: 展现公司的贡献中各部分占总数的百分比随时间变化的变化,可让确认贡献代码最多的团队

示意图4: 向上游提交代码所花费的时间数据对于跟踪开发效率而言很有价值。该图表展示了各个团队向上游贡献代码的频率,并将其与整个社区进行比较。

开源项目办公室还可以基于这些指标来比较贵司和参与到内核生态的其它公司的具体表现(如示意图 5),如此的竞争分析有助于了解项目整体开发者生态。

示意图 5: 从公司的角度来进行累积贡献比较,进而了解项目的整体生态。

这些指标所提供的可以很好的帮助贵司了解自身的强项和弱点,进而对整体的开发策略做出决定。跟踪和竞争对手相关的贵司的贡献是很有意义的一件事。举例来说,这些信息可以帮助公司在市场中认清自身的产品在竞争对手的位置,这本身就体现了价值所在。

示意图 6: 项目也可以发布独立的贡献数据,比如,可以通过Linux基金会发布的内核开发报告和LWN的信息来跟踪Linux内核的贡献者。

再以三星为例,Linux内核对于三星来说具有重要的战略意义,所以三星从众多的项目中筛选并聚焦于Linux内核项目的开发。通过代码的变更指标,我们可以看到三星在贡献者排名中长期以来都在前5名之内。当然,三星也逐步的在其它的开源项目上发力,只要是和自身产品相关的,均取得了不错的进展。

作为最重要的贡献者本身并不是目标,但是能够成为积极的贡献者本身就是被社区接受的表征。正如常言道:贵司要么以开源影响者的身份参与进来,要么只是徒有虚表的出现在名单上。

“不幸的情况是,如果你出现在了名单上,那么就要为维护上万行的主干之外而难以合并到上游的代码而哭泣!这绝对不是我们想要看到的情形。” – Ibrahim Haddad,三星美国研究院研发副总裁兼开源小组负责人

写在最后

高效的开源开发并不是天上掉下来的,它需要去努力的赢取,方可能获得。当然这些都可以通过长期的、规律的、持续的参与和贡献来实现。

通过参考这些在开源中披荆斩棘的拓荒者们总结的最佳实践,贵司可以快速的在内部开源开发上手进入轨道,进而利用这些知识改进贵司的产品和服务,同时降低代码的维护成本。

Happy hacking!

参考

致谢

本指南由Ibrahim Haddad (Ph.D.)牵头,大家一起协作的结果。Ibrahim Haddad 博士是三星北美研发副总裁、开源小组的负责人。我们要对Ben Lloyd Pearson(三星开源小组的运营和策略官)表示诚挚的谢意,他一直以来的支持、审核、以及编辑(开源模式),塑造了这篇文章并帮助它直到完成。另外要感谢 Gil Yehuda(Oath 的开源负责人),感谢他的审核和反馈。

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