天天看點

開源項目的最佳實踐

來自github的phil haack在channel 9網站上舉辦了一次座談會,專注于談論開源項目的最佳實踐。

本次會議的四位與會者都是開源項目的維護者,包括來自微軟拉美區的聽衆布道經理(audience evangelism manager)carlos rojas,用于建立松耦合、可維護、易測試的xaml應用的prism架構的作者brian lagunas,參與了多個開源項目工作的david paquette,以及适用于c#及vb的分析器庫codecracker的維護者carlos dos santos。

haack為與會者所提出的第一個話題是:對于那些希望加入自己的開源項目的開發者們,他們有哪些期望?lagunas認為,送出issue是一種 與項目的維護者開展對話的重要方法。rojas則指出,對于希望為項目作出貢獻的開發者,首先浏覽一遍未解決問題的清單也非常重要。他們兩位都提到了一種 非常實用的相關實踐,即為某些未解決問題打上一個“随意領取”的标簽,願意參與這個項目的開發 者都可以領取這些問題。現在甚至還出現了一個“随意領取”的網站,那些潛在的貢獻者們可以在此查到來自多個開源項目的各種可“随意領取”的未解決問題。dos santos表示,對他來說,重要的是貢獻者們能夠為項目送出及修複bug,并且切實地用到這些項目。

所有與會者們都認為,貢獻者應當避免将代碼直接送出并推送至master分支。正确的做法是送出一個pull請求(pr)。lagunas談論了這 方面更多的細節内容,他所期望的方式是貢獻者能夠建立一個屬于自己的分支,在其中實作某些特性或進行bug修複,然後添加相應的測試代碼,最後再送出 pr。到了适當的時機,這個pr将通過某種集中式的篩選操作進行測試,一旦它通過了所有的測試,維護者就将組織一次複審,以確定其中的代碼變更符合項目的 标準。

dos santos表示,為了幫助貢獻者們,保證他們的pr符合項目的标準,可以在項目的根目錄中加入一個contribute.md檔案,這種做法非常實用。 haack也指出,如果項目中已有contribute.md檔案存在,那麼在貢獻者送出pr時,github就會自動顯示一條資訊,提醒貢獻者去閱讀該 檔案。lagunas特别強調了仔細閱讀contribute.md檔案的重要性,因為它有些時候會包含一些重要的内容,而這些内容并不局限于代碼标準。 舉例來說,prism項目要求貢獻者通過一個永久的、不可撤消的貢獻者許可協定(contributor license agreement),放棄所貢獻代碼的所有權,将其轉交給該項目所有。如果貢獻者本身就受雇于某些公司,那麼這一點就變得尤為重要,因為說不定有貢獻者 會回頭宣稱他對于該項目擁有知識産權。總的來說,與會者都認為,項目的許可條款必須明确定義,這一點十分重要。paquette還特别強調,這種重要性不 僅限于貢獻者,同時也包括項目的潛在使用者。

haack又将讨論的方向轉回了原來的話題上,即如何確定pr不會對項目産生破壞。lagunas提到了适用于.net平台上的開源項目的一個免費服務appveyor,可以通過該服務對每個pr進行建構與測試。haack進一步表示,隻要你的github項目中沒有什麼特别古怪的問題,那麼appveyor通常都能夠正确地處理項目的各種依賴。

另一個讓人感興趣的話題是項目的文檔。rojas表示,在項目中最低限度也要提供一個readme.md文檔。haack以prism的文檔作為示 例,指出編寫項目文檔的正确方式,即通過readme檔案說明總體情況,然後再通過其它檔案描述各種細節。rojas還提到了github所提供的另一個 工具wiki,他認為可以通過使用wiki有效地建立文檔。

随後話題轉向了開源的文化。開源社群在這方面存在着一個問題,如果貢獻者出了某些差錯,有時可能會換來一些粗暴的回應。與會者們都認為:應當以良好 的态度對待貢獻者,認識到這些貢獻者們的出發點是幫助這個項目。尤其某個pr或許是這個開發者第一次為開源項目貢獻代碼,那麼項目維護者的溝通方式就可能 會直接影響到這名開發者今後看待開源項目的态度。

最後,所有的與會者們都表示,貢獻者們應當努力嘗試克服膽怯的心态,去尋找那些能夠點燃自己激情的項目。不要忘記,開源的核心是協作。有許多人對于他們所維護的項目充滿了熱情和感情,尤其是看到有人在實際使用他們的項目,或是為這些項目作出貢獻時。