從28萬個開源項目中,我們能夠學到一些什么?
文/莊表偉
引子:開源項目那么多,哪些是值得我們學習的?
這里聲明一下,僅僅是學習一下:他們是用哪些工具,來管理自己的項目的?
開源項目多如牛毛,值得分析的項目也很多很多。從哪里入手呢?幸運的是,在開源社區,有一個著名的網站,過去叫 oloho,現在改名叫 openhub。在他的網站首頁,有這么四行字,以表明他們的數據庫是多么的全面、豐富:
Indexing 669,008 open source projects Connecting 3,742,793 open source contributors Tracking 679,761 source control repositories Counting 31,158,335,454 lines of code
這么說來,事情就變得比較“簡單”了,我需要把 openhub 的數據,都抓回來。
數據的篩選過程
具體的數據抓取過程,簡直不忍詳述(我的內心,幾乎是崩潰的)。總而言之,我只抓到了 289,631 個項目。openhub 雖然號稱自己索引了 66 萬的開源項目,其實這僅僅是他的數據庫里的最大 ID 號!當我順著這個 ID 一個一個的去抓的時候,有很多 ID,都已經被刪除了。
在抓取到的項目數據中,有兩個數值,特別值得參考:contributors(參與開發者的數量);users(該軟件的用戶數量)。相對而言,users 的數據,可以認為是一個樣本,即該開源項目的所有用戶中,愿意并且知道該如何來 openhub 點擊I use this的人。因此,即使是排名第一的 Firefox,在 openhub 也只有 13158 個用戶。考慮到 Firefox 的用戶數,已經超過 5 億(來源于維基百科英文版),因此,我們相信這個數據僅僅是一個 4 萬分之一的采樣結果。
隨后,我觀察了這 28 萬多個項目的 users 數據與 contributors 數據,頓時驚訝的發現,絕大多數項目,都小的可憐,用戶也少得可憐。
當我以“select count(*) from projects where contributors>30”查詢時,只搜到了 1662 個項目... 當我以“select count(*) from projects where users>30”查詢時,只搜到了 1260 個項目... 當我合并以上兩個條件查詢時,只搜到了 335 個項目。 再從這 335 個項目中,排除掉最近一年已經不再有活動的項目,于是只剩下了 331 個了。
三個感想
- 成功的開源項目,真是鳳毛麟角
- 絕大多數開源項目都是少數人開發的小項目
- 這 331 個項目,也許可以作為我們的重要參考
第一個問題:他們用什么配置庫?
這是 331 個項目,使用配置庫的情況(有些項目,同時使用多種配置庫),有兩個現象值得注意:
- 接近 92% 的項目,已經在使用 git——git 的統治地位,已經無可動搖
- 只有 53% 的項目,在使用 Github——那些用 git 卻不用 Github 的項目,是什么原因?
通過數據來分析:是否使用 Github 與項目創建時間的關系
通過這個圖,可以看出兩個現象:
- 越是新創建的開源項目,hosting 在 Github 上比例越高
- 越是新創建的開源項目,事實上成功的也越多(當然,2010 年以后的數量銳減,我們懷疑是好酒也要陳釀的原因)
通過數據來分析:是否使用 Github 與項目代碼規模的關系
由于不同的開源項目,代碼行數差異巨大,因此我們只能以 log (col)對數結果,來做區間劃分。可以看到一個非常明顯的趨勢,當然代碼行數超過 10 萬行以后,代碼部署在 Github 上的項目,就開始明顯下降,直到為0。
總結:是否使用 Github,越是新的項目越愿意用;越是大的項目越沒法用。
第二個問題:他們用什么來管理 issue?
排名前五的工具中,Github:91 個項目;Bugzilla:81 個項目;JIRA:43 個項目;Trac:20 個項目;另外還有 9 個項目,完全是在 maillist 里“管理”issue 的。
一共有 39 種不同的工具,另外還有 6 個項目,我們無法了解他究竟是用什么來管理的。
簡單的來看:
- Github 已經占據統治地位
- Github 的占有率僅僅 27%。
- Bugzilla 也算老而彌堅
- 有很多項目,在選擇自己的工具
通過數據來分析:使用的 issue tracking 工具與項目創建時間的關系
1990 年之前創建的項目,其中有一個已經開始使用 Github 了。但是,這僅僅算是個案。更加明顯的趨勢是:越是新的項目,越是傾向于采用 Github 管理自己的 issue。
相對而言,其他各種 Issue Tracking 工具的比例,都在下降。
通過數據來分析:使用的 issue tracking 工具與項目規模的關系
隨著用戶數量的增加,我們猜想:issue 的數量與復雜度,也會逐漸增加。可以看到這樣的趨勢:Github 的使用率,也在不斷下降。
總結:是否使用 Github 來管理項目的 issue,越是新的項目越愿意用;越是大的項目越沒法用。
尚未完成的分析:
- 開源項目使用的 CI 工具的情況
- 開源項目使用的 Code Review 工具的情況
- 開源項目使用的文檔類工具的情況
- ......
主要還是工作量太大了。。。對這個分析有興趣的同學,可以與我聯系,咱們可以一塊來干。