開源就是不斷的奉獻自己,除非它将你的業務先毀掉。但是,有太多的人先入為主,将各種偏見灌輸給你,諸如:開源有“毒”,開源根本無法賺錢之類的。這個時候,你隻需要默默的,轉身看看那些成功的利用開源的公司即可。
網際網路的巨頭,即使如 linkenin,也是開源的“專家”,讓我們先過一遍 linkedin 的 github 賬戶, 竟然是一家釋出了 75 個開源項目的公司。而且其中有一些已經是獲得巨大成功的項目了,有衆多的開發者和公司參與開發和使用。是的,沒錯,這就是 linkedin,外表光鮮的網際網路公司,主營的業務是招聘,标榜自己是“将全世界的專家聯系起來,讓他們更具生産力,并變得更加的成功。”
最近被各大公司釋放開源項目的新聞刷屏,google 剛剛開源了人工智能項目、facebook 開源機器學習項目 等等,幾乎每周都有這些 it “大鳄”們釋出新的開源項目,令人目接不暇。 linkedin 也不甘示弱,近期又開源了其旗下項目 amdry ,這是一款對象存儲系統。其實,linkedin 已經悄然建立了一個世界級的開發者團隊,和開源社群緊密聯系,從開源中獲益、也回報給社群。近來 linkedin 的工程副總裁 igor perisic 接受了 infoworld 的 matt asay 的采訪。讓我們來了解下 linkedin 是如何讓開源在公司中成功運轉的。
将代碼開放僅僅是個開始
任何人都可以将自己的代碼開放,事實上,類似 sourceforge 上的很多項目經年累月的都是隻有很少的開發者,(80%的項目隻有兩個人或更少的開發者)若是有人加入的話,那真是讓人興奮不已。即使是某個項目有多個貢獻者,但是絕大多數的項目有超過6個月的時間沒有更新。
事實上,僅僅從 linkedin 開源了75個項目這個角度來說,并沒有多大的意義,因為一個開源項目的意義在于能夠在多大程度上引起社群的興趣來,而這也是 linkedin 的開源故事的魅力所在。
正如 perisic 所說:“數字通常隻是表面的、虛的标杆,我們認為社群采用量才是成功的關鍵名額。” 舉例來說,pinot和 rest.li,前者是一個實時的分布式的 olap 資料存儲,linkedin 用來傳遞可擴充的實時分析,後者是一 rest 的架構,在 github 上都是超過一千個 star 和 fork 超過 200 的項目。
另外,一個開源項目最好的健康名額就是代碼倉庫的貢獻者數量和最後的更新時間,這兩個名額随着時間的推移,也會為項目帶來更多的貢獻者以及更加頻繁的更新,形成一個正循環。但是對于社群來說,這還不夠。能夠得到業界标準的承認,才是 linkedin 的開源工作所取得的成績,比如得到 apache 基金會的承認。
linkedin 有多個項目被 apache 基金會當選為其頂級項目,諸如kafka、samza、 以及 helix 。還有其它項目,如分布式鍵值存儲系統-voldemort 正在變得流行起來。rest.li 就不用說了,已經是非常受歡迎的開發架構了。總體而言,linkenin 通過在開源的努力已經在開源項目上赢得了開發者的認同。
開源現在已經是一個被濫用的詞彙了,舉例來說,太多的公司所釋出的代碼是對自己有用的,然後希望出現大規模的社群圍繞着它來進行,然後希望這個項目對自己的公司更加的有用處。其實,開源基金會也是遵循着同樣的如此的以自我為中心的邏輯,所謂的開放治理其實是一種僞裝,不過依然是由單一的廠商控制最終的産出罷了。
當然,linkedin 也不是第一天就明白成為開源社群的典範的美德的。正如 perisic 所描述的那樣:“從早期的失敗中,我們學到的重要的一課就是你不可以将一個項目扔給社群,然後就不再創新了。還有另外重要的就是,一個開源項目的成功與否取決于你如何參與到社群中來。”
perisic 進一步解釋,這也就是意味着,最為艱難的工作是在将剛剛将代碼開源後的那一段時間,舉個例子來說,linkedin 現在所總結的獲得社群的回報非常的重要,以及確定項目的目标是容易了解的。這都是經曆了很多才學到的。不過,隻為重要的還是團隊的決定,如果你沒有準備好将正在進行的工作開源的話,最好是先不要将之開源了。
何苦呢?
這裡就有很多人提出了疑問了,既然開放代碼已經困難重重了,再加上來自社群增長的壓力,何必這麼折騰了呢?perisic 進一步點出了其中的奧義,雖然開源對于 linkedin 來說有讓價值在外部流動的好處,但是最重要的一個緣由還是開源社群能夠影響到工程師。
perisic 說道:“我們發現,在開源了項目之後的第一個結果竟然是我們開發者撰寫出了品質更好的代碼。将代碼放在自家的門後,隻會成為鼓勵大家偷懶、馬虎,開源之後,則不一樣,這樣會激勵開發者們,使他們更加的細心。開源之後改進尤為明顯的有,文檔也有人寫了、代碼也更容易讓人閱讀了、而且非常注重每一次的測試結果。”
将代碼開放以後,也就意味着開發者們要接受批評--非常公開的批評。用 perisic 的話就是:“當一位開發者将某一段代碼公開以後,也就是将自己的聲譽放在了網上,其本質上是一種類似同行評審。這樣就讓開發者們能夠激勵自己,将他們的代碼寫的更好、撰寫更完善的文檔、以及對于可重用性的重視。”
perisic 又說道:“當然,開源也不僅僅是有利于代碼品質。它也能夠確定開發人員的視野不至于太過于狹隘,總是盯着自己眼前那點事。在一個開源項目下工作,也就意味着一起共事的不僅僅是自己身邊的同僚,而且還有來自其它公司的開發者,這會幫助大家對于技術、業務方向的發展趨勢有一定的意識,而且可以幫助他們學習如何評估其他開發者的輸入。在這個多元的世界中,開發人員應該學習如何更加高效的來上司自己的團隊。”
最後,perisic指出:”從公司的角度來看,這也有助于發展你的品牌工程,這證明在吸引新的人才和留住現有員工方面非常的有好處。”
“種”下你的代碼,讓它茁壯成長
perisic非常認真的說:“我認為在建立一個項目并将之開源,應該像你的内部組織一樣去花時間用心去做。而且釋出什麼樣類型的代碼也是有講究的,是蠻重要的事情。這就是為什麼有一些項目無法發展出強大社群的重要原因之一,因為所釋出的項目是孤立的。孤立的代碼可能就是那些僅僅隻是對本公司業務有用的代碼,如果它對于外部其它公司沒有任何用處的話,那麼它失敗的可能性就會很大。”
但是有的時候,最好還是在現有的項目上去投入資源和人員,即使它們可能還沒有獲得大家公認的高度。獨立的開源項目是偉大的,但是如果它是在 apache 的羽翼下而且也蠻有意義,那就不要猶豫了。如果已有的社群的開發者們渴望使用它,那就更不用有所猶豫了,趕緊将之開源!
既然這樣,那麼問題又來了,當來自 linkedin 外部的代碼對于 linkedin 毫無用處的時候是怎麼處理的?perisic 是這麼回答的:“你不能隻是将項目放棄就不管了,你應該為原來選擇你的使用者提供相應的替代和遷移的途徑。” 這裡舉個例子,linkedin 曾經放棄了一個叫做 camus 的項目,這個項目的功能是用于将資料從 kafka 導入 hdfs 的一個管道實作,放棄歸放棄,但是 linkedin 另外開發了一個叫做gobblin的項目,linkedin 新的資料感應架構,也可以實作 camus 的功能,隻是更加的完善,linkedin 此時做的決策就是,為 camus 的使用者提供遷移的路徑。
總結以上所有,開源項目是需要付出巨大的時間來開發、精心培養、并時刻留意的。perisic 非常明白其中的涵義,但是認為值得:“對于開源社群來說,再大的投入都是值得的,因為回報也是豐厚的。”
本文轉自d1net(轉載)