近日,Apache孵化器主席、Apache基金會成員、Dubbo & RocketMQ等開源項目的導師Justin Mclean來到阿里巴巴西溪園區,與衆多開發者分享瞭如何打造一個Apache頂級項目,以及項目孵化過程會遇到的一些盲點和挑戰。git
經Justin Mclean先生本人容許,並經主辦方阿里中間件事業部&阿里技術戰略部受權,小編將會議中分享的內容整理成文,帶你們走進Apache軟件基金會,瞭解頂級開源項目的晉級之路。(現場爲英文分享,本文在分享的基礎上作了些內容擴展,感謝阿里巴巴高級技術專家千臂對本文的校對和在內容上的貢獻)程序員
![](http://static.javashuo.com/static/loading.gif)
Justin Mclean Bio:github
- Apache孵化器主席
- 獨立程序員,30年+編程經驗
- Apache孵化器PMC
- Apache軟件基金會成員
- 包括Dubbo在內的多個Apache項目的導師
- 參與審覈了350+ Apache孵化器項目的發佈
爲何郵件列表還是最主要的溝通方式?
Apache是目前全球最大的軟件基金會,其第一個項目是Apache Httpd Server,你們用過的諸多項目,例如Dubbo, Log4j, Maven, RocketMQ和Tomcat等,均孵化自Apache。apache
![](http://static.javashuo.com/static/loading.gif)
- 中文名:Apache 軟件基金會
- 英文名:Apache Software Foundation
- 英文簡稱:ASF
ASF 正式建立於1999年,主要是爲公衆提供有用的免費軟件,併爲軟件開發者社區提供支持和服務,它的建立者是一個自稱爲Apache組織的羣體。編程
早在1995年,Apache組織的成員彙集在一塊兒,在美國伊利諾伊大學超級計算機應用程序國家中心開發的NCSA HTTPd服務器的基礎上開發與維護了一個叫Apache的HTTP服務器。服務器
早期,NCSA HTTPd服務器是一個叫Rob McCool的程序員開發的,可是後來慢慢失去了興趣,致使這個功能強大又好用的服務器沒人維護。因而一些愛好者和用戶就自發開始維護起來,並不斷改善功能、發佈版本。爲了更好的進行溝通,組織中的一位成員建立了一個郵件組,把維護工做高效的組織起來,並把這個軟件叫 Apache 服務器。這也是爲何Apache的全部項目至今仍然以郵件列表做爲溝通的主要方式。架構
Apache的命名來源於北美當地一支名叫Apache的印第安部落,這支部落以高超的軍事素養和超人的忍耐力著稱,19世紀後半期對侵佔他們領土的入侵者進行了反抗。爲了對這支部落表示敬仰,就取了這個名字。但這裏還流傳着一個小故事,說是在NCSA HTTPd基礎上,你們都經過打補丁不斷在修改這個軟件,被戲稱爲A Patchy Server,和Apache Server讀音很像。app
![](http://static.javashuo.com/static/loading.gif)
後來,隨着商業需求的增多,圍繞Apache HTTP服務器的項目愈來愈多,也有一些外部組織開始捐獻項目給Apache,以促進項目發展。爲了讓這些外部項目能順利進入到Apache,Apache於2002年建立了Incubator(孵化)項目。通過20多年的發展,截止2018年,ASF 已擁有194個頂級項目,54個孵化項目,6500+位committers,700位基金會成員,196位PMC,50個podlings。其中,由中國開發者主導的項目,有RocketMQ,WeeX,ECharts和Skywalking等。框架
ASF 都有哪些成員?
參與Apache項目社區活動的人,通常分爲如下幾類:ide
- 直接用戶User:經過使用社區的項目構建本身的業務架構的開發者都是Apache的用戶;
- 貢獻者Contributor:部分用戶在使用Apache某個或多個項目的過程當中,遇到問題,本身經過分析調試找到解決方案,並提交給項目組,最終被接受,這些用戶就是Apache的貢獻者;
- 提交者Committer:貢獻多了,通過PMC的提議和投票,就會成爲Committer,Committer即意味着正式加入Apache,擁有Apache我的賬號以及相應項目的寫權限;
- PMC:Committer再往上走就是PMC,這個是由現有PMC成員提名產生的。
此外,ASF 還有21位創始成員,和一個Board Member Team,主要負責基金會各種章程的制定和運做。
特別要強調的是Project Management Committees,即 PMC,每一個項目從孵化階段開始就會有PMC,主要負責保證開源項目的社區活動都能運轉良好,這裏運轉的機制就是The Apache Way。
什麼是 The Apache Way?
就像咱們加入一家公司須要瞭解這家公司的文化同樣,參與Apache開源項目以前,咱們也須要須要瞭解ASF的文化,這個文化就稱爲The Apache Way。
![](http://static.javashuo.com/static/loading.gif)
- 公益使命- Charity:ASF是公益組織,使命是爲全世界提供有用的軟件,而且所有免費。取之有道,用之有方。
- 實用主義 - Pragramtic:相比GPL,Apache License有更普遍的用戶基礎,有人的地方就有規矩,但社區沒有死板的規定,只有guideline幫助你們發展項目。No one is the Boss.
- 社區勝於代碼 - Community:把項目構建出來這不是開源,去構建社區纔是真正的開源。對社區而言,一切都是圍繞代碼而生,無代碼則社區不復存在。在代碼之上,則是如何作事、如何待人、如何決策的理念體現,一個健康的社區遠比優秀的代碼重要。若是代碼奇爛無比,社區能夠重寫,但社區有了問題,代碼即使再好,最終也會付之東流。More resources than a company.
- 公開透明與共識決策 - Open&Consensus:全部的決定,不論是技術feature、發展方向,仍是版本發佈等,都應該被公開討論,而形式就是郵件列表,這些討論過程和結論都會被永久存檔。而討論的過程,就是你們自由發表意見的過程,最終經過投票,以比較民主的方法來作集體決定。If it doesn't happen on email, it doesn't happen.
- 任人惟賢 - Merit:特別強調一點,貢獻毫不僅僅是代碼,貢獻能夠是不少方面,還包括修正中英文文檔,提交PR,總結經驗分享到社區等等。Those that have proven they can do, get to do more.
開發者如何參與社區貢獻
- 第一步是先訂閱開發郵件組,以Dubbo爲例,具體步驟能夠參考這裏:https://github.com/apache/incubator-dubbo/wiki/Mailing-list-subscription-guide
- 學習中英文文檔,進行修正或優化,提PR。有疑問的地方,能夠E-mail到郵件組或提issue,官方開發者的回覆一般會比Google或StackOverFlow裏找到的答案更全面和準確。
- 若是你正在使用某個開源項目,能夠將實踐經驗總結出來,寫篇blog,分享到社區。真實的案例老是最具備說服力的。
- 參與issue和PR的解決,回答用戶的問題、PR的review。Good first issue以及Help wanted的issue,總有一個適合你。
- 若是你想深刻學習Dubbo-rpc框架,UT是一個很是好的開始,完善和補充現有的UT,一邊學習一邊貢獻,何樂而不爲?
- 發現了bug,報issue,經過本身的努力最終解決了,提一個issue,first-contributor並非那麼難,拼寫錯誤也算哦。
- 若是你發現一個能夠幫助用戶更方便地使用Dubbo,不管是開發、測試、調試、mock仍是其餘工具,均可以貢獻到Dubbo生態中來。
- 最後社區很是歡迎你們經過郵件提想法,也歡迎你們多討論,你會發現,技術變牛的同時,英文也變的666了。
開源項目晉級之路
進⼊ Apache 分爲三個階段,準備階段、孵化階段和畢業階段。
![](http://static.javashuo.com/static/loading.gif)
- 準備階段:找到願意幫助孵化的導師(一般是3位),向Apache 提交進⼊孵化的申請,通過導師們討論並投票(得到多數票便可經過),經過後進⼊就能夠孵化了。
- 孵化階段:分爲兩大環節,第⼀個環節是公司和我的簽署協議向Apache 移交代碼和知識產權。第二個環節是在導師的指導下按照Apache的規範,搭建開源項目的官網,在社區發佈項目新版本並優化build流程,引入committers構建基於項目的開發者生態,逐步將生態作大。
- 畢業階段:若是最終經過了成熟度評估,就能夠順利畢業成爲Apache的頂級項目了。
最後,當一位開發者提問Justin,如何晉級成一位頂級程序員?他給出了這樣的答案:
- 勇於試錯,不要擔憂犯錯,這是寶貴的經歷,但要從中汲取經驗避免第二次犯錯;
- 積極參加到開源社區,在社區能夠鍛鍊本身的思考能力和解決問題的能力,同時,能夠認識不少志同道合的朋友,這是技術能力之外更重要的財富;
- 髮型不重要。
活動預告:2018 中國開源年會
看完文章不過癮?快來2018 中國開源年會,和Justin Mclean面對面,此外還有多位來自阿里巴巴的重磅嘉賓分享關於開源的故事。
![](http://static.javashuo.com/static/loading.gif)
本文做者:中間件小哥
閱讀原文
本文爲雲棲社區原創內容,未經容許不得轉載。