走進ASF系列 - 如何成為一個合格的ASF貢獻者(Contributor)
阿里土話
ASF是一個開源組織,他有自身的文化,阿里是一個要活好102年的公司,其文化底蘊非凡!分享ASF之前總想或多或少的和大家分享一些阿里的味道!
- 給世界帶來微小而美好的改變
- 把幸運種子種到別人身上去,你才會有幸運
- Never, Never, Never Give Up(永不放棄)
沒錯,阿里人看到上面的三句話會倍感親切,因為上面三句都是 “阿里土話”。雖然是阿里土話,但我認為其有放諸四海而皆準的魅力!這些話,同樣適用于激發和指導你成為合格的開源貢獻者!不經意間看了一眼窗外,心里開心默笑,其實阿里每個角落都充滿這阿里氣息:
緣
其實每個人參與社區貢獻的機緣不一樣,但無外乎兩種:
- 偶發事件 - 由于參與某項工作,無選擇的就參與了某個開源項目。(我就是這種,很自然的就跟著 蔣曉偉 老師踏入了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開源貢獻之前你要做一些準備工作:
1. 創建一個Github賬號
點擊創建,為了演示,我創建了一個“pyflink”賬號 :)
2. Fork 你要參與的項目
以Apache Flink為例,如下:
點擊 “Fork” 之后,會在你的github賬號下出現一個flink項目,如下:
3. Clone 代碼到本地
做代碼貢獻之前需要Clone你剛才fork的Flink代碼到你本地,以備提交第一個社區貢獻PR!
4. 閱讀項目貢獻說明
一般具體項目會有介紹如何參與該項目的貢獻,以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. |
詳情查閱這里。
5. 訂閱郵件列表
社區問題大多會在具體項目的社區郵件列表里面進行討論,所以郵件列表是了解社區動態最重要的輸入,以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。
1. 提交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,這樣你就完成了社區第一份貢獻嘍!!
2. 開始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建設。
作者介紹
本人孫金城,淘寶花名“金竹”,阿里巴巴高級技術專家。2011年加入阿里,在2016年開始ASF社區貢獻,目前是 ASF Member, PMC member of @ApacheFlink and a Committer for @ApacheFlink, @ApacheBeam, @ApacheIoTDB。
【本文為51CTO專欄作者“金竹”原創稿件,轉載請聯系原作者】