Apache顶级开源项目是怎样炼成的?国内开发者应该如何借鉴?
作者 | Justin Mclean
出处 | 阿里巴巴中间件
近日,Apache 孵化器主席、Apache 基金会成员、Dubbo & RocketMQ 等开源项目的导师 Justin Mclean 来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个 Apache 顶级项目,以及项目孵化过程会遇到的一些盲点和挑战。现场为英文分享,本文在分享的基础上做了些内容扩展,感谢阿里巴巴高级技术专家千臂对本文的校对和在内容上的贡献。
Justin Mclean Bio:
Apache 孵化器主席,Apache 孵化器 PMC,Apache 软件基金会成员,独立程序员,30 年 + 编程经验。包括 Dubbo 在内的多个 Apache 项目的导师,参与审核了 350+ Apache 孵化器项目的发布。
为什么邮件列表仍是最主要的沟通方式?
Apache 是目前全球最大的软件基金会,其第一个项目是 Apache Httpd Server,大家用过的诸多项目,例如 Dubbo, Log4j, Maven, RocketMQ 和 Tomcat 等,均孵化自 Apache。
中文名:Apache 软件基金会
英文名:Apache Software Foundation
英文简称:ASF
ASF 正式创建于 1999 年,主要是为公众提供有用的免费软件,并为软件开发者社区提供支持和服务,它的创建者是一个自称为 Apache 组织的群体。
早在 1995 年,Apache 组织的成员聚集在一起,在美国伊利诺伊大学超级计算机应用程序国家中心开发的 NCSA HTTPd 服务器的基础上开发与维护了一个叫 Apache 的 HTTP 服务器。
早期,NCSA HTTPd 服务器是一个叫 Rob McCool 的程序员开发的,但是后来慢慢失去了兴趣,导致这个功能强大又好用的服务器没人维护。于是一些爱好者和用户就自发开始维护起来,并不断改善功能、发布版本。为了更好的进行沟通,组织中的一位成员创建了一个邮件组,把维护工作高效的组织起来,并把这个软件叫 Apache 服务器。这也是为什么 Apache 的所有项目至今仍然以邮件列表作为沟通的主要方式。
Apache 的命名来源于北美当地一支名叫 Apache 的印第安部落,这支部落以高超的军事素养和超人的忍耐力著称,19 世纪后半期对侵占他们领土的入侵者进行了反抗。为了对这支部落表示敬仰,就取了这个名字。但这里还流传着一个小故事,说是在 NCSA HTTPd 基础上,大家都通过打补丁不断在修改这个软件,被戏称为 A Patchy Server,和 Apache Server 读音很像。
Apache 官网开源项目列表
后来,随着商业需求的增多,围绕 Apache HTTP 服务器的项目越来越多,也有一些外部组织开始捐献项目给 Apache,以促进项目发展。为了让这些外部项目能顺利进入到 Apache,Apache 于 2002 年创建了 Incubator(孵化)项目。经过 20 多年的发展,截止 2018 年,ASF 已拥有 194 个顶级项目,54 个孵化项目,6500+ 位 committers,700 位基金会成员,196 位 PMC,50 个 podlings。其中,由中国开发者主导的项目,有 RocketMQ,WeeX,ECharts 和 Skywalking 等。
ASF 都有哪些成员?
参与 Apache 项目社区活动的人,一般分为以下几类:
- 直接用户 User:通过使用社区的项目构建自己的业务架构的开发者都是 Apache 的用户;
- 贡献者 Contributor:部分用户在使用 Apache 某个或多个项目的过程中,遇到问题,自己通过分析调试找到解决方案,并提交给项目组,最终被接受,这些用户就是 Apache 的贡献者;
- 提交者 Committer:贡献多了,经过 PMC 的提议和投票,就会成为 Committer,Committer 即意味着正式加入 Apache,拥有 Apache 个人帐号以及相应项目的写权限;
- PMC:Committer 再往上走就是 PMC,这个是由现有 PMC 成员提名产生的。
此外,ASF 还有 21 位创始成员,和一个 Board Member Team,主要负责基金会各类章程的制定和运作。
特别要强调的是 Project Management Committees,即 PMC,每个项目从孵化阶段开始就会有 PMC,主要负责保证开源项目的社区活动都能运转良好,这里运转的机制就是 The Apache Way。
什么是 The Apache Way?
就像我们加入一家公司需要了解这家公司的文化一样,参与 Apache 开源项目之前,我们也需要需要了解 ASF 的文化,这个文化就称为 The Apache Way。
- 公益使命 - Charity:ASF 是公益组织,使命是为全世界提供有用的软件,并且全部免费。取之有道,用之有方。
- 实用主义 - Pragramtic:相比 GPL,Apache License 有更广泛的用户基础,有人的地方就有规矩,但社区没有死板的规定,只有 guideline 帮助大家发展项目。No one is the Boss.
- 社区胜于代码 - Community:把项目构建出来这不是开源,去构建社区才是真正的开源。对社区而言,一切都是围绕代码而生,无代码则社区不复存在。在代码之上,则是如何做事、如何待人、如何决策的理念体现,一个健康的社区远比优秀的代码重要。如果代码奇烂无比,社区可以重写,但社区有了问题,代码即便再好,最终也会付之东流。More resources than a company.
- 公开透明与共识决策 - Open&Consensus:所有的决定,不管是技术 feature、发展方向,还是版本发布等,都应该被公开讨论,而形式就是邮件列表,这些讨论过程和结论都会被永久存档。而讨论的过程,就是大家自由发表意见的过程,最终通过投票,以比较民主的方法来做集体决定。If it doesn't happen on email, it doesn't happen.
- 任人唯贤 - Merit:特别强调一点,贡献绝不仅仅是代码,贡献可以是很多方面,还包括修正中英文文档,提交 PR,总结经验分享到社区等等。Those that have proven they can do, get to do more.
开发者如何参与社区贡献
- 第一步是先订阅开发邮件组,以 Dubbo 为例,具体步骤可以参考这里:
- 学习中英文文档,进行修正或优化,提 PR。有疑问的地方,可以 E-mail 到邮件组或提 issue,官方开发者的回复通常会比 Google 或 StackOverFlow 里找到的答案更全面和准确。
- 如果你正在使用某个开源项目,可以将实践经验总结出来,写篇 blog,分享到社区。真实的案例总是最具有说服力的。
- 参与 issue 和 PR 的解决,回答用户的问题、PR 的 review。Good first issue 以及 Help wanted 的 issue,总有一个适合你。
- 如果你想深入学习 Dubbo-rpc 框架,UT 是一个非常好的开始,完善和补充现有的 UT,一边学习一边贡献,何乐而不为?
- 发现了 bug,报 issue,通过自己的努力最终解决了,提一个 issue,first-contributor 并不是那么难,拼写错误也算哦。
- 如果你发现一个可以帮助用户更方便地使用 Dubbo,无论是开发、测试、调试、mock 还是其他工具,都可以贡献到 Dubbo 生态中来。
- 最后社区非常欢迎大家通过邮件提想法,也欢迎大家多讨论,你会发现,技术变牛的同时,英文也变的 666 了。
开源项目晋级之路
进⼊ Apache 分为三个阶段,准备阶段、孵化阶段和毕业阶段。
准备阶段:找到愿意帮助孵化的导师(通常是 3 位),向 Apache 提交进⼊孵化的申请,经过导师们讨论并投票(获得多数票即可通过),通过后进⼊就可以孵化了。
孵化阶段:分为两大环节,第⼀个环节是公司和个人签署协议向 Apache 移交代码和知识产权。第二个环节是在导师的指导下按照 Apache 的规范,搭建开源项目的官网,在社区发布项目新版本并优化 build 流程,引入 committers 构建基于项目的开发者生态,逐步将生态做大。
毕业阶段:如果最终通过了成熟度评估,就可以顺利毕业成为 Apache 的顶级项目了。
最后,当一位开发者提问 Justin,如何晋级成一位顶级程序员?他给出了这样的答案:
- 敢于试错,不要担心犯错,这是宝贵的经历,但要从中汲取经验避免第二次犯错;
- 积极参加到开源社区,在社区可以锻炼自己的思考能力和解决问题的能力,同时,可以认识很多志同道合的朋友,这是技术能力以外更重要的财富;
- 发型不重要。