天天看點

從開源小白到 Apache Member,我的成長之路

從開源小白到 Apache Member,我的成長之路

我們走過的每一步路,都會留下印記,越堅實,越清晰。

近日,Apache 軟體基金會(ASF)官方 Blog 宣布全球新增 40 位 Apache Member,張乎興有幸成為其中一位。

目前,全球共有771位 ASF Member,中國僅13位。本文将分享作者從0基礎的開源小白,一路走來的感觸,希望把期間的經曆分享出來,讓更多的人看到,世界開源舞台的中國力量。隻要有持續的付出,總會有所收獲。

初次參與開源

2014年,我加入阿裡巴巴中間件團隊,開始接手集團應用容器的維護工作。當時集團的應用容器絕大部分都是基于 JBoss,老舊且無人維護,另外有一小部分跑在 Jetty 和 Tomcat 之上,當時中間件團隊維護了 Tomcat 的一個私有分支,最大的目标就是要統一所有集團的應用容器為 Tomcat。而在那之前,我從未接觸過 Tomcat 的開發和運維,對我來說,挑戰很大。然而,更大的挑戰來自于團隊大 leader 提出的,在當時看來幾乎是無法實作的目标:成為 Apache Tomcat 的 committer。

要知道,作為 Apache 的核心項目之一,Tomcat 自1999年釋出第一版以來,一直是開源屆和 Apache 基金會的明星項目,至今仍然在應用容器領域市場占有率保持第一,曆經20年發展,依舊熱度不減。Tomcat 曆經這麼多年的發展,卻從未出現過一位來自中國的 committer。而我們小團隊隻有4個人,根本沒有任何開源的經驗,也完全不知道從何做起。團隊 leader 問我們,誰願意挑戰一下的時候,我也沒有多想,就承擔了下來。

就這樣,我開始了自己的 Apache 開源之旅。

說實話,一開始,自己并沒有太多的思路,于是開始反複浏覽 Tomcat 官網,希望能夠查詢到一些有用的資訊。所有的 Apache 項目幾乎都會有新使用者指南,介紹如何參與到此開源項目當中,Tomcat也不例外。很快,我從修複 bug 開始,第一個 patch 是修複一個Websocket 測試用例失敗的問題,修複該問題涉及到了對代碼的一些重構。

還記得當時送出之前我非常謹慎,和 leader 一起反複讨論了很多次,終于形成了一個比較滿意的方案。送出給 Tomcat 社群之後,很快,社群便有了響應,并合并了我送出的更新檔。**第一次送出便獲得了認可,心裡很開心,緊張的情緒也緩解了。看到 Tomcat 的 release note 裡面出現了自己的名字,真的非常開心。

**

Apache Roadshow China

2015年10月,我有幸在北京參加了 Apache Roadshow China 的活動,算是第一次和Apache 基金會有了親密接觸。在大會上,親眼目睹了時任 Apache 基金會主席的 Brett Porter、Apache 基金會副總裁 Niclas Hedhman 等大牛們的演講,以及在 Panel Disussion 裡面,和他們,以及幾位來自中國的 Apache 成員,一起探讨社群上司的開發流程等。

當時覺得自己離他們似乎非常遙遠。

2015年的時候,國内參與 Apache 社群的幾乎全是在外企工作的華人。而如今來看,國内公司參與開源的程度已經有了顯著提升。這次參與中國路演,有幸和 Niclas heldman 做了些交流,我問了他一個問題:

“我正在參與 Tomcat 社群,如何才能成為 committer?”

他給了我一些至今對我影響依然非常深遠的建議:參與社群讨論,從簡單的新手任務入手,修複 bug,以及參與 release vote。這麼多年過去了,這些建議依舊适用。

Tomcat Committer

嘗到了貢獻的甜頭後,團隊的目标也有所調整。内部版本的 Tomcat 和開源版本的結構要保持完全一緻:

使得合并開源 Apache Tomcat 變得非常容易;

内部做的增強也更加友善合并到社群。

後續向社群的貢獻,主要來源于三個方面:

第一:阿裡内使用 Tomcat,在大規模、高并發場景下遇到的問題修複。

比較典型的是當時無線網關應用采用的是 Tomcat NIO+AsyncServlet 的架構,作為一個入口應用,曾經因為Tomcat 在高并發下的異常出現過一個比較大的故障,後來排查這個問題花了非常多的精力,最終徹底修複了這個問題。詳細的排查過程記錄在《逆流而上-阿裡巴巴技術成長之路》一書中的《山洪暴發,高流量觸發 Tomcat bug 引起叢集崩潰》。修複方案也一起送出給了 Tomcat 社群,雖然改動量不大,但凝聚了團隊相當多的心血。

第二,Tomcat 大面積在阿裡鋪開時遇到的問題修複。

例如,發現了一些不符合 Servlet 規範的行為等,包括應對雙十一時所做的一些優化、并行類加載等等。

第三,主動參與開源社群,針對一些一直存在的問題的修複。

經過一年多的持續投入貢獻,2016年8月23日,在一個平常工作日的上午,我打開郵箱,看到一封來自 Tomcat 社群核心開發、Java EE 規範專家組成員、時任 Apache 基金會董事會成員 Mark Thomas 的來信,邀請我成為 Tomcat Committer。打開郵件的那一刻,感覺自己的心都在顫抖,激動之情有點不能自已。當時的确出乎了自己的意料,沒有想到夢想的那一天真的會到來。

Tomcat PMC Member

成為 Committer 之後,有了代碼的直接送出權限,其實意味着更大的責任。

那一年,Tomcat 已經成為了阿裡内部應用容器的标準,叢集的規模在全球範圍内都是領先的。而我也并沒有停止參與社群的貢獻,直到2017年,ApacheCon 北美大會即将在5月美國邁阿密召開,收到了 Call for participation 郵件的時候,我突然萌生了一個想法:

為什麼不把阿裡巴巴在大規模高并發下遇到的挑戰,在 ApacheCon 大會上分享呢?

每年的 ApacheCon,基本都會為 Tomcat 開設專場「TomcatCon」。之前從來沒有在國外大會上分享的經驗,也不知道能否被大會接受,我懷着忐忑的心情送出了提案,也沒有抱太大的信心。直到那年3月,我收到一封郵件,通知我的提案被 ApacheCon 大會接受了,那種被認可的感覺真的很棒。

在5月份的大會上,我有幸見到了經常在社群裡面交流卻素未見面的一群開發者,比如來自英國的 Mark Thomas、來自美國的 Christopher Schultz、來自法國的 Jean-Frederic Clere等等,他們都是 Tomcat 社群的頂尖專家,有的甚至10餘年來一直參與 Tomcat 社群的貢獻。

和之前郵件讨論起問題來非常的直率、甚至是嚴厲的印象不同,他們都非常的親切,演講當天也在場下默默地支援我,演講很成功,讓世界看到了一個中國企業在貢獻 Tomcat 社群所作出的努力,我覺得挺驕傲的。

演講第二天的晚宴上,氣氛很輕松,台上正在進行着閃電演講,Mark 拿着啤酒走過來和我說,想邀請我成為 Tomcat PMC Member。天啊,我完全沒有想到能夠和面前這群大神們站在同樣的位置上,于是很開心地接受了。

結緣 Dubbo

2017年,阿裡重新開機了 Dubbo 的開源維護工作,而團隊正好承擔了這一重要使命。

Dubbo 在停更後,社群的很多使用者隻能選擇 fork 分支,自行維護。重新開機維護之後,需要思考的問題是,社群會不會有類似的擔心。是以,團隊決定把 Dubbo 捐獻給 Apache 軟體基金會,希望能夠通過“社群大于代碼“、“公開透明“、“共識決策“等Apache 之道,來打消開發者們的顧慮。

已經有過幾年 Apache 社群參與經驗的我,自然地承擔起幫助 Dubbo 進入 Apache 基金會孵化的工作,從聯系導師到修改提案,終于,Dubbo 通過了 Apache 孵化器的社群投票,正式開始孵化。那天是2017年的大年三十,我坐在家裡的電腦前,發送出正式投票結果郵件的那一刻,我在想,這注定是個值得銘記的日子。

在 Apache 孵化器中孵化,就像一個浪子在江湖上橫沖直撞了很多年後,突然想靜下心來開始求學,自然要循序很多規則,也會有很多文化和意識心态上的沖突。**我開始思考如何能夠幫助 Dubbo 更好地踐行 Apache 之道,這裡面有很多東西需要做。

Dubbo 和其他項目不同的一點是,Dubbo 在加入 Apache 之前,已經是一個巨無霸級别的項目了,上萬的star、龐大的社群、國内大規模被采用,社群一天的活動量所發送的郵件就會讓導師覺得無所适從,簡直沒有辦法看了。

如何能讓這個巨無霸遵循 Apache 之道來發展,成為了一個很大的挑戰。

有一個很鮮活的例子,當時社群在關注:“問題的讨論是應該在郵件清單上進行還是在Github issue上進行?”

Dubbo 的使用者早已經習慣了在 Github issue 上讨論,但是導師之一的 Mark 卻指出,郵件清單仍然是這個星球上最為普适的通訊工具。因為世界上仍然有一些國家,在某些環境下,上網的網速可能隻有幾十k/s,甚至隻能撥号上網。

如果在 Github 上讨論,對于這些網絡環境不佳,卻想參與社群的人就是災難性的。或許我們可以放棄那部分使用者,但這并不是 Apache 的價值觀。類似的例子還有很多,我有點遺憾沒有及時把他們都記錄下來,會嘗試在另外一篇文章中分享。

第一次的 release,是孵化過程中很重要的一個裡程碑。在我看來,release 的意義遠大于代碼層面的工作,還包括了準确的 License 和版權聲明、符合規範的代碼及依賴、準确一緻的簽名等。Dubbo 花了很多的時間去準備,也把整個過程完全的文檔化,孵化過程中,由7位不同的 Release Manger 輪流負責,確定不同的人都可以完成釋出。

孵化的過程中,知識産權清理也是一個重要的環節,Apache 對于商标和 License,有着近乎嚴苛的要求,每次 release 的時候都會仔細檢查,最典型的例子就是 github.com/dubbo 這個 group。在我們看來很正常,但是在 Apache 基金會的視角來看,由于 Dubbo 這個商标已經被轉移給 Apache,任何第三方的使用都會構成侵權,是以也是不被允許的。最終的解決方案是把這個 group 下的所有項目清空,一部分遷移到 Apache,另一部分遷移回其他 group。

其他還有很多問題,例如,發展社群 PMC member/Committer、舉辦一場符合規範的Meetup 等等,有機會在單獨的文章中分享。

成為 Apache Member

在 Dubbo 即将畢業的前夕,突然有一天,我按慣例打開郵箱,突然發現躺了一封 Invitation to join The Apache Software Foundation Membership。我心中一陣驚喜,點開之後,發現是邀請我成為 Apache Member 的郵件,這讓我非常的出乎意料。

說實話,也曾夢想過未來有一天能成為Apache Member,但沒有想到這一天來得如此之快。成為 Apache Member 意味着是 Apache 的771成員之一,從法律上成為了 Apache 基金會的股東。**但是這并不意味着,貢獻的終止。就像打怪更新,當你通過了目前這一關,你會遇到更大的 boss。

作為 Apache Member,更多的是從一個個獨立的項目中抽離出來,關注基金會層面橫向的事務。但我覺得成為 Member 最大的意義是在于自己在開源這條路上并不孤獨,尤其是還有這麼多來自中國的 Member,更加堅定了中國的開源項目可以在世界的舞台上表現的更好。

成為 Member 之後,我們會通過 Apache 基金會,幫助更多中國的開源軟體及開發者,和全世界建立更廣泛深入的連接配接。一方面是走進來,幫助擴大 Apache 基金會在中國的影響力,讓更多的開發者參與到世界頂級的優秀開源項目中來;另一方面是走出去,幫助中國開源項目進入到 Apache 基金會孵化,提升中國開源軟體的國際影響力。其實國内有很多非常優秀的開源項目,隻是缺少一個向世界展示的視窗,希望 Apache 基金會能夠作為這樣的一座橋梁。

本文作者:

張乎興,社群昵稱 ralf0131,花名望陶,Apache Member,Apache Dubbo PPMC Member,Apache Tomcat PMCMember,阿裡巴巴技術專家,關注大規模分布式系統、RPC架構和微服務領域。