Esty的開源項目運營經驗

npde 9年前發布 | 6K 次閱讀 Esty

 

在Etsy(譯者注:一家以交易手工制品和舊物品為主的P2P電商),我們是開源的忠實粉絲。在互聯網上,無數的人解決了無數個問題,并使用開源許可證發布了他們的代碼,沒有這些人,就沒有Etsy。我們在Linux上運行Apache網頁服務器,來保持etsy.com的運作,我們服務端的代碼多數是用 PHP寫的,我們使用MySQL來保存數據。為了保持與時俱進,我們使用 GangliaGraphite 生成的可視化數據來度量我們的系統狀態,同時使用 Nagios 來監視系統的穩定性。當然這只是一些主要的例子,我們技術棧里面的每個邊邊角角,你都能發現開源代碼的身影。

在Etsy,“慷慨精神(Generosity of Spirit)”是每個人工作的一部分,它的意思是要給行業以回饋。對工程師來說,這意味著至少每年一次,或努力在某個會議上做一次演講,或在本博客上寫一篇文章,或給開源項目做點貢獻。當我們解決了一個問題時,如果我們覺得解決方案或許對他人有用,我們很樂意把它回饋給開源社區。

維護與分化

這個問題一直困擾著我們公司的很多開源項目,因為源源不斷的貢獻同時來自于我們的工程師和開源社區。我們從不羞于開源我們技術棧的核心部分。我們一直在公開開發我們的 部署系統統計數據收集器團隊即時管理工具 以及 代碼搜索工具 。我們甚至開源了我們的 原子部署 系統的關鍵部分。開源確實很有好處,我們廣泛地收到來自社區的新功能和bug修復,我們的軟件變得越來越成熟和穩定。

我們開源的項目越來越多,當我們想快速搞定某些新功能的時候,顯然很有理由為項目創建一個內部的分支。這些建立內部分支的項目,很快就和它們的開源版本發生了分化。這意味著,維護好這些項目的工作量會翻倍。內部的任何修復或者新功能,都要在開源版本中重新做一遍,反之亦然。在一個商業公司中,內部版本的優先級往往高于開源版本。看看我們的 GitHub主頁 ,很難搞清楚哪些項目還在頻繁維護中的,甚至我們自己的工程師也搞不清楚。

所以我們的結局就是,手上捂著一大堆“年久失修”的項目。開源社區的人花時間報告了一個bug,卻等不到任何答復,有時候甚至幾年都等不到,這使潛在的開源用戶心寒。沒人能說得清楚,某個開源項目是一個持續維護的軟件,還是僅僅是驗證完某個想法后就被丟棄了。

向前走

我們想把開源社區建設得更好,因為我們從現有的開源軟件中受益良多。為了使我們的開源項目的狀態更清晰,我們對此來了一次“春季大掃除”。我們的開源項目將會被清晰地標注為:維護中、停止維護、已歸檔。

維護中

維護中是默認的狀態,所以不會特別標注。維護中,說明我們要么內部就在使用開源版本,要么正在把內部版本的修改同步到開源版本中。我們已經對我們的 部署工具 完成了這項工作。我們正在處理所有維護中的項目:對pull request進行合并或給出我們的看法,答復問題報告,以及添加新功能。

停止維護

我們也有一些項目已經幾年沒有公開更新過了。通常這是因為雖然我們想在內部也使用開源版本,但我們不能拖慢開發周期,我們難以找到兩全的辦法。但是,代碼還是在那兒,依然可以視作是對某種創意的展示,詮釋我們如何解決某個問題。或者,這原本是一個研究項目,但我們放棄了它,因為長久以來它都無法解決我們的問題,但是我們仍然希望展示我們曾經做過的嘗試。那些項目就保持原樣放在那兒,很有可能不會再有更新。我們會關閉問題報告,不再接受pull request,并且會在README中清楚地說明此項目僅作展示之用。

已歸檔

我們開源的項目中也有一批是我們在特定時期用過的,但是目前已經不再使用。很可能我們對某個問題找到了更好的解決方案,或者是老方案從長期來看并不能真正解決問題。在此類情況下,我們會往主分支上提交一個commit來刪除所有的代碼,僅留下README用于描述項目及其狀態。README會指向源代碼刪除前的最后一個commit。這樣代碼不會真正消失,但項目的狀態卻明白無誤。此類項目同樣會關閉問題報告和pull request。

除了這些歸檔的項目外,我們也在某些時間fork了別人項目,里面有些我們也不再維護,我們也在著手清理這些項目。

結束語

在過去幾年中,我們在維護開源項目方面學到了很多。我們想分享的最大教訓就是,一定要在內部直接使用軟件的開源版本,這很重要,有可能其他開源開發者也想使用此軟件,這可以給他們帶來更好的體驗。我們一直在努力學習,力求把每件事情做得更好。如果你在等我們對某個問題做出回應,或合入某個pull request,希望本文能幫助你深入理解當下在發生什么,為什么等個回復這么久,并且我們希望新的項目分類方式能幫你梳理清楚我們開源項目的狀態。我們希望成為開源世界的典范,我們希望以一種眾人受益的方式來給予回饋。給項目做一次春季大掃除總是一件好事,即便當下已是夏季。

你可以在推ter上關注 JaredDaniel

https://codeascraft.com/2015/07/09/open-source-spring-cleaning/

本文由作者Daniel Schauenberg發表在codeascraft.com上: Open Source Spring Cleaning 。經授權,在InfoQ中文站翻譯共享。本文在 Creative Commons Attribution-NonCommercial-NoDerivs 3.0 United States License 許可證下發布。

 本文由用戶 npde 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!