天天看點

關于阿裡的開源戰略,這裡有你想知道的一切

開源目前已經成為全球it 界和網際網路界一緻推崇的文化和戰略,而阿裡巴巴作為國際頂級的網際網路企業之一,在開源方面也一直秉持堅定而熱忱的态度,積極地将其一些成熟或發展中的産品和技術以開源、開放的态度回饋到社群。據目前已知的資料,阿裡巴巴(以下簡稱阿裡)已經貢獻了上百款軟體項目,其中去年到現在就開源了三十個左右的項目,得到了開源界和業界積極關注和參與,其中不乏重量級的開源項目。

不過,對于阿裡的開源舉措,業界也有一些不同的聲音,比如有人認為阿裡的開源項目虎頭蛇尾,往往開源後就置之不理,活躍度走低,缺乏進一步的維護;也有人認為阿裡的開源項目實際并沒有得到社群的廣泛參與和認可,更多還是阿裡自身的員工在進行維護,社群并沒有對這些項目提供有力的貢獻,也沒有衍生出重要的分支項目。

為了對中國企業在開源方面的情況進行深入的了解,進而對開源和企業之間的關系做一些定性、定量的分析,那麼,讓我們來具體分析一下阿裡高調開源幾年以來的開源項目的發展情況。說明:我們本次的分析僅以阿裡在 github 上的開源項目的公開資料為基礎,并不涉及到阿裡在其它開源社群和代碼托管網站的情況。

阿裡團隊在 github 旗下的項目數量和登記成員數在國内網際網路公司來說,已經不算少了,雖然據統計,阿裡團隊所獲得的星标star數全球排名第12位,國内排到了第一,但是和國際上的一些開源領袖公司相比,還有較大距離。(注:如果累計 ant-design 團隊項目的星标數,由于該團隊旗下的開源項目包括了去年的一個重點項目 ant-design,其排名應該可以更高一些。)

在本文中,我們将從這些開源項目的各個次元的資料來進行分析,主要關注于以下兩個方面:

項目的活躍程度

社群的參與程度

在分析之前,我們需要先了解哪些資料對我們來說是重要的,以及其背後反映的意義。

在 github 上開源的項目有那些名額呢?可以反映出什麼資訊?我們認為可以從以下幾個名額進行分析:

項目的送出commit數量、分支branch數量、釋出release數量:這代表了項目代碼的活躍程度,其中送出數量是主要名額,而分支數量和釋出數量雖然也可以側面反映出代碼的活躍程度,但是更多是不同的相關項目管理方式導緻的。

項目的拉取請求pull request(pr)數量、貢獻者contributor數量、問題issue數量:這代表了項目參與者的參與程度,其中拉取請求數量是主要名額,而貢獻者數量和問題數量與之正相關,可以反映出貢獻者分布密度和項目回報速度。

項目的複刻fork數量、星标star數量、關注watch數量:這代表了項目的受關注程度,其中複刻數量是主要名額,因為複刻一個項目往往代表了社群更多的參與意願,并進而通過送出拉取請求、問題等進行參與,這也是社群生态發展不同的下遊衍生版本的必由之路。而星标數量和關注數量,現在由于逐漸蔓延的 github 營銷潮流,其水分比較大,可以作為輔助名額參考。

項目的持續時長和最後更新時間。

阿裡開源的項目很多,但如同大多數企業組織一樣,各個項目的活躍程度大相徑庭。有的活躍項目得到了來自社群上萬的星标star、數千的複刻fork乃至上千的拉取請求pull request,項目本身也擁有數萬的送出commit乃至幾十個分支branch;而有的項目則資料寥寥,基本上陷入沉寂,其中有一半數量的項目最後送出于一年前,甚至還有 5 個項目的最後更新于 5 年前——基本上可以判定已經停止維護。

在統計時,我們發現一種情況,複刻或衍生的上遊項目,會将上遊的送出數量、分支數量等資料繼承下來,是以在針對阿裡對該項目的貢獻和發展方面進行分析時,應該将這部分資料減去。這樣的話,在阿裡團隊名下列出的一些知名項目,如複刻自 cocoapods/specs 的 specs 項目擁有 14 萬之多的送出數,但是阿裡本身并沒有對其複刻的版本進行任何送出;又比如阿裡的重點項目 alisql 是基于 mysql 官方版本的一個衍生版,是以其近 10萬的送出數中絕大部分是 來自mysql 發展多年來積累下的送出數量,本身阿裡在将其衍生為 alisql 之後,隻有 52 個送出數;同樣 alisqlbackup 的 10 萬多個送出數也是來自于上遊項目,阿裡幾乎沒有做過更新送出,并且也停止維護兩年了;是以,這些項目在統計時,我們會從阿裡複刻或衍生該項目時開始計數送出數量。

當然,我們知道,僅僅以送出數來評估一個項目的活躍度是片面的,比如說,上述的 alisql 雖然隻有 52 個送出,但是其由于開發模式和審慎态度的緣故,往往一次送出的代碼量比較多,其中某次送出行數高達 5 萬多行,而對上遊 mariadb 的貢獻雖然隻有三次送出,但是已經占到了總代碼量的 1%。鑒于此,我們會不僅僅從送出數,還從複刻數、問題數等多個方面來綜合進行觀察。下表是阿裡旗下開源的送出數前十的項目:

關于阿裡的開源戰略,這裡有你想知道的一切

我們可從上表中看到,阿裡旗下開源的項目送出數最多的是 ant-design 項目,這是螞蟻金服旗下推出的一種 ui 設計語言,在開源兩年來,得到了快速的發展。我們可以看到,其送出數約計比第二名高過 1/3,其中社群送出數是成員送出數的兩倍,并且日均送出數也達到了很高的水準。

第二名是 weex 項目,這是一個用于建構跨平台移動應用 ui 的架構,前些時間剛剛捐獻給 apache 基金會孵化管理。項目開源于 2016 年底,目前已有近 6 千送出,其中社群送出數量是阿裡員工的送出數的 6 倍!而且,日均送出數竟然達到了 14.52 個,其發展速度還要超過了第一名 ant-design。這代表了社群強烈的參與意願,并且該項目得到了社群的廣泛應用。

第三名是 druid 項目,這是一個是“為監控而生的資料庫連接配接池”,自稱“是 java 語言中最好的資料庫連接配接池”。采用 java 開發,也是阿裡重點發展的項目之一,2011 年底開源釋出,目前已經有 4 千餘個送出,代碼疊代很快。而且,非阿裡員工的送出數量是阿裡員工的送出數量的三倍左右。應該說,這些排名較高的項目的活躍度都不錯,其中隻有一個項目是更新于半年前的,其它的項目都在近期有不同程度的更新維護。

從上面的項目的送出來源看,送出數最高前三名來自社群的送出要超過了阿裡員工的送出,甚至遠遠超過,這說明這三個項目得到了社群的普遍支援,我們在後面分析複刻情況時也可以看到,這兩個項目的複刻數都很高。而之後排名的項目,卻呈現了另外一種趨勢,即來自阿裡員工的送出數要超過或遠超來自社群的送出數,相應的表示出這些項目在社群的受歡迎程度要差一些。從整體的這些項目來看,各個項目的送出數明顯呈長尾樣分布:

關于阿裡的開源戰略,這裡有你想知道的一切

項目送出數分布

而且,我們可以看到,從送出數排名第 8 位的項目開始,送出數呈斷崖式下降,但是整體的以正态分布呈現:

關于阿裡的開源戰略,這裡有你想知道的一切

項目送出數分布(去除前 7 名)

從上述分布上來看,阿裡旗下的開源項目的發展情況正常,既有活躍項目,也有消亡項目。我們判斷,阿裡對其開源項目的管理處于自由生長狀況,并沒有從統一管理的層面來督導、輔導各個開源項目的發展,也沒有對陷入消亡的項目進行進一步處置和收尾,也就是說,一些爛尾的項目并沒有進行妥善處置。為了驗證這個結論,我們來看一下阿裡旗下開源的項目的最近更新時間。

抛開一些項目内的無關緊要的更新(如修訂一些 readme,pom.xml 等),我們發現這 133 個項目當中有 60 個項目更新于一年前,其中更新于 4 年前及以上的有 30 個。可見有不少遺留項目缺乏處置。當然,根據上圖也可以反映出近年來阿裡的開源項目整體的發展趨勢要超過過去幾年。

github 開創性的使用了拉取請求pull request(經常簡稱為 pr)的方式來為開源項目提供社群協作支援。無論是項目成員還是外部合作者,以及偶爾的關注該項目的貢獻者,都可以通過發起拉取請求來給某個項目送出更新檔,項目維護人員可以對該拉取請求進行稽核,如果稽核通過,就會“拉取”該合并請求到項目中,進而将貢獻者送出的代碼融合到項目代碼之中。

作為社群貢獻者,對一個項目發起貢獻的主要方式就是給該項目發起拉取請求。雖然也有不少項目要求幾乎所有成員都必須以拉取請求的方式來送出其代碼,而不允許直接送出到倉庫中,但是通常而言,一個項目的拉取請求數可以從側面反映出一個項目的社群(外部)參與程度。而對一個項目作出貢獻的方式不僅僅是貢獻代碼,還有對項目中發現的問題、缺失功能所送出的報告也是一種重要的方式,這些資訊在 github 中統一被稱之為問題issue。

每個拉取請求和問題,都會被項目維護者進行稽核,并進行處置。比如對于拉取請求,可以接受、可以拒絕;對于問題,可以回複、也可以忽略/關閉。一般來說,活躍的項目其拉取請求數量和問題數量也會越大,但是我們這裡不去做這些數量的排名,我們感興趣的是,這些拉取請求和問題中,開放和關閉的比例情況。如下表,我們列出了拉取請求未接納比例最高的前十名(這裡略去了拉取請求數低于10的項目):

關于阿裡的開源戰略,這裡有你想知道的一切

我們可以看到,這些項目中拉取請求未接納的比例最高的有的高達 70% 以上,當然,另外一方面,我們也看到了這些項目的拉取請求數都不高。這可以反映出該項目的社群參與積極性不高。 但是幾個送出數比較高的項目,除個别情況外,其拉取請求未接納的比例都很低: 

關于阿裡的開源戰略,這裡有你想知道的一切

這說明這些項目的活躍不是沒有道理的。究竟是由于社群參與積極性不高導緻的未接納比例高,還是反之,我們認為或許是彼此互相影響導緻的。再讓我們來看看問題數:

關于阿裡的開源戰略,這裡有你想知道的一切

我們可以看到,有些項目,居然所有的問題都沒有處置,比如 oceanbase,甚至連被寄予厚望的 dubbo 和 datax 也有相當比例的問題沒有解決——難怪有人對阿裡開源項目爛尾頗有微詞。那麼我們同樣來看看幾個活躍項目的問題解決比例:

關于阿裡的開源戰略,這裡有你想知道的一切

我們可以看到,這些活躍項目的問題解決比例還是比較高的。

下面我們來看看這些項目的複刻數。前面我們說過,開源項目的複刻數代表了(外部)社群參與該項目的積極性。因為複刻一個項目的意圖可能有以下幾種:

保留(當機)該項目目前的代碼以做将來之用,以避免該項目出于種種原因被删除、關閉。

要對該項目送出更新檔(拉取請求),需要複刻一份,完成修改後發起拉取請求。

意圖衍生該項目,通常是為了發展不同的方向。

隻是為了友善找到該項目?可能更習慣這種方式,而不是加以星标、關注等方式來标記該項目。

無論是哪種情況,我們可以看到,複刻這種行為基本上可以代表複刻者對該項目的積極參與意願。以下是阿裡開源的項目中複刻數最高十個項目:

關于阿裡的開源戰略,這裡有你想知道的一切

從上面我們可以看到,複刻數最高的項目是一個名為 dubbo 的分布式、高性能的 rpc 架構,是阿裡巴巴 soa 服務化治理方案的核心架構,每天為 2,000+ 個服務提供 3,000,000,000+ 次通路量支援,并被廣泛應用于阿裡巴巴集團的各成員站點。dubbo 的複刻數遠高于第二名的 fastjson,但是其相應的拉取請求數和問題數卻不相稱的低——這代表了什麼?社群或業界覺得這個項目有價值,但是鮮于應用場景,也缺乏參與回饋的能力(或動力?)。

而第二名,fastjson 卻顯著的問題數比較高,這表明社群在大量使用該項目,是以産生(發現)的問題或需求也比較多。但是其拉取請求數卻沒有與問題數相應的提高,側面說明了該項目本身參與開發的難度較高。第三名 druid,是一個 java 的資料庫連接配接池,其問題數和拉取請求數都很高,我們認為它的活躍度和社群參與程度都很健康。第四到六名 ant-design 、rocketmq 、 weex 都是阿裡重點發展的項目,并且後兩者都捐贈給了 apache 基金會孵化管理,而且 weex 的發展更是後來居上,就拉取請求和問題數來說,weex 的發展更健康一些。

那麼,結論呢?可以大緻的看出,複刻數較高的項目其日均複刻數也存在較大的波動,說明其發展速度不一,但是複刻數可以作為一個項目是否健康發展的名額之一,但是該名額應和拉取請求數和問題數綜合來看。

對 github 上的開源項目的觀察久已有之,但是人們一般習慣于按項目的星标數來進行排名。不過,現在随着 github 的日益流行,星标這種成本低廉簡單操作已經逐漸失去了作為排名依據的意義,以至于一些 markdown 項目(也稱為 awesome 項目)雖然并無代碼,僅僅一篇以 markdown 格式送出的資源大全,也往往取得了不錯的星标數。我們認為,對于開源項目,尤其是特指代碼方面的開源項目時,其星标數并不應該與那些 markdown 項目進行橫向比較。當然,同樣作為開源代碼項目,星标數還是有一定的參考價值的。我們來看看阿裡旗下開源項目的星标數前十的項目:

關于阿裡的開源戰略,這裡有你想知道的一切

啊哦,不出意外,這些項目基本上還是和複刻數排名比較相近。weex 在該項排名中又取得了第一。令我們比較感興趣的是,排名稍後的幾個項目的開源時間并不算長。讓我們來以日均星标數排名看看,這回我們多取幾名:

關于阿裡的開源戰略,這裡有你想知道的一切

發現什麼沒有?日均星标數的前幾名,或者說大多數都是相當年輕的開源項目,其星标增長速度要讓幾個已經開源了幾年的項目瞠目其後。我們判斷,這說明阿裡現在在開源方面已經處于高調宣傳模式,對于新開源的項目,都有一波持續和明确的傳播意圖。但是我們認為,作為一家商業企業,這也代表了阿裡已經将開源作為一個主流戰略、也是其企業文化和品牌形象推廣的重要方面,那麼是不是代表着阿裡以後的開源項目的支援力度和維護熱情會更高、更持久呢? 

以上,我們通過對阿裡旗下開源的多個項目的各個名額進行了橫向和縱向的比較,從中也觀察到了一些有趣的現象。但是這些資料并不能完全的反映出一個一緻的結論,隻是,從整體來看我們認為,阿裡巴巴旗下的開源項目,正在以更快、更主動的方式在發展,至于說是否還會出現之前的那種開源之後被抛棄的情況,下定論還為時尚早。這或許要看阿裡的開源委員會是否能夠制定更宏觀的發展戰略而定。

不過,無論如何,我們欣喜的看到,阿裡在踐行開源理念、積極主動的擁抱、回饋開源方面,取得了矚目的成就。我們也期待國内的更多網際網路企業、it 企業可以在開源方面有更多的實際行動,讓中國這個世界上除了美國之外第二大的網際網路大國在開源方面也取得相應的成就。

<b>來源:linux中國 作者:wxy</b>