如何成为一个合格的ASF贡献者?
本文由 ASF Member 孙金城(金竹)分享,上一期我们介绍了Apache 软件基金会的组织架构及运行机制,本期作者将结合个人经历分享如何参与 Apache 项目并成为合格的贡献者。
缘
其实每个人参与社区贡献的机缘不一样,但无外乎两种:
- 偶发事件 - 由于参与某项工作,无选择的就参与了某个开源项目。(我就是这种,很自然的就跟着 蒋晓伟 老师踏入了 Apache Flink 之旅)
- 因爱而求 - 每个码农都有一颗想让自己的的代码被应用全球的梦想追求!这梦想的实现要依托有开源的力量,ASF 完全可以为你营造好的实现梦想的环境。
给个理由
也许目前的你既没有工作的需要,也没有对开源产生任何爱意❤️。但了解一件事情总没有坏处,了解参与开源的利好,也许明天你就踏上了开源之旅!
- 顺势而为
如果你是一个码农,那么参与开源是一种 must to have 的事情,目前开源领域形式大好,各大公司纷纷拥抱开源,比如:Google,Alibaba,Hortonworks, Tencent, Facebook 等等。参与开源无疑是扩大了生存的空间。
- 业界身份证
参与开源就是在一点一滴的描绘你的业界身份证,你的开源贡献可以公示全球,由一行代码,一句文档的贡献,到成为某个项目的管理者(PMC 成员),到成为 ASF Member 甚至 成为董事会成员,这些就像你曾经为之努力的学士学位,硕士学位,博士学位一样为世人所认可!不夸张的说,某些情况甚至比学位证书还实用!
- 无国界导师
参与开源还有一个特别特别特别重大的利好,就是你可以在你所关注的领域寻找到好的导师,所谓好,不是牛,好是适合!所谓“三人行,必有我师”,社区交流初你会感觉和业界大牛无法沟通,因为他的一句话,需要分解成十句才能懵懵懂,甚至不懂!这个不是大牛原因,也不是你的原因,是大牛对你水平的了解不足导致,即使大牛了解你的水平,也很难让大牛将一句话分解成十句甚至百句话讨论你关注的问题,不是大牛不愿意,更多是我们不好意思:)。所以说,要“门当户对”找到 社区比你水平略高,同时你也能给人家一些反哺的贡献者长时间交流。目前ASF 有 7600+ 的 Committer,就算是某一个项目,也应该有几十个 Committer 和数以百计的贡献者,总会遇到可以和你一起进步的小伙伴!虽不曾谋面,却已熟若亲朋!
- 全球性分享
目前 ASF 项目有140多个领域,参与者覆盖230个国家。如果你小有成就,想将你的知识分享给更多的人,想利用的开源知识帮助更多的人,那么无疑 ASF为你提供了这样的平台!你又何尝不能成为上面“无国界导师”中的一员的导师呢!
- 佳实践
不知 - 了解 - 有方案 - 佳方案,开源是一个智慧的集结地,一个功能可能有几十种实现方式,这并不是一两个人或者某一个小团队能考虑到 (ALL) 的,然而在开源一个问题,你在考虑的同时,可能在世界的某个角落,某些角落还有其他人或团队在考虑解决方案,当大家共享方案的时候,智慧的火花将会产生!
- 领导力塑造
ASF 有公司和项目的治理方式,不论你目前是否一个(技术)管理者,参与开源贡献你都有机会挖掘你自身的领导力。TL,可以是 Team Lead,也可以是 Tech lead,作为一个码农,往往对 Tech lead 更加情有独钟!在开源贡献一向遵循 “正确的就是拥护的,正确的就是坚持的”!如果你一贯的在社区发出自己独到的见解(管理&技术),那么势必会塑造你独特的领导力,社区领导力是内心驱动的影响力,所有的拥护者都是无外界压力,无情感偏见,发自内心的崇拜赞许!如果你能达到这样的成就,将胜过你职业的晋升,当然这个也会促进你的职业晋升!
- 给世界带来微小而美好的改变
毋以善小而不为,小善举大美好!有的时候一个文档优化,甚至一个 typo 的贡献都会让成千上万的人获益。更有意思的是很多开源贡献者都是从文档贡献开始的 :)一个很有意思的统计,28%的开源贡献来自偶然的文档改进。
Casual contributions are far from being trivial. After a manual inspection of a sample of casual contributions, we found that although 28.64% of them are related to grammar and typo fixes.
给个原则
没有规矩,不成方圆,如果上面的理由足够打动你,那么我再给你一些参与开源的原则:
- 给世界带来微小而美好的改变
始终坚信滴水成河的道理,社区贡献在于积累,贵在坚持,不因善小而不为,任何贡献都会使得社区变得更加美好!
- 公开沟通
参与开源的一个重要的原则就是公开沟通,任何问题不论大小,都要在可以被追溯,可以被任何感兴趣的人查阅的方式进行讨论。比如:邮件列表,JIRA上,PR 中等。切记不要单独私信讨论,公开讨论有助于更多的人参与,而且还确保了在讨论过程中一些无意识的错误可以很容易被发现和纠正。
- 保持尊重
社区的任何贡献都是以自愿为原则的,不能强迫任何人做事情,也不要无礼貌的敦促任何人做事情的进度(除非特殊情况)。更不能因为意见不通就进行人身攻击,不要以为这好笑,其实是真是发生过的!尊重是相互的,你给予我春风,我自送你一缕芳香!大家努力营造开心和谐的社区氛围。
- 简明扼要
我们可以大胆的在社区提问,追问!
但切记在提问之前将自己的问题反复思考,这是对自己负责也是对其他社区贡献者的尊重!因为你的一次问题描述可能将被数百人阅读。写一封简明扼要的邮件意味着人们可以尽可能有效地理解你的意图。如果需要详细说明,请考虑添加摘要。也就是,你的问题描述要简明扼要(这个和能力有关,尽自己好就行),尽量写清楚上下文,你在什么情况下,遇到了怎样的问题,如何问题再现等等,你的描述越简明扼要,越清晰完整,越容易被人取得别人帮助!
- 前进一小步,文明一大步 :)
这可不是 WC 用语,而是确确实实的利他原则。阿里巴巴国际化战役中有一个要求,就是参与国际化建设的阿里人员,到哪个国家,就必须用当地的语言与当地客户沟通。这体现了足够的尊重,体现了足够的服务前的准备和付出!我们在开源社区问问题也是一样的,不能遇到问题,不加思索的就向社区提问,在提问之前要先进行各种尝试,各种资料的查阅,社区已有问题的查阅,同时带上自己的观点去提问,让想帮助你的社区人员看到你在这个问题上的努力。
- 把幸运种子种到别人身上去,你才会有幸运
我们不仅仅是问题的提出者,慢慢我们自己也变成问题的解决者,由社区求助者变成社区救助员!努力寻求自己反哺开源社区的机会,为他人付出也是为自己积累!所谓 “为自己,照亮他人!”。假如你相信来世今生的话,这里有个故事分享给给你:
从前有两个要投胎转世的人,在投胎之前有机会选择投胎之后是做“一生向别人索取的人”还是做“一生施惠于他人的人”,选择了“一生向别人索取的人”的那个,投胎做了 乞丐,而选择了“一生施惠于他人的人”的那个做了富翁!
所以做社区也一样,努力做施惠于别人的人,就是在社区德高望重,具有领导力的人!:)
- Never, Never, Never Give Up(永不放弃)
理想总是美好的,现实总是骨感的,参与社区的人都具备热情,耐心的品质,但社区的问题太多,需要得到帮助的人也太多,相同问题千人千面,意见不一致也是司空见惯的,切记不要以为提的问题都会很快有人帮忙,你提交的 PR 很快有人 Review。每个大的社区贡献都需要如下图所示的投票决定,也许你的贡献被接受,也许你的贡献被拒绝,但请不要太在意一次的贡献成功与否,无论遇到什么困难,挫折,都要 Never, Never, Never Give Up(永不放弃),因为马总说过 “今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,看不到后天的太阳”。只有坚持到后的人,才能享受到和煦的阳光!
如何开始
常见的参与 Apache 贡献的方式是选择一个你感兴趣的项目,因为爱好才是好的原动力!我曾经用一句话描述过ASF:“ASF 是一个与阿里巴巴同龄(成立于1999年),有完整的组织(董事会)架构管理,以软件(140个领域)技术全球(覆盖230个国家)共享为使命的公益组织”,里面提及 ASF 有140个技术领域总有一个你感兴趣的!
ASF 项目目前分为两大类:
- 孵化器项目 - 是正在孵化的项目,也就是,在成为 ASF 项目之前,需要在ASF 进行孵化,当从孵化器毕业之后就会成为 Apache 项目。参与孵化器项目的好处是你能对项目有更早的参与,有多细节变化的了解,也很容易得到该项目的重视:),目前 ASF 所有孵化器项目列表请这里查阅!
- Apache 项目 - 这是已经从孵化器毕业的 Apache 项目,项目的运作一般已经完全符合 Apache Way。直接参与项目的好处是能开始就接触很规范的社区贡献方式和更高的质量代码,有更多的学习资料和更多的参与者。目前 Apache 项目列表,可以查阅这里!
一旦选择参与某个项目,不论在什么情况下,你都要听从自己的直觉,做你认为更好或者不同的事情。永远都不忘初心,坚持自己所坚持的,也永远牢记上面的原则,其中你会发现“给世界带来微小而美好的改变”非常受用。假如,你在查看文档时候,发现了某个链接的错误或者 typo 错误。假如,你在使用产品的过程中发现了问题,请不要坐视不理,径直绕开,或者向社区提出问题,等待其他人来修复,因为这正是你贡献社区的好机会,解决这些你能看到的问题,因为,在解决这个问题的同时,也许会有新的问题被你发现~~ 进而你就入道啦:)
准备工作
目前 ASF 开源项目都是在 github 上面托管的。所以正式参与ASF开源贡献之前你要做一些准备工作:
创建一个 github 账号
点击创建,为了演示,我创建了一个“pyflink”账号 :)
Fork 你要参与的项目
点击 “Fork” 之后,会在你的 github 账号下出现一个 flink 项目,如下:
Clone 代码到本地
做代码贡献之前需要 Clone 你刚才 fork 的 Flink 代码到你本地,以备提交个社区贡献 PR!
阅读项目贡献说明
一般具体项目会有介绍如何参与该项目的贡献,以 Apache Flink 为例 就有关于如果参与 Flink 社区贡献的说明, 比如:
Apache Flink is developed by an open and friendly community. Everybody is cordially welcome to join the community and contribute to Apache Flink. There are several ways to interact with the community and to contribute to Flink including asking questions, filing bug reports, proposing new features, joining discussions on the mailing lists, contributing code or documentation, improving the website, or testing release candidates.
详情查阅:
https://flink.apache.org/contributing/how-to-contribute.html
订阅邮件列表
社区问题大多会在具体项目的社区邮件列表里面进行讨论,所以邮件列表是了解社区动态重要的输入,以 Apache Flink 为例,需要订阅 开发邮件列表和用户邮件列表,如下:
- user-subscribe@flink.apache.org / user-zh-subscribe@flink.apache.org
- dev-subscribe@flink.apache.org
首先,点击上面的 link,会引导你给 xxx-subscribe@flink.apache.org 发送邮件。然后你会收到官方确认邮件。后你回复确认邮件之后还会收到一封欢迎邮件,也就意味着你订阅成功了!注意上面每个邮件列表都需要单独发起订阅。
OK, 到这一步你已经完成了为 Apache Flink 做贡献的准备工作了:),接下来就要寻找做贡献的机会了!
创建 issue 或者解决 issue
目前大多数 ASF 项目的问题采用 JIRA 管理(当然也有例外),我们以 Apache Flink 为例,当用户发现的问题可以在这里查阅。如果你发现有你感兴趣的 issue,不要犹豫,直接在 JIRA 下留言,你想帮忙解决这个问题,并 share 你解决问题的方法,这样社区会有 Committer 来与你沟通了!以一个之前我向 Flink 提交的 issue 为例 FLINK-13471:
当发现有人创建了 issue,但还没有分配给任何人,你就可以尝试帮助解决这个问题,在完成开发后提交PR。当然,如果你发现了问题,如果是你确认的小问题,可以直接创建新的 issue, 如果你对这个问题并不确定,可以在开发邮件列表里面就像邮件讨论。当确认问题之后,再创建 issue。
提交 PR
不论你是修复文档还是贡献代码,都建议在你刚才fork的项目中创建一个用于提交PR的分支,以我上面的为例,我会本地创建一个名为LINK-13473-PR
的分支,当完成开发之后,将分支 push 到自己的仓库,就可以创建 PR了,如下:
点击“Compare & pull request”,进行 PR 创建,如下:
创建 PR,有几个值得注意的点:
- 确保你的分支和官方 git 的 master 分支没有冲突,也就是如图显示“ Able to merge.”。
- 要对 PR 所要解决的问题,在 Title 里面简明的体现出来,比如“ [FLINK-13471][table] Add FlatAggregate support to stream Table API(blink planner) ” 明确了 JIRA 号
FLINK-13471
, 模块table
和 PR 的内容是Add FlatAggregate support to stream Table API(blink planner)
。 - 同时在详情里面要清楚的描述你改动的点,不同项目有不同的要求,但总体上保持上面提到的
前进一小步,文明一大步
的原则,你写的越清楚,Review 的人越容易理解你的改动,你的PR越容易得到有效的反馈。
后,点击“create pull request”完成 PR 的创建!不过,这还没有完成社区贡献,还需要等待社区其他贡献者的 Review。正常情况下,除非是 typo 的贡献,一般有代码逻辑的 PR 都会或多或少的得到 reviewer 的改进反馈,这时候就是学习交流的好机会啦:) 你可以尽可能的发表你的看法,解释你的设计,当然也要充分理解反馈的内容,后根据沟通达成的内容进行PR的更新!后达到了社区代码质量的要求,Committer 会帮助你进行代码的 Merge,这样你就完成了社区份贡献喽!!
开始 1-100 之旅
常识性观念是 0-1很难,因为那是创新,那是新领域的探索,那是酝酿了很久之后的步!但是参与ASF开源贡献,恰恰是0-1很容易,1-100才是一个持久战。需要上面提到的 “Never, Never, Never Give Up(永不放弃)”, 因为我真的看到了很多社区贡献者在一个社区贡献了一段时间之后,如果没有拿到自己想要的结果,比如成为 Committer,就会永远的在这个项目贡献里面消失了,Give Up 了!这不是危言耸听,这是真实的现实!
所以在 ASF 开源贡献的道路上,的确有很多人被马老师的话所命中:“今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,看不到后天的太阳”。所以,你…准备好了吗?:)
但行善事,莫问前程
不论做人,做事还是社区贡献,很多道理都是相通的,在下面的 ASF 金字塔中,我们从 贡献者 到 董事会成员的路是漫长的,如果你天天想着什么时候成 Committer,什么时候成为 PMC 成员,什么时候成为 ASF Member,什么时候能够当选董事会成员,我确信,在 ASF 开源贡献中,你将无法做到 “快乐工作,认真生活”!过急的目标驱动会增加你的烦恼,相反,登山而不思山顶攀登,将会迎来一路的惊喜!所以在参与开源的开始,我后的建议就是:“但行善事,莫问前程”!加油。
为你打气
我相信在 ASF 开源贡献之旅,你会有很多次要放弃的念头,你会遇到很多怀疑自己的时刻,你会时不时的怀疑社区管理者是否有问题?总之,如果你想把它当作一生的乐趣,在你没有找到乐趣之前,你一定需要下面的三句话:
- 给世界带来微小而美好的改变
- 把幸运种子种到别人身上去,你才会有幸运
- Never, Never, Never Give Up(永不放弃)
你参与社区的目标是为了尽自己微薄之力,来让 ASF 开源社区更美好!
你参与社区的信念是为其他人播撒幸福幸运的种子,你并没有在乎得到什么回报,你相信“因果”!
你参与社区的坚守是永不放弃,因为只要我在前行,必将抵达彼岸!永不放弃要深刻你脑海!与大家共勉~
小结
本篇为大家介绍了参与开源的利好、原则、以及介绍为自己的个社区贡献需要做怎样的准备。后,我目前在负责 Apache Flink 的 PyFlink 建设,诚挚邀请想参与 ASF 社区贡献的你,以 PyFlink 作为你的开源之旅的首站!Tips:点击「阅读原文」可查看作者原版博客。
# 社区推荐 #
https://qr.dingtalk.com/action/joingroup?code=v1,k1,sX+rQjO7HUrD0gh+2OoGZWUBOG71dGhOJvJ4xGoEO0g=<br>http://weixin.qq.com/r/_y7l-d-EbIITrZue93vp (二维码自动识别)
5月16日,2020 首场 Meetup 重磅上线。一如既往,本次 Meetup 邀请了来自袋鼠云、网易云音乐、有赞及阿里巴巴的四位技术专家为您现场直播,让您足不出户,有直播看、有干货学、有奖品拿~
相关文章