近日,Apache孵化器主席、Apache基金会成员、Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战。git
经Justin Mclean先生本人容许,并经主办方阿里中间件事业部&阿里技术战略部受权,小编将会议中分享的内容整理成文,带你们走进Apache软件基金会,了解顶级开源项目的晋级之路。(现场为英文分享,本文在分享的基础上作了些内容扩展,感谢阿里巴巴高级技术专家千臂对本文的校对和在内容上的贡献)程序员

Justin Mclean Bio:github
- Apache孵化器主席
- 独立程序员,30年+编程经验
- Apache孵化器PMC
- Apache软件基金会成员
- 包括Dubbo在内的多个Apache项目的导师
- 参与审核了350+ Apache孵化器项目的发布
为何邮件列表还是最主要的沟通方式?
Apache是目前全球最大的软件基金会,其第一个项目是Apache Httpd Server,你们用过的诸多项目,例如Dubbo, Log4j, Maven, RocketMQ和Tomcat等,均孵化自Apache。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读音很像。app

后来,随着商业需求的增多,围绕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项目社区活动的人,通常分为如下几类:ide
- 直接用户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为例,具体步骤能够参考这里:https://github.com/apache/incubator-dubbo/wiki/Mailing-list-subscription-guide
- 学习中英文文档,进行修正或优化,提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,如何晋级成一位顶级程序员?他给出了这样的答案:
- 勇于试错,不要担忧犯错,这是宝贵的经历,但要从中汲取经验避免第二次犯错;
- 积极参加到开源社区,在社区能够锻炼本身的思考能力和解决问题的能力,同时,能够认识不少志同道合的朋友,这是技术能力之外更重要的财富;
- 发型不重要。
活动预告:2018 中国开源年会
看完文章不过瘾?快来2018 中国开源年会,和Justin Mclean面对面,此外还有多位来自阿里巴巴的重磅嘉宾分享关于开源的故事。

本文做者:中间件小哥
阅读原文
本文为云栖社区原创内容,未经容许不得转载。