開源就是不斷的奉獻自己,除非它將你的業(yè)務先毀掉。但是,有太多的人先入為主,將各種偏見灌輸給你,諸如:開源有“毒”,開源根本無法賺錢之類的。這個時候,你只需要默默的,轉身看看那些成功的利用開源的公司即可。
互聯(lián)網(wǎng)的巨頭,即使如 LinkenIn,也是開源的“專家”,讓我們先過一遍 LinkedIn 的 GitHub 賬戶, 竟然是一家發(fā)布了 75 個開源項目的公司。而且其中有一些已經(jīng)是獲得巨大成功的項目了,有眾多的開發(fā)者和公司參與開發(fā)和使用。是的,沒錯,這就是 LinkedIn,外表光鮮的互聯(lián)網(wǎng)公司,主營的業(yè)務是招聘,標榜自己是“將全世界的專家聯(lián)系起來,讓他們更具生產(chǎn)力,并變得更加的成功。”
最近被各大公司釋放開源項目的新聞刷屏,Google 剛剛開源了人工智能項目、FaceBook 開源機器學習項目 等等,幾乎每周都有這些 IT “大鱷”們發(fā)布新的開源項目,令人目接不暇。 LinkedIn 也不甘示弱,近期又開源了其旗下項目 Amdry ,這是一款對象存儲系統(tǒng)。其實,LinkedIn 已經(jīng)悄然建立了一個世界級的開發(fā)者團隊,和開源社區(qū)緊密聯(lián)系,從開源中獲益、也反饋給社區(qū)。近來 LinkedIn 的工程副總裁 Igor Perisic 接受了 InfoWorld 的 Matt Asay 的采訪。讓我們來了解下 LinkedIn 是如何讓開源在公司中成功運轉的。
將代碼開放僅僅是個開始
任何人都可以將自己的代碼開放,事實上,類似 Sourceforge 上的很多項目經(jīng)年累月的都是只有很少的開發(fā)者,(80%的項目只有兩個人或更少的開發(fā)者)若是有人加入的話,那真是讓人興奮不已。即使是某個項目有多個貢獻者,但是絕大多數(shù)的項目有超過6個月的時間沒有更新。
事實上,僅僅從 LinkedIn 開源了75個項目這個角度來說,并沒有多大的意義,因為一個開源項目的意義在于能夠在多大程度上引起社區(qū)的興趣來,而這也是 LinkedIn 的開源故事的魅力所在。
正如 Perisic 所說:“數(shù)字通常只是表面的、虛的標桿,我們認為社區(qū)采用量才是成功的關鍵指標。” 舉例來說,Pinot和 REST.li,前者是一個實時的分布式的 OLAP 數(shù)據(jù)存儲,LinkedIn 用來交付可擴展的實時分析,后者是一 REST 的框架,在 GitHub 上都是超過一千個 Star 和 Fork 超過 200 的項目。
另外,一個開源項目最好的健康指標就是代碼倉庫的貢獻者數(shù)量和最后的更新時間,這兩個指標隨著時間的推移,也會為項目帶來更多的貢獻者以及更加頻繁的更新,形成一個正循環(huán)。但是對于社區(qū)來說,這還不夠。能夠得到業(yè)界標準的承認,才是 LinkedIn 的開源工作所取得的成績,比如得到 Apache 基金會的承認。
LinkedIn 有多個項目被 Apache 基金會當選為其頂級項目,諸如Kafka、Samza、 以及 Helix 。還有其它項目,如分布式鍵值存儲系統(tǒng)-Voldemort 正在變得流行起來。REST.li 就不用說了,已經(jīng)是非常受歡迎的開發(fā)框架了。總體而言,LinkenIn 通過在開源的努力已經(jīng)在開源項目上贏得了開發(fā)者的認同。
開源現(xiàn)在已經(jīng)是一個被濫用的詞匯了,舉例來說,太多的公司所發(fā)布的代碼是對自己有用的,然后希望出現(xiàn)大規(guī)模的社區(qū)圍繞著它來進行,然后希望這個項目對自己的公司更加的有用處。其實,開源基金會也是遵循著同樣的如此的以自我為中心的邏輯,所謂的開放治理其實是一種偽裝,不過依然是由單一的廠商控制最終的產(chǎn)出罷了。
當然,LinkedIn 也不是第一天就明白成為開源社區(qū)的典范的美德的。正如 Perisic 所描述的那樣:“從早期的失敗中,我們學到的重要的一課就是你不可以將一個項目扔給社區(qū),然后就不再創(chuàng)新了。還有另外重要的就是,一個開源項目的成功與否取決于你如何參與到社區(qū)中來。”
Perisic 進一步解釋,這也就是意味著,最為艱難的工作是在將剛剛將代碼開源后的那一段時間,舉個例子來說,LinkedIn 現(xiàn)在所總結的獲得社區(qū)的反饋非常的重要,以及確保項目的目標是容易理解的。這都是經(jīng)歷了很多才學到的。不過,只為重要的還是團隊的決定,如果你沒有準備好將正在進行的工作開源的話,最好是先不要將之開源了。
何苦呢?
這里就有很多人提出了疑問了,既然開放代碼已經(jīng)困難重重了,再加上來自社區(qū)增長的壓力,何必這么折騰了呢?Perisic 進一步點出了其中的奧義,雖然開源對于 LinkedIn 來說有讓價值在外部流動的好處,但是最重要的一個緣由還是開源社區(qū)能夠影響到工程師。
Perisic 說道:“我們發(fā)現(xiàn),在開源了項目之后的第一個結果竟然是我們開發(fā)者撰寫出了質量更好的代碼。將代碼放在自家的門后,只會成為鼓勵大家偷懶、馬虎,開源之后,則不一樣,這樣會激勵開發(fā)者們,使他們更加的細心。開源之后改進尤為明顯的有,文檔也有人寫了、代碼也更容易讓人閱讀了、而且非常注重每一次的測試結果。”
將代碼開放以后,也就意味著開發(fā)者們要接受批評--非常公開的批評。用 Perisic 的話就是:“當一位開發(fā)者將某一段代碼公開以后,也就是將自己的聲譽放在了網(wǎng)上,其本質上是一種類似同行評審。這樣就讓開發(fā)者們能夠激勵自己,將他們的代碼寫的更好、撰寫更完善的文檔、以及對于可重用性的重視。”
Perisic 又說道:“當然,開源也不僅僅是有利于代碼質量。它也能夠確保開發(fā)人員的視野不至于太過于狹隘,總是盯著自己眼前那點事。在一個開源項目下工作,也就意味著一起共事的不僅僅是自己身邊的同事,而且還有來自其它公司的開發(fā)者,這會幫助大家對于技術、業(yè)務方向的發(fā)展趨勢有一定的意識,而且可以幫助他們學習如何評估其他開發(fā)者的輸入。在這個多元的世界中,開發(fā)人員應該學習如何更加高效的來領導自己的團隊。”
最后,Perisic指出:”從公司的角度來看,這也有助于發(fā)展你的品牌工程,這證明在吸引新的人才和留住現(xiàn)有員工方面非常的有好處。”
“種”下你的代碼,讓它茁壯成長
Perisic非常認真的說:“我認為在創(chuàng)建一個項目并將之開源,應該像你的內部組織一樣去花時間用心去做。而且發(fā)布什么樣類型的代碼也是有講究的,是蠻重要的事情。這就是為什么有一些項目無法發(fā)展出強大社區(qū)的重要原因之一,因為所發(fā)布的項目是孤立的。孤立的代碼可能就是那些僅僅只是對本公司業(yè)務有用的代碼,如果它對于外部其它公司沒有任何用處的話,那么它失敗的可能性就會很大。”
但是有的時候,最好還是在現(xiàn)有的項目上去投入資源和人員,即使它們可能還沒有獲得大家公認的高度。獨立的開源項目是偉大的,但是如果它是在 Apache 的羽翼下而且也蠻有意義,那就不要猶豫了。如果已有的社區(qū)的開發(fā)者們渴望使用它,那就更不用有所猶豫了,趕緊將之開源!
既然這樣,那么問題又來了,當來自 LinkedIn 外部的代碼對于 LinkedIn 毫無用處的時候是怎么處理的?Perisic 是這么回答的:“你不能只是將項目放棄就不管了,你應該為原來選擇你的用戶提供相應的替代和遷移的途徑。” 這里舉個例子,LinkedIn 曾經(jīng)放棄了一個叫做 Camus 的項目,這個項目的功能是用于將數(shù)據(jù)從 Kafka 導入 HDFS 的一個管道實現(xiàn),放棄歸放棄,但是 LinkedIn 另外開發(fā)了一個叫做Gobblin的項目,LinkedIn 新的數(shù)據(jù)感應框架,也可以實現(xiàn) Camus 的功能,只是更加的完善,LinkedIn 此時做的決策就是,為 Camus 的用戶提供遷移的路徑。
總結以上所有,開源項目是需要付出巨大的時間來開發(fā)、精心培養(yǎng)、并時刻留意的。Perisic 非常明白其中的涵義,但是認為值得:“對于開源社區(qū)來說,再大的投入都是值得的,因為回報也是豐厚的。”