走进ASF系列 - 如何成为一个合格的ASF贡献者(Contributor)

阿里土话

ASF是一个开源组织,他有自身的文化,阿里是一个要活好102年的公司,其文化底蕴非凡!分享ASF之前总想或多或少的和大家分享一些阿里的味道!

  • 给世界带来微小而美好的改变
  • 把幸运种子种到别人身上去,你才会有幸运
  • Never, Never, Never Give Up(永不放弃)

没错,阿里人看到上面的三句话会倍感亲切,因为上面三句都是 “阿里土话”。虽然是阿里土话,但我认为其有放诸四海而皆准的魅力!这些话,同样适用于激发和指导你成为合格的开源贡献者!不经意间看了一眼窗外,心里开心默笑,其实阿里每个角落都充满着阿里气息:

-w388

其实每个人参与社区贡献的机缘不一样,但无外乎两种:

  • 偶发事件 - 由于参与某项工作,无选择的就参与了某个开源项目。(我就是这种,很自然的就跟着 蒋晓伟 老师踏入了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.

  • 认真生活,快乐工作 - 参与开源不仅仅是工作或业余爱好的演练台,也是生活的一部分,他会让你在快乐工作的同时寻找到“臭味相投”的挚友!通过参与Apache Flink项目我也交到了几位德国好朋友,甚至有些好朋友还成为了我的儿子的好朋友!:)看看下图有没有你和我共同的朋友?世界很小~?

给个原则

没有规矩,不成方圆,如果上面的理由足够打动你,那么我再给你一些参与开源的原则:

  • 给世界带来微小而美好的改变
    始终坚信滴水成河的道理,社区贡献在于积累,贵在坚持,不因善小而不为,任何贡献都会使得社区变得更加美好!

  • 公开沟通 - 参与开源的一个重要的原则就是公开沟通,任何问题不论大小,都要在可以被追溯,可以被任何感兴趣的人查阅的方式进行讨论。比如:邮件列表,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 你要参与的项目

Apache Flink为例,如下:

点击 “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.

详情查阅这里

订阅邮件列表

社区问题大多会在具体项目的社区邮件列表里面进行讨论,所以邮件列表是了解社区动态最重要的输入,以Apache Flink 为例,需要订阅 开发邮件列表和用户邮件列表,如下:

首先,点击上面的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作为你的开源之旅的首站!期待在Apache Flink社区PyFlink的建设中,遇见你~~

小结

本篇为大家介绍了参与开源的利好,原则,以及介绍为自己的第一个社区贡献需要做怎样的准备。最后诚挚邀请想参与开源建设的朋友首站加入Apache Flink 的PyFlink建设

关于作者

查阅更多内容