網易汪源:我們怎麼做開源

語言: CN / TW / HK

本文作者:汪源,網易副總裁,網易杭州研究院執行院長,網易數帆總經理

原載:公眾號“冷技術熱思考”

網易數帆開源全景圖

今年數字+大會上我們第一次比較系統的推出了我們的開源計劃(sf.163.com/opensource),將“架構開放、核心開源”作為我們的核心戰略,儘可能的減少客戶繫結,引起媒體的廣泛關注。

媒體經常會問我們開源怎麼賺錢,一些同事也問過我同樣的問題。網易數帆是一家商業化組織,為什麼要做開源,而且還把專案捐贈給基金會(今年我們把Kyuubi專案捐贈給了Apache基金會),放棄控制權,難道數帆是活雷鋒嗎?我想不如寫篇文章把我們的背景,對開源的思路向業界和同事們更徹底的說說明白。因為工作原因我只會講面向企業的基礎軟體方面的開源。

這應該也不是我們一家公司遇到的問題,記得阿里的李飛飛老師在一次採訪中也說開源其實內部也有很多討論和爭議,所以我們的思路可能也有些參考價值。

背景故事

在切入正題之前,得先介紹幾個背景故事,因為這些故事對我們開源戰略、策略的形成有很大影響。

故事一:國產資料庫。2003年,我們浙大資料庫課題組的一行人承擔了國產資料庫的研發工作,我負責執行器。我們的基礎是PG。因為我們把儲存和事務層完全重寫了,我的執行器自然也要大幅修改來對接。我嫌PG的程式碼寫的不好,可讀性差(特別是mergejoin的next方法1200行賊難讀懂),效能也不好,因此大刀闊斧把整個執行器全部重寫,可讀性好了,效能也高了,當年在科技部的評測中遙遙領先位居第一。這看似是好事,但過了不到三年大家都向我抱怨說因為我的重寫,PG新版本的特性完全沒法移植。這件事對我震撼很大,讓我意識到和社群脫節可能帶來嚴重後果。

故事二:NEMR。2007年公司業務有了大規模資料分析的需求,看了Hadoop發現太不成熟,當時團隊提議不如自研一個,就立項做了NEMR(NetEase MapReduce),一時確實比開源的Hadoop好,功能更強,效能也更高。但到了2010年,我們最終發現社群Hadoop已經更成熟、更強大,所以決定廢除自研的NEMR,遷移到Hadoop。回頭去看的話我們本可以有兩種選擇,要麼以開源Hadoop改進,這樣我們就不會重複造輪子,要麼從一開始就把NEMR開源,這樣說不定最後勝出的是我們。

故事三:DDB。我到網易做的第一個專案是分散式資料庫中介軟體DDB,2005年底啟動,很可能是業界第一個通用的分庫分表中介軟體。DDB現在還在公司很多產品中大規模使用,從應用來看是非常成功的,但這幾年業界也出現了較為成熟的開源分庫分表中介軟體,如ShardingSphere。久而久之,可能我們的DDB也將要被淘汰。如果DDB從一開始就開源結局會怎麼樣了,可能就沒ShardingSphere等什麼事了。

這幾件事情給我有很大的震撼,深切感受到做基礎軟體不開源很難成功,也儘可能不要脫離社群。如果我們費勁力氣開發了一個軟體,最後卻被開源軟體取代,那我們創造的價值在哪裡?

最後一個故事:老闆。之前公司沒有開源戰略,但2019年老闆開始明確的讓我們做開源。2019年是公司很多年來財務壓力最大的一年,但就是在這一年,老闆不但沒有壓縮我們任何一個做基礎軟體研發的人,還明確提出要做開源。如果公司在很賺錢的時候說要做開源,將來遇到困難,還可能難以持續,在困難的時候提出做開源,我想這是老闆給我們做開源最大的定心丸。

開源戰略

我們要解決的第一個問題是開源戰略,也就是為什麼要做開源。如果沒有開源戰略,開源就只是某個個人或者團隊的行為,這樣的開源不可能持續(除了那種創始團隊跑出來繼續的情況)。對公司而言,如果這個專案基本沒人知道的話,沒啥意義,如果曾經還搞出點影響力,影響反而是負面的,可能導致公司後續的開源都被業界懷疑。

為什麼要做開源,我想可以歸結為三點:1、開源才能改變世界;2、開源有助於增進創新和分享的公司文化;3、開源自然也會名利雙收。

1、開源才能改變世界

我說的“改變世界”沒有那麼高大上,對於企業級基礎軟體來說,就是要做到全世界很多國家很多行業都在用。

開源才能改變世界,是經歷了背景故事中多個專案黯然神傷的深切體會,Linux、K8S、MySQL、Hadoop、Spark、MongoDB、Redis等大量的案例更可以證明開源是“獨立”基礎軟體實現成功的主要方式,包括我們開源不久的Curve和Kyuubi。據說有三家整合商已經用Curve來交付專案了,而騰訊雲、eBay、H3C、海康威視、中移動、小米等不少這麼大的企業已經在用我們的Kyuubi。如果不是開源,不可能有這樣的成績。

這裡的限定條件是“獨立”二字。“非獨立”的基礎軟體不需要藉助開源也能成功,開源可能意義不大。如iOS就不開源,AWS等雲產商做了大量的基礎軟體,也都不開源。雲產商做開源的邏輯就比較難講,也難怪乎飛飛老師說開源一事有爭議了。

2、開源有助於增進創新和分享的公司文化

創新是公司核心文化之一(另兩條是熱愛、和使用者在一起)。我們沒有什麼平臺模式網路效應可以憑藉,所有業務都得拼產品、拼技術、拼運營,最終都要拼創新。另一方面,公司也非常提倡共享的文化,每年1024程式設計師節上都會獎勵技術成果的共享與共建。

開源可謂推進創新和共享文化的最佳手段。開源可以讓技術接受全世界的評議,看是不是真的有用的創新,還是閉門造車自吹自擂,或是為了創新而創新搞出來的怪胎。一個技術如果只是自己做自己用,怎麼知道是否先進呢,所以我們鼓勵要麼開源,要麼商業化,接受客戶的檢驗。基礎軟體這樣的公共技術一般沒什麼業務特殊性,要麼做一個最好的,要麼就不要做,用已有最好的。開源可以促進共享這點更不必多說,開源不但是分享給世界,也是分享給公司別的部門。大公司總有一些部門牆,開源是最容易突破部門牆的。

3、開源自然也會名利雙收

名一方面是公司的技術品牌。因為開源專案的成功肯定是業界公認,對企業技術品牌的價值就非常大。比如我覺得百度在AI領域的技術品牌跟PaddlePaddle有很大的關係,一個PP抵得上不知道多少個大賽冠軍。名的另一面是企業的社會價值,開源是軟體企業反哺社會的一種重要方式。最後,技術品牌和社會形象也就是人才吸引力。

最後說到利。同事們問我這個問題的時候,我都說,如果我們做的這個軟體真的全世界都在用,我們作為開創者和主要的貢獻者,我們基於這個專案去給客戶提供增值服務,會發愁賺不到錢嗎,多少總能養活自己吧。記得當初取名“有道”的時候,有一個說法是有道可以解釋為“君子愛財、取之有道”。開源,幫助到千千萬萬的客戶,然後順便賺點錢,也可以說是“君子之道”。

開源策略

開源策略方面第一個核心問題是:哪些開源,哪些不開源。這個問題又包含兩個子問題,哪些專案適合開源和哪些部分適合開源。

有兩類專案最適合開源:

  1. 核心基礎軟體:這類軟體功能定義明確、標準化程度高,複雜度和質量要求高,支撐關鍵業務和核心繫統。成功的開源專案基本上都是這一型別。這有兩個原因,一是新技術的Early Adopter主要是網際網路企業,網際網路企業有很強的開源偏好,這類核心技術軟體不開源他們基本不敢用;二是功能定義明確、標準化程度高的軟體最適合眾多開源愛好者參與貢獻。開源愛好者是來貢獻通用功能的,不是來幫你交付定製化專案的。
  2. 圍繞已有開源專案的配套軟體,如我們開源的KubeCube、KubeDiag都是K8S配套軟體。這類開源專案是為了促進某個生態(如容器生態)的普及和成熟。當然我們推動容器生態和商業是相關的,容器生態就如黑土地,網易輕舟就如禾苗。容器生態越成熟,輕舟的市場就越大。

還有一些其他因素需要考慮:

  1. 只有開源才能打敗開源。如Spark雖然相比Hadoop MapReduce 有很大的改進,但畢竟是同類產品,如果Spark不開源是不可能成功的。我們把Curve開源也是同樣的道理,因為已經有了一個非常流行的儲存系統Ceph。雖然Curve相比Ceph也有諸多改進,但也還是同類,不開源不可能成功,還不如不做。
  2. 開源打商業機會很大。比如MySQL雖然出現很晚,還能在Oracle、DB2等一眾商業化資料庫巨頭間突圍而出。Linux也一樣,出現晚,在專家眼裡技術落後的不行,也獲得了巨大的成功。開源打商業如同降維打擊,即便又晚又差都有機會。這方面我們正在研發一款開源的雲原生資料庫(類似Aurora),明年會開源出來。我覺得業界需要有一個開源的雲原生資料庫。
  3. 商業化套件的子產品不開源。比如我們圍繞網易數帆下的輕舟和有數套件做的很多子產品都不會開源,這些產品天然就能很好的整合到商業化套件中銷售,這時候開源確實可能導致損失很多利益,對業界也沒什麼價值,因為這些子產品通常不能脫離套件發揮功用。其實這個規則只是再次強調之前說的“獨立”基礎軟體才適合開源。

哪些部分適合開源的問題,我們的考慮是“核心開源”,這也是業界典型策略。核心開源,對客戶和生態來說就可以體驗到完整的基礎功能,滿足應用需求。但大型企業如果作為技術戰略應用的話,還需要很多安全、治理、監控、計量計費等等“企業級”功能,這些功能可以作為商業版本的特有功能,也沒那麼標準化,開源愛好者也搞不懂。我今年打過一個比方說採用一個基礎軟體就像結婚,要慎重,一旦遇人不淑,離婚可不容易。核心開源類似於讓你可以深入瞭解一個人的品行,保證不會遇人不淑,但是你還得花錢買“企業級”的功能和服務,就類似你找到了真愛,但經濟上還得自立。

開源策略第二個核心問題是:要放棄控制權,捐贈給基金會。這是因為捐贈給基金會有助於軟體的成功。基金會運作更能被客戶接受,因為這樣才可能有多家供應商能提供服務,才能形成健康的軟體供應鏈。我一直認為,如果一個軟體只有一家能做並不是好事,這家公司不可能成功,因為對客戶來說這樣會面臨極大的風險。放棄控制權,培養幾家競爭對手,大家才能一起成功,否則誰都成功不了。另一方面,捐贈給基金會,也便於藉助基金會擴大影響力。

捐贈給基金會面臨的一個問題是:如果IaaS巨頭來薅羊毛怎麼辦?為了防止IaaS巨頭來薅羊毛,Redis和MongoDB都改了開源協議,如果捐贈給基金會,就沒辦法這麼幹了。這樣的風險當然存在,但如果自身能力過硬,應對及時,風險並不大。在一次採訪中,Databricks的CEO Ali Ghodsi是這麼說的,之所以出現一些基礎軟體產商被IaaS巨頭來薅羊毛,是因為這些產商不擅長做雲服務。軟體已經很流行了,原廠又沒能力提供雲服務,IaaS巨頭提供一個雲服務也是為了更好的滿足客戶需求。所以要避免IaaS巨頭來薅羊毛,根本上是要靠自身產品化能力過硬(一般開源的只是核心,不包含所有產品)、商業化和雲服務運營能力強,並且在合適的時機就在各大雲平臺提供對應的雲服務,這樣我相信原廠的雲服務自然是最暢銷的。像Spark就和雲產商合作的很好,TiDB看起來也不錯。當然IaaS巨頭的服務也會有市場。

所以要不要捐贈給基金會,取決於你的思維方式是做蛋糕還是分蛋糕。

開源落地

戰略上認可開源,策略上也想清楚了,接下來是具體怎麼做的問題。

頭等大事是經費來源。雖然我們說了很多開源的各種價值,但這些價值主要是對企業整體而言偏長期的價值,所以開源的經費來源要儘可能的來自於企業的最高層,越高越好。以我們為例,我們的開源專案主要是放在研究院的公技板塊,由集團設立和給預算經費,因此開源並不佔用網易數帆BU的成本。因為在公技板塊,我們的開源專案都是因為集團自身業務有需要而立項,並非為了賺錢,只是覺得做得好了說不定也能給數帆賺點錢。這樣,公技就踏踏實實做開源,數帆就跟著開源的進度,到合適的時候再試試怎麼圍繞開源去賺點錢,能賺到當然好,賺不到也不虧。所以,雖然是在數字+大會上釋出,但實際上並不是數帆在做開源,而是研究院在做,更進一步說是集團在做開源。我在數字+講開源的時候,其實更多的是代表研究院而非數帆。

大家可能對我們研究院不太瞭解,那還可以拿阿里類比一下,就類似行癲(達摩院和阿里雲智慧的共同負責人)來發布阿里的開源戰略,讓達摩院踏踏實實做開源,如果做的好的,阿里雲來圍繞開源賺錢。雖然阿里雲做的很大了,但畢竟是個要賺錢的部門,做開源難免糾結。

我們的機制可以歸結為集團開源,BU賺錢。我覺得我們這樣的機制才能保障開源的“誠意”和“長遠”,唯一的前提是大老闆要支援,幸運的是老闆很支援我們做開源。

第二個是要做好開源專案的管理,不要讓不好的開源專案損害公司品牌。開源專案多了,就要建立開源管理委員會,新開源專案都要經過委員會審議,每年每個專案都要向委員會彙報工作和計劃。每個專案的價值也要嚴格評估,只是不評估賺錢而已,但社群情況、應用情況、影響力情況、技術創新與先進性、團隊能力等等都要評估,據此確定預算。我們目前還沒有正式建立委員會,但杭研和數帆的每個專案要開源也都是我要審批的。後續考慮到專案多了,很可能會建立一個更規範運作的委員會組織。

不僅自研開源

以上都側重於自研開源,實際上我們對開源不僅重視自研開源,更重視開源引入和社群貢獻。我們已經連續三年在HR和技術委員會(TM599)組織下開展了三類開源的評選,每年在10.24期間頒獎,以此促進公司的開源文化。

第一提倡的是開源引入,也就是獎勵優先採用已有的開源技術並分享開源經驗。每年這類獎勵的數量是最多的,這是為了儘可能的促進複用,反對重複造輪子。我經常講,軟體最大的優勢是隻有研發沒有生產,只有軟體才可能做到不重複造輪子,理論上我們寫的每一行程式碼都應該是創新的,獨特的。工業時代每個人都在重複造輪子,米其林是不會說我們要讓每個輪子都不一樣。可以不用重複造輪子,是我們做軟體的擁有的最大優勢,儘可能不要把自己的聰明才智浪費在重複造輪子上。

第二提倡的社群貢獻。為什麼要給社群做貢獻爭取成為Committer,而不是自用就好?這有幾方面的考慮。首先,通過最專業的同行評議可以確保我們的方案是好的;其次,解決方案被社群接受能夠極大的降低自己分支的維護成本。如果不積極為社群做貢獻,一段時間之後很容易出現和社群分岔太多,merge不了社群最新進步,就如當年我做國產資料庫時一樣,傷害極大。正因為如此,我們才在OpenStack(曾位列nova專案年度中國第一)、Spark(擁有Committer,國內似乎才5名)、Harbor等專案上都積極貢獻。當然,最後還有就是對公司技術品牌的價值。

最後才是自研開源。自研開源其實是已有開源技術確實無法滿足時的無奈之舉,因此我們往往都是在應用過開源技術,發現確實有無法解決的問題時,才被迫自研然後開源。比如我們是在大規模應用了Ceph(百PB級),發現Ceph因為基礎設計的不足導致可用性、可維護性和效能問題無法解決時,才自研Curve儲存。

這樣的策略,對內能夠最大程度的降低重複造輪子,對外可以最大程度的保證自研開源專案個個是精品。

結語

本文既是對我們開源的全面介紹,給業界和同事的回答,也或許可為業界做一參考。開源是為了做出成功的基礎軟體,為了推進創新和複用的文化,也有名和利。開源的無私和商業的自私之間要取捨和均衡,談開源不必避諱商業利益,從開源中賺錢,可以說是“君子愛財,取之有道”。我們通過集團無私投入做開源,事業部順便看看是否能賺錢的機制,力求讓我們的開源“誠意滿滿”和“可持續”
 

相關連結:

從雲原生切入,網易數帆建立“開源版圖”

專訪網易數帆:開源的雲原生之路,能給業務帶來什麼?