六個開源軟件開發(fā)的“潛規(guī)則”
你想成為開源項目中得意滿滿、功成名就的那個人嗎,那就要遵守下面的“潛規(guī)則”。
正如體育界不成文的規(guī)定一樣,這些規(guī)則基本上不會出現(xiàn)在官方文檔和正式記錄上。比如說,在棒球運動中,從比分領先時不要盜壘,到跑壘員跑了***時也不要放棄四壞球保送。對于圈外人來講,這些東西很難懂,甚至覺得沒什么意義。但是對于那些想成為 MVP 的隊員來說,這些都是理所當然的。
軟件開發(fā),特別是開源軟件開發(fā)中,也有一套不成文的規(guī)定。和其它的團隊運動一樣,這些規(guī)定很大程度上決定了開源社區(qū)如何看待一名開發(fā)者,特別是新加入社區(qū)的開發(fā)者。
按部就班,循序漸進
在參與社區(qū)之前,比如開放源代碼或者其它什么的,你需要做一些基本工作。對于有眼界的開源貢獻者,這意味這你需要理解社區(qū)的目標,并學習應該從哪里起步。人人都想貢獻源代碼,但是只有少量的人做過準備,并且樂意、同時也有能力完成這項艱苦卓絕的工作:測試補丁、復審代碼、撰寫文檔、修正錯誤。所有的這些不受待見的任務在一個健康的社區(qū)中都是必要的。
為什么要在優(yōu)雅地寫代碼前做這些呢?這是一種信任,更重要的是,不要只關注自己開發(fā)的功能,而是要關注整個社區(qū)的動向。
博聞強識,敦善不怠
當你在某個社區(qū)中建立起自己的聲望,那么很有必要全面了解該項目和代碼。不要停留于任務狀態(tài)上,而是要去鉆研項目本身,理解那些超出你擅長范圍之外的知識。不要只把自己的理解局限于開發(fā)者,這樣會讓你著眼于讓你的代碼有更大的影響,而不只是你那一畝三分地。
打個比方,你已經(jīng)完成了一個網(wǎng)絡模塊的測試版本。你測試了一下,覺得不錯。然后你把它開放到社區(qū),想要更多的人測試。結(jié)果發(fā)現(xiàn),當它以特定的方式部署時,有可能會破壞安全設置,還可能導致主存儲泄露。如果你將代碼視為一個整體時問題就可以迎刃而解,而不是孤立地看待問題。這表明,你要對項目各個部分如何與其他人協(xié)作交互有比較深入的理解。讓你的補丁填坑而不是挖坑。這樣你朝成為社區(qū)精英的目標上又前進了一大步。
粗枝大葉,自尋煩惱
代碼提交完畢后你的工作還沒結(jié)束。如果代碼被接受,還會有一些關于這些更改的討論和常見的問答,還要做測試。你要確保你可以準時提交,努力去理解如何在不影響社區(qū)其他成員的情況下,改進代碼和補丁。
和諧相處,助人助己
開源社區(qū)不是自相殘殺的叢林世界,我們更看重項目的價值而非個體的貢獻和成功。如果你想給自己加分,讓自己成為更重要的社區(qū)成員、讓社區(qū)接納你的代碼,那就努力幫助別人。如果你熟悉網(wǎng)絡部分,那就去復審網(wǎng)絡部分,用你的專業(yè)技能讓整個代碼更加優(yōu)雅。道理很簡單,***的審查者經(jīng)常和***的貢獻者打交道。你幫助的人越多,你就越有價值。
八面玲瓏,面面俱到
作為一個開發(fā)者,你很可能希望為開源項目解決一個特定的痛點。或許你想要運行在一個目前還不支持的系統(tǒng)上,抑或你很希望改革社區(qū)目前使用的安全技術(shù)。想要引進新技術(shù),特別是比較有爭議的技術(shù),***的辦法就是讓人無法拒絕它。你需要透徹地了解底層代碼,考慮每個極端情況。在不影響已實現(xiàn)功能的前提下增加新功能。不僅僅是完成就行,還要在特性的完善上下功夫。
糜不有初,鮮克有終
開源社區(qū)也有許多玩玩就算的人,但是承諾了就不要輕易失信。不要就因為提交被拒就離開社區(qū)。找出原因,修正錯誤,然后再試一試。當你開發(fā)時候,要和整個代碼庫保持一致,確保即使項目發(fā)生變化而你的補丁仍然可用。不要把你的代碼留給別人修復,要自己修復。這樣可以在社區(qū)形成良好的風氣,每個人都自己改。
這些“潛規(guī)則”看上去很簡單,但是還是有許多開源項目的貢獻者并沒有遵守。這樣做的開發(fā)者不僅可以為成功地推動他們自己的項目,而且也有助于開源社區(qū)。
作者簡介:
Matt Hicks 是 Red Hat 軟件工程的副主席,也是 Red Hat 開源合作團隊的奠基成員之一。他歷時十五年,在軟件工程中擔任多種職務:開發(fā),運行,架構(gòu),管理。