對于開放源碼軟件協同開發原理的經典論述來自開源社區之一的Eric Redmond的《大教堂與市集》一文,在該文中作者形象地將傳統的嚴格管理的軟件開發活動比喻為構筑大教堂的行為,而將分布于Internet之上的開放源碼社區的協同開發活動則看作是市集行為,作者根據親身經歷系統地論述了市集型開發的基本方法和哲學問題,闡釋了開放源碼社區成功的內在原因,對于傳統軟件開發不無借鑒之處,比如“早發布、常發布、聽取用戶的建議”、“把用戶當做協作開發者和Beta測試人員”、“聰明的數據結構和笨拙的代碼要比相反的搭配工作的更好”、“好的設計不是再也沒有什么東西可以添加了,而是再也沒有什么東西可以去掉”、“好程序員知道該寫什么,偉大的程序員知道該重寫(和重用)什么”等等。
目前,人們對于基于開放源碼的Internet協同開發實踐還缺乏深入研究和理解,但是已經得到越來越多的軟件工程人士的關注,并取得一定的研究成果。一個軟件工程研究小組在過去5年中深入研究了幾個大型的開放源碼系統的體系結構和進化過程,包括Linux、GCC、VIM、Mozilla和Apache,發現他們與類似的商業系統之間表現出令人感興趣的不同之處,比如,開放源碼軟件的體系結構通常是可瀏覽的以允許開發人員進行交互,對于那些可能阻礙程序理解(因為程序員通常是分布在Internet上各個角落互相獨立的工作)的體系結構部分進行特殊聲明;從同類的開放源碼軟件如Web服務器中可以提取其共性的參考體系結構,而在商業軟件公司中卻難以通過Web服務器體系結構獲得幾種不同的實現;開放源碼軟件的體系結構和開發模式是導致其超線性增長的主要因素,并且被盡可能設計的易于移植,其發行版通常不是針對特定平臺,而是將各種平臺的共性抽象到一個發行版中,通過配置工具來幫助構建系統。
另外,針對如何借鑒開放源碼項目的經驗用于指導商業軟件項目也有相關研究成果,該項研究表明,盡管完全利用開放源碼開發模式來代替傳統商業軟件開發模式目前看來還不太可能,但無疑可以相互借鑒經驗教訓而獲得收益。研究人員認為,一些可供商業軟件項目借鑒的開源項目經驗包括:
人員組織——開源項目通常由很少的核心成員完成多數開發和升級任務,這一點與商業軟件開發類似,但差別在于這些任務是如何在核心小組內分配的。開源項目通常是自發形成,職責的分配是基于對開發人員如何看待他們在項目中的角色的推理而確定,并不是硬性指派產生,這一點無疑對于商業軟件的管理具有借鑒意義。
非正式交流——在Internet協同開發活動中非正式交流對于項目成員間的協調極其重要,郵件列表、論壇等是常用工具,無論開發人員在文化、地域和時區方面是否存在差異。商業軟件應借鑒這種做法,而不必拘泥于嚴格的、形式化的交流渠道。
增強的用戶支持——許多用戶都同意這種觀點,即多數商業軟件公司在進入售后支持階段時可能面臨悲慘的失敗命運。而開源項目的用戶支持工作卻有良好成績,因為大量的用戶愿意提供關于開源產品的反饋信息。因此,商業軟件項目應增強用戶之間、用戶與開發者之間的交互,從而獲得改進的售后支持以及更有意義的錯誤報告。
顯然,隨著人們對于基于開放源碼的Internet協同開發模式的不斷研究和深入理解,必將對未來的軟件工程實踐產生極其深遠的影響。以下按照傳統軟件工程領域的常規做法,對于開放源碼軟件的協同開發活動總結出所謂“佳實踐”,以增進讀者的感性認識:
(一)技術交流
軟件開發人員需要花費大量時間用于相互之間的通訊交流,清晰和高效的技術交流對于維持團隊間的同步和允許掌握關鍵知識的個人在需要時利用其知識都是必需的。開放源碼社區的一個基本原則是技術交流應當在公共論壇中進行,郵件列表是開放源碼交流的基石。不僅如此,開放源碼項目需要在精確交流技術細節和小組決策方面得到支持
(二)版本控制、文檔管理和發行
任何軟件開發項目都需要版本控制,開放源碼項目在這方面更是需要強大靈活的支持,以使得許多并行的開發人員可以同時工作在相互重疊的文件集上。開放源碼項目也需要設計文檔、技術文檔和用戶文檔方面的標準模板,并需要一個良好組織的Web站點來發行這些文檔。但是,開放源碼項目的本質要求這些文件可供全世界訪問,同時日常管理成本則被小化,維護工作被分配給整個開發社區中的成員。