如何成为一个合格的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 你要參與的項目
以 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.
詳情查閱:
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:點擊「閱讀原文」可查看作者原版博客。
# 社區推薦 #
5月16日,2020 首場 Meetup 重磅上線。一如既往,本次 Meetup 邀請了來自袋鼠云、網易云音樂、有贊及阿里巴巴的四位技術專家為您現場直播,讓您足不出戶,有直播看、有干貨學、有獎品拿~
你也「在看」嗎?????
總結
以上是生活随笔為你收集整理的如何成为一个合格的ASF贡献者?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】3DSMax各个版本的下载地址
- 下一篇: 根据年、月、周、日设置时间节点的日期工具