ALC Beijing 博客

ALC Beijing 博客

介绍 Apache 之道,推广开源项目,传播开源精神,让更多的本土开发者近距离了解 ASF 以及开源文化!

16 Apr 2020

为何Apache软件基金会能孵化出如此多成功的开源项目

ASF基金会的项目来源分为个人捐献项目和公司捐献项目。这两者在进入Apache基金会之后,并不做过多的区分。总体而言,虽然很多传奇的开源项目有个人英雄主义色彩,但也不乏有很多公司捐献的项目获得了巨大的成功(Hadoop, Spark, Kafka等)。那么问题来了,为什么ASF需要设置孵化器项目呢?

孵化器项目的必要性

ASF基金会有统一的开源治理原则与规则(被称为Apache Way, 具体请参考:https://www.apache.org/theapacheway) 来保障开源软件的质量以及开源社区的健康发展。而企业和个人捐献的项目可能五花八门,从而产生巨大的Gap。这个差距可能会包括:开发流程,基础设施支撑,社区文化,代码质量,文档质量等方面,因此需要经历孵化期来加以改进或者调整来达到基金会的基本要求。 除此之外,项目的贡献者从单一公司/个人贡献过渡到多元化的社区贡献需要一个过程。罗马不是一天建成的,让外部开发者了解开源项目的使用以及有兴趣和意愿参与进来,需要不断通过各种形式(技术会议,邮件组讨论,技术媒体文章等等)做社区推广。 最重要的是,由于捐献的项目可能会涉及到第三方的代码及知识产权,在孵化器阶段,知识产权(IP)和软件许可(License)需要进行统一的规范化,从而确保最终用户可以放心使用,不必有后顾之忧。

了解为项目设定孵化器阶段的必要性之后,我们就很容易理解每个项目在孵化阶段需要达成的目标。

项目在孵化阶段的目标

  1. 确保孵化器项目的组织架构以及日常运营能符合基金会统一的原则以及流程
  2. 确保捐献的项目的IP以及法律相关问题能在一个合适的时间和平台上得到关注、帮助以及充分解决
  3. 确保项目以及项目背后的社区的成长与推广符合基金会的目标
  4. 确保项目的成熟、毕业以及被基金会统一背书有统一的标准

在正式介绍孵化流程之前,笔者还想先介绍一下ASF孵化项目最重要的角色之一,就是导师(Mentor)。

孵化器项目导师的角色与职能

Apache软件基金会所定义的导师职能如下: “Mentors are chosen by the Sponsor to actively monitor the podling, guide the podling in the Apache Way, and report its status to the Sponsor and the Incubator PMC. All Mentors must be members of the Incubator PMC. A Mentor has the following responsibilities toward the Incubator PMC, the Sponsor, and the community of the assigned Podling.”

导师被选中来监督孵化器项目的日常运行,保证项目遵循Apache之道,向项目的Sponsor(IPMC,即ASF孵化器项目的管理委员会,或者其他的顶级项目)汇报项目当前的状态,以及自己的建议。所有的导师必须是ASF孵化器项目的管理委员会成员(即Incubator项目的PMC,也即IPMC),主要有两部分职能:

面向项目社区

确保IPMC的决定和指出的问题能及时得到执行 确保影响孵化项目的问题与解决方案能得到及时的沟通与决策 在IPMC(孵化器管理委员会)中代表该孵化项目的利益 帮助ASF秘书处联络项目自身的管理委员会,包括签署SGA(软件授予协议),CLA(项目贡献协议) 协调ASF的基础设施部门,为项目的底层技术(邮件列表,账号建立,代码版本控制等)提供支持 辅助项目解决许可证迁移,版权移交包括软件授权等问题,为项目在运行实践中遵循Apache的策略与原则提供官方指导意见

面向孵化器项目的管理委员会(IPMC)

监督孵化项目通过孵化流程 评价孵化项目的日常运行是否遵循ASF基金会的政策与流程 评价孵化项目的状态是否适合继续,淘汰或者毕业 向IPMC以及其他的支持方提供项目整体的状况,包括许可证授权的状态更新

具体孵化流程

ASF项目孵化的整体流程如下图所示:

具体而言,在进入孵化流程之前,需要:

  • 找到接口人(Champion)来帮助项目进入提案流程
  • 写一个项目的提案(Proposal)初稿,准备必要的细节
  • 找到导师(通常是3位)来帮助项目后续毕业为顶级(Top-Level)项目
  • 在孵化器项目(Apache Incubator)邮件组里发起关于新孵化项目的讨论以及投票

一旦进入孵化流程中, 接口人(Champion)使命完成 导师接手项目相关的准备工作,包括创建邮件列表,代码托管账号,项目进度跟踪系统,项目主页等 推动项目的初始核心贡献者 - Committer,来签署个人贡献者协议,创建相应的账号以及权限 通过软件授权将代码捐献给基金会,并置放于代码托管平台的指定位置

在孵化阶段的后期,Incubator社区需要按照项目的实际情况投票决定项目从孵化器毕业或退出,评价标准主要在于两条:

  1. 项目是否增加其贡献者的多样性
  2. 项目是否能很好的按照基金会制定的精英规则(https://www.apache.org/foundation/how-it-works.html#meritocracy)运转

而并不是看项目当前有多成功或是多有影响力(因为成功与影响力一方面比较主观,另一方面很容易随时间变化)。

这里需要理解ASF设置Incubator阶段是为了保障项目的长远发展以及最终用户的利益,因为多样性可以:

  1. 为项目的长期发展提供了稳定性:来自同一家公司或组织的开发者同时一起离开项目的几率,要远大于各个分散在不同公司或组织的开发者个体
  2. 多样性为项目提供了更丰富的技术愿景:从实际情况来看,多样化的社区能更好地满足来自不同用户的需求,进而发挥软件的全部潜力,促进软件的实际使用

理解了孵化阶段的整体流程,自然就好理解ASF项目在经历孵化阶段所需要的具体工作内容,大致如下:

  • 为项目创建相应的社区网站(在apache.org域名之下)与入口
  • 在基金会的框架和规范下,按照社区规范来协同开发代码与文档,以及发布软件与优化编译流程
  • 通过加入更多新的核心贡献者(committer)来让社区成长
  • 建立开放透明的讨论与沟通机制(邮件组,JIRA等开放的平台),确保一切决策都在阳光下
  • 代码持续优化以及确保知识产权符合要求
  • 对第三方代码进行相应的授权许可

最后,成功的开源项目最重要的因素就是:社区,社区,社区!(重要的事情说三遍)。有优秀的人,才能构建优秀的项目。为了保障项目能尽可能的构建好开发者社区,在孵化阶段,有经验的导师会重点辅导和监督以下几件事来保障社区的健康发展:

  • 通过社区邮件组进行公开、透明的沟通以及决策
  • 项目对各个厂商的中立性需要得到保证(即没有收到少数公司的商业利益影响)
  • 欢迎所有新加入社区的贡献者,包括引入更多的核心贡献者,确保用户的问题得到回答与解决

关于Apache基金会项目孵化的更多问题,可以参考ASF Incubator项目文档官网(http://incubator.apache.org/),也欢迎发信联系本文作者 (<junping_du AT apache.org> 堵俊平)。