開源軟體的開發是如何進行的?
比如工作是如何分配到每個人的?如何才能加入到開源軟體開發的隊伍中去?程序員之間如何溝通(僅僅通過互聯網?)?等等你可以想到的開發流程中的一切。
爪機操作,我先簡單說說,改天再編輯。
典型的開源軟體通常是由一個人開始創作的,所有的規劃跟思路都在一個人的腦海中,當這個軟體做到差不多能用的時候,換句話說就是能推出 0.1 版本時,通常會在一些公開場合發布之。
如果這個軟體在當前這個狀態下非常吸引人,那麼這個時候就可能會有感興趣的用戶,用戶之間會有傳播,有了足夠多的用戶,就必然會有一部分具有開發能力的用戶,他們可能從改進某個功能或者解決某個 bug 開始,慢慢走進或者融入這個開發團隊。——而這個時候,這個軟體相關的團隊和社區就開始建立與壯大了。
當然更多的時候,很多開源軟體是沒有什麼人問津,那麼這個項目仍然保持單人項目狀態,或者某些技術門檻較高的開源軟體,雖然有很多人關注和使用,能加入開發的卻不多。
下面來回答一些問題:
怎麼分配任務。開源軟體不存在分配任務一說,參與者憑的是興趣跟信念以及自己的需求。通常來說,一個參與者)可能會根據自己的興趣去進行修改,或者根據自己的需求,當一個參與者對某個領域或者模塊特別熟悉時,可能會被安排負責解決某個模塊中報告的 bug,僅此而已,所以通常 bug 可能被分配,但功能很少被分配,全憑自己的興趣。
如果你是項目發起人,要認識到其他開發者是來滿足開發者自己需要的,而不是來幫你做事的,他們對你沒有義務。這種需求有各種層次,例如社會尊重需求跟自我實現需求屬於較高層次,但最基本的可能只是因為他們對某個環節感興趣以及需要某個功能被改進為符合自己需求,因而,功能性任務一般是由每個開發者自發產生,而非被分派。
再來說說溝通,通常來說,常用的溝通方式是郵件列表,當然,偶爾也會有約定時間開irc會議的做法,如果所有開發者都是中國人,也有喜歡用qq群交流的,但對於多數的跨國項目,郵件列表是標準溝通方式,而修改日誌跟問題跟蹤系統往往都會跟郵件列表形成某種聯動,有非常完備全面的體系使得郵件列表被高效的用於開發。
怎麼加入? 其實與其說加入,不如說是融入,當你認為自己屬於一個項目,你就屬於一個項目了,但你如果希望使自己融入一個團隊,就得熟悉其運作的方式,你關注一個項目,就可以幫一個項目提交新功能或者解決bug,經常提patch,質量受到管理者的認可,就可以申請版本管理庫的提交許可權,此後就可以直接提交,大體上是如此。git管理,一般用Githubfounder建立項目,其他人可以fork,修改代碼後提個Pull Request,review沒問題後,merge到master分支中
git等分散式版本控制系統,合作開發
git/svn+bugzilla+irc+maillist
版本控制工具就是解決多人協作開發的,像svn,git。
你可以checkout,clone,fork一個項目,自己做一些修改,然後commit,會有人審核,提交的多了,就有可能把你納入開發組,甚至核心開發組。 另外,大的開源組織搞的開源軟體,背後都是有大公司支持的。國外 apache有ibm和oracle,國內這兩年阿里系也有好多開源軟體。推薦閱讀:
※為什麼很多開源軟體都用 C,而不是 C++ 寫成?
※軟體開源後,能否有開源和商業化兩種授權?
※如何看待國服我的世界裡修改了 forge卻 不開源,無視 LGPL 協議這一行為?
※如何看待陳皓在微博上對閉源和開源軟體的評論?