Apache孵化器主席Justin Mclean:如何成为Apache顶级开源项目_apache基金会项目申请-程序员宅基地

技术标签: Linux  JAVA核心技术  服务器  分布式  

摘要: 近日,Apache孵化器主席、Apache基金会成员、Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战。

近日,Apache孵化器主席、Apache基金会成员、Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战。

经Justin Mclean先生本人允许,并经主办方阿里中间件事业部&阿里技术战略部授权,小编将会议中分享的内容整理成文,带大家走进Apache软件基金会,了解顶级开源项目的晋级之路。(现场为英文分享,本文在分享的基础上做了些内容扩展,感谢阿里巴巴高级技术专家千臂对本文的校对和在内容上的贡献)

Justin Mclean Bio:

  • Apache孵化器主席
  • 独立程序员,30年+编程经验
  • Apache孵化器PMC
  • Apache软件基金会成员
  • 包括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 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.

开发者如何参与社区贡献

  1. 第一步是先订阅开发邮件组,以Dubbo为例,具体步骤可以参考这里:https://github.com/apache/incubator-dubbo/wiki/Mailing-list-subscription-guide
    1. 学习中英文文档,进行修正或优化,提PR。有疑问的地方,可以E-mail到邮件组或提issue,官方开发者的回复通常会比Google或StackOverFlow里找到的答案更全面和准确。
  2. 如果你正在使用某个开源项目,可以将实践经验总结出来,写篇blog,分享到社区。真实的案例总是最具有说服力的。
  3. 参与issue和PR的解决,回答用户的问题、PR的review。Good first issue以及Help wanted的issue,总有一个适合你。
  4. 如果你想深入学习Dubbo-rpc框架,UT是一个非常好的开始,完善和补充现有的UT,一边学习一边贡献,何乐而不为?
  5. 发现了bug,报issue,通过自己的努力最终解决了,提一个issue,first-contributor并不是那么难,拼写错误也算哦。
  6. 如果你发现一个可以帮助用户更方便地使用Dubbo,无论是开发、测试、调试、mock还是其他工具,都可以贡献到Dubbo生态中来。
  7. 最后社区非常欢迎大家通过邮件提想法,也欢迎大家多讨论,你会发现,技术变牛的同时,英文也变的666了。

开源项目晋级之路

进⼊ Apache 分为三个阶段,准备阶段、孵化阶段和毕业阶段。

  • 准备阶段:找到愿意帮助孵化的导师(通常是3位),向Apache 提交进⼊孵化的申请,经过导师们讨论并投票(获得多数票即可通过),通过后进⼊就可以孵化了。
  • 孵化阶段:分为两大环节,第⼀个环节是公司和个人签署协议向Apache 移交代码和知识产权。第二个环节是在导师的指导下按照Apache的规范,搭建开源项目的官网,在社区发布项目新版本并优化build流程,引入committers构建基于项目的开发者生态,逐步将生态做大。
  • 毕业阶段:如果最终通过了成熟度评估,就可以顺利毕业成为Apache的顶级项目了。

最后,当一位开发者提问Justin,如何晋级成一位顶级程序员?他给出了这样的答案:

  • 敢于试错,不要担心犯错,这是宝贵的经历,但要从中汲取经验避免第二次犯错;
  • 积极参加到开源社区,在社区可以锻炼自己的思考能力和解决问题的能力,同时,可以认识很多志同道合的朋友,这是技术能力以外更重要的财富;
  • 发型不重要。

原文链接

本文为云栖社区原创内容,未经允许不得转载。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xstardust/article/details/83346010

智能推荐

Codeforces Round #530 (Div. 1) 1098A Sum in the tree_cf1098a sum in the tree-程序员宅基地

文章浏览阅读2.4k次。A. Sum in the treeMitya has a rooted tree with nn vertices indexed from 11 to nn, where the root has index 11. Each vertex vv initially had an integer number av≥0av≥0 written on it. For every vertex ..._cf1098a sum in the tree

C++——std::String-程序员宅基地

文章浏览阅读2.1k次。link写在前面这一篇博客系统学习一下C++中String类的相关函数。这个类在之前做题的时候就经常遇到,其实说白了,它也就是一个vector < char >。但是,它又有一些独特的函数,可以在做题的时候简化代码,提高效率。所以在这一篇博客,就根据CPlusPlus官网中< string >中的内容做一个整理。自己整理之外,还有一些优秀的整理资料可供参考:std::string用法总结。string类与头文件包含string即为字符串。string是C++标准库的一个重要_std::string

python中的class Solution(object):的含义与类继承与类、对象概念的详解-程序员宅基地

文章浏览阅读9.1k次,点赞26次,收藏86次。python中的class Solution(object):的含义与类继承与类、对象概念的详解_class solution

读《疯狂的程序员》后感-程序员宅基地

文章浏览阅读1k次。读《疯狂的程序员》后感 花了几天功夫,把《疯狂的程序员》这本书看完了,这本书,是我无意间在校图书馆看到的,出版日期是2008年的,到现在为止已经过去好几年了,作者绝影。是在csdn上连载的博客,不过不知道作者在csdn上的名字是什么,自己搜索找,竟然没找到,很遗憾。书中讲述的是作者从大学时期到工作,再到创业7年时间的精力,说实话,作者的语文功底非常不错,能够生动的刻画

可后悔贪心 -- 解题报告_e. buy low sell high-程序员宅基地

文章浏览阅读244次。感觉普通贪心是每一个维度都是平等的,没有优先级。而可后悔贪心是存在某个维度是不可变的,不能直接用排序或者堆进行维护,常常需要经过某种处理,通过挖掘出题目中关于不可变维度的特殊性质,使其可以用排序或者堆等数据结构进行贪心。可后悔贪心常用堆(priority_queue)进行维护。_e. buy low sell high

AMCL源码解析-程序员宅基地

文章浏览阅读6.5k次,点赞14次,收藏93次。AMCL是ros导航中的一个定位功能包。其实现了机器人在2D平面中基于概率方法的定位系统。该方法使用粒子滤波器来针对已知地图跟踪机器人的位姿。MCL与AMCL的区别它们最重要的区别应该是重采用过程。AMCL在采样过程中仍然会随机的增加小数量的粒子。这一步骤正式为了解决MCL不能处理的重定位问题。当粒子逐渐聚集,其它地方的粒子将慢慢消失。对于MCL来说,如果此时将机器人搬动到另一个地方。此时原来..._amcl源码

随便推点

uni-app实现Android分享到微信朋友圈和微信好友_uniapp实现app微信分享好友和朋友圈需要到微信开放平台申请吗-程序员宅基地

文章浏览阅读2.6k次。最近使用uniapp开发app,使用开发环境中使用微信分享功能时可以正常分享到微信好友或者朋友圈,但是发布后提示,经过百度后发现需要在微信开放平台申请。附上步骤在项目中打开manifest.json,点击App模块权限配置,给Share(分享)打勾,给这个App加一个分享权限。点击App SDK配置,进去找到分享,填写appid那么问题来了,appid从哪弄呢?前往微信开放平台https://open.weixin.qq.com/注册,登录创建移动应用按要_uniapp实现app微信分享好友和朋友圈需要到微信开放平台申请吗

使用docker安装部署oracle12.2_docker 官方oracle 12.2安装包-程序员宅基地

文章浏览阅读9.6k次,点赞2次,收藏6次。1. 步骤在Mac上安装docker使用oracle的dockerfile,构建image在docker中运行oracle实例启动,停止oracle docker容器连接数据库 2. 在Mac上安装docker到docker store下载docker-for-mac。我们需要适当调整一下cpu内存分配,如4核CPU,16G内存。 点击reveal in f..._docker 官方oracle 12.2安装包

Javascript 笔记三-程序员宅基地

文章浏览阅读50次。1. 检测变量是否是非数字的方法是? isNaN(变量) 结果:非数字为true。数字为false if嵌套2. switch语法格式? 注意点 switch(表达式){ case 常量表达式: 语句体; break; case 常量表达式: 语句体; break; 。。。 default: ...

Ionic4—UI组件之表单&双向数据绑定_ionic 动态绑定数据-程序员宅基地

文章浏览阅读974次。目录一、概述二、代码示例三、效果图一、概述二、代码示例Angular中ngModel指令实现双向数据绑定,ngFor实现遍历。组件的属性使用动态数据作为参数时,属性名用中括号包裹。单行文本框<ion-list> <ion-item> <ion-label>用户名:</ion-label>..._ionic 动态绑定数据

PyQt5之QDrag拖放按钮小部件学习_pyqt qdrag-程序员宅基地

文章浏览阅读1.1k次。在下面的示例中,我们将演示如何拖放按钮小部件。from PyQt5.Qt import QPushButton, QWidget, QApplicationfrom PyQt5.QtCore import Qt, QMimeDatafrom PyQt5.QtGui import QDragimport sys#按钮类class Button(QPushButton): d..._pyqt qdrag

Matlab进阶绘图第20期—带类别标签的三维柱状图_matlab画三标签柱状图-程序员宅基地

文章浏览阅读846次。Matlab进阶绘图第20期—带类别标签的三维柱状图_matlab画三标签柱状图

推荐文章

热门文章

相关标签