人們總是想做、想用、想分享、想幫助好東西,而開源的本質皆來自於此。
(前情提要:OpenAI 收購「Minecraft開源版」,GPT-5 要在虛擬世界中進化了? )
(背景補充:Tornado Cash創辦人遭美司法部控洗錢,專家:「於法無理」恐破壞開源信仰 )
本文主要回答三個問題:
- 人們為什麼開源?
- 人們為什麼以各種形式參與開源?(比如貢獻開源、比如基金會)
- 這背後的本質動機是什麼?
這裡先問個問題:
人們做事,真的一切都是為了利益嗎?
出乎我的預料,超過一半的人都舉起了手。
下面我們主要通過事例來說明問題。
一、Linus 怎麼說
我們先看看開源大神 Linus 是怎麼思考這個問題的:
Linus 認為,人類所有的動機可分為三種基本型別。這些型別依次是「生存」(survival)「社會生活」(social life) 和「娛樂」(entertainment)。
我覺得他說的沒錯,基本上和馬斯洛的需求層次理論相對應,生存動機對應著生理需求和安全需求,社會生活動機對應著歸屬感和被尊重的需求,娛樂動機則對應著認知、審美、自我實現、自我超越等,這些比較上層的需求統統可以歸入到娛樂、好玩裡面。
他的自傳起名是:《只是為了好玩》,注意,所有書名都是慎重考慮過的。
這本書中,有兩句話引起了我的注意,一是他曾經在一個大會上說,
「Linux 的開發是一個全球性團隊的體育專案。」又在一次採訪中,他說:「Linux 也是娛樂,這種娛樂是金錢很難買到的。」
這非常契合他的世界觀中的後兩者,他肯定不是為了生存才去開原始碼的。
Linux 的發明,在很大程度上,是他為了滿足自己的一個雄心:
「我想要開發一個比 Minix 更好的 Minix。」
Minix 是於 1987 年由 Andrew S. Tanenbaum(塔尼鮑默)教授釋出的,它是用來 「向學生講解作業系統的運作方式,並且使用簡單直觀的例子來演示」的程式,它是一個「帶有原始碼的 PC 版的 Unix,對硬體的要求非常低,並且有一本書講解它的運作原理。以前從來沒有人做過這樣的事情。它不是免費的,但幾乎就是了 —— 只要 59~69 美元,相當於 14 張軟盤的價格,這幾乎就是生產的成本費了。」
當時,Tanenbaum 每天都能收到 200 多封電子郵件要求程式改進,Tanenbaum 並不願意改太多,因為這畢竟是一個教學系統,系統龐大以後就不適合教學了,另外「這樣它就不能在最低硬體配置上運行了,而這一點是我希望為學生保留的。」
Tanenbaum 只願意做這樣的改進:
「基本的標準是,如果提出要求的人特別多,並且改起來也不麻煩,同時不會把整個系統的結構搞得一團糟,我會答應,」他解釋道,「如果沒有那麼多人提要求,或者很麻煩,或者要對系統做大手術,我就不幹。」
在 Linus 看來,Minix 的終端模擬不太方便,而且也不能進行任務控制(job-control),記憶體管理也太簡化。Linus 想寫一個比 Minix 更好的 Minix。
一開始,Linus 只是在 Minix 上編寫一個可以更好閱讀學校網路上 Usenet 新聞組的終端模擬器,他把自己之前寫的用於測試任務切換能力的兩個程式加以修改,一個程式從鍵盤讀入資訊並發給調變解調器,另一個程式從調變解調器讀取資料,然後傳送到螢幕上。
為了實現這些功能,他又寫下了鍵盤和顯示器的驅動程式;為了從學校網路下載檔案,他寫出了磁碟驅動程式,為了讀寫檔案,他又在 Minix 檔案系統的基礎上寫了一個自己的新的檔案系統。
1991 年,從 5 月到 9 月,Linus 用了 5 個月,每天 10 小時,寫出了 Linux 0.01。
1991 年 9 月 17 日,他把 Linux 第一個正式版本 0.01 版上傳到赫爾辛基大學助教阿瑞・萊蒙科建立的 ftp.funet.fi 伺服器上的 /pub/os/linux 目錄下, 他僅上傳了源程式(大約 1 萬行),並且還帶著一份完整的釋出說明,大約 1800 字。 其中強調了「釋出這個版本的主要目的是為了讓大家讀一下程式」。
二、Denis 的心跡
我們再看看另一位全職開源軟體作者 Denis 是怎麼想的。
在全球 TOP 1000 網站上,有至少 52% 的網站都使用了 core-js 專案的程式碼。
它的作者 Denis Pushkarev 在 2023 年 2 月 14 日寫過一篇長文,描述他為什麼開發 core-js:
「2012 年,我把我的開發棧切換到了全棧 JavaScript。當時 JavaScript 仍然太原始 —— IE 仍然比其他任何東西都更受歡迎,ES3 時代的瀏覽器仍然佔據了 Web 的主要部分,最新的 NodeJS 版本是 0.7 —— 它才剛剛開始。JavaScript 仍然不適用於編寫嚴肅的應用程式,開發人員用 CoffeeScript 語言轉譯器,解決了 JavaScript 所缺乏的語法糖問題,用 Underscore 等解決了 Javascript 缺乏標準庫的問題。 然而,他們並不是標準,隨著時間的推移,這些語言和庫連同使用它們的專案一起過時了。但舊 JavaScript 引擎仍然流行,使用者並不著急,還沒有什麼機會放棄它們,即使新的 ECMAScript 標準有著快速和可靠的優點,想讓 JavaScript 引擎支援這個新標準,也要等很多年。…… 那時,ECMAScript Transpiler 開始流行並發展迅速…… 但它們不是模組化的,並可能帶來全域性名稱空間汙染…… 而且太多必要的基本語言功能都還沒有實現。」
「為了解決這些問題,我開始研究一個後來被稱為 core-js 的專案,一開始僅僅是為了我自己的需要。 為了讓所有 JS 開發人員的生活更輕鬆,2014 年 11 月, 我開源釋出了 core-js。」
他說的很明白,他想解決一個普遍存在的問題,讓自己和所有 JS 開發人員的生活更輕鬆。
不需要更多,我們基本可以得出,個人開源的主要動機是:
- 為了解決問題。為了好玩、雄心。
- 為了分享,以及隨之而來的聲譽。
仔細想想,可以知道,解決問題、雄心、分享、聲譽,其實都可以落入「好玩」之中。
Linus 說:「 It’s fun being famous」
所以,對個人而言,開源就是好玩、好玩、好玩、好玩、好玩。
而且說不定還能搞出點什麼名堂。
那就更好玩了。
三、公司為什麼玩開源
個人主要是為了「好玩」,那公司為了什麼?公司的天職可是為了賺錢。
這個問題曾經困惑了我很久。
Eric Raymond 在《大教堂與集市》 中說過:
「如果你在工作過程中感到恐懼和厭惡,就應該意識到過程已經出了問題。 快樂、幽默和玩興是真正的資產,…… 開源成功的一個最重要成果,就是告訴我們,“玩 ” 是創造性活動中最具經濟效能的工作模式。」
顯然,開源能夠帶來好玩,能夠帶來創造性,那麼公司能不能把自己的東西開源出來呢?
Zach Holman,GitHub 最早的員工之一,在《The New Kingmakers》這本書中,給出過這樣的建議:
「以快樂、美好的事情和可愛的工作流程來囚禁您的員工。」
「imprison your employees with happiness and nice things and cuddly work processes. 」 —Zach Holman
所以,當公司有員工提議說,我們把這個專案開源吧,網際網路公司裡那些比較有現代思維的領導,都會認真考慮的,只要不是很核心的東西,貢獻出來有什麼不可以呢?員工能更開心一些,自己也顯得更有境界一些,而且,公司從開源已經受益太多了,做點貢獻能有什麼壞處呢?
Lyft 開源 Envoy 的案例,比較能夠說明這個問題。
Matt Klein 是 Lyft 的軟體工程師,也是 Envoy 的建立者,他在 2021 年 9 月回顧 Envoy 5 週年走過的路時說 :
「2016 年夏天,我們開始認真討論開源 Envoy 的問題。早期的 Lyft 員工對開源和它為公司所做的事情很欣賞。很明顯, Envoy 並不是 Lyft 的主要業務,那麼為什 麼不把它放在那裡並給予回報呢?」
沒錯,這就是今天,為什麼各種公司開源了他們的非核心產品 。
在我看來,公司開源非核心產品的動機是:
- 讓工作更好玩一些。
- 讓外部更可見一些。
- 讓公司更有影響力一些。
四、公司開源核心產品
在 Quora 上,有一個問題是:
「為什麼Google將 Kubernetes 開源而不是商業化?」
Why did Google release Kubernetes as open source instead of monetizing it?
我覺得有兩個回答是不錯的。
Andrew McGregor 回答說:「如果叢集排程器是閉源的,它不會在市場上獲得任何牽引力,因此 Kubernetes 必須開源。」
Levy McNary 則說:「因為開源使它成為標準。一旦成為標準,他們就可以將雲服務貨幣化」
沒錯,K8S 正是通過開源和它的技術實力,獲取了大量市場,打敗了當年的競爭對手。
在作業系統、資料庫領域,這一點表現的更明顯,新進這個領域的產品,如果不開源簡直就沒法生存。按照我的朋友莊表偉所言,這些領域,已經卷到必須要開源了。
陶建輝創辦了濤思科技,他做的是時序資料庫,在其官網上,是這麼寫的:
「濤思資料採用 AGPL 許可證,已經將 TDengine 的核心 (儲存、計算引擎和叢集) 100% 開源。濤思資料將盡最大努力打造開發者社群,維護這個開源的商業模式,相信不將最核心的程式碼開源,任何基礎軟體都將無法贏得市場。濤思資料希望通過開源,快速獲得市場回饋,完善產品,完善生態, 而且吸引更多的開發者加入到這個專案中。」
我相信他說的是真心話。
這很典型地說明了公司開源核心產品的動機:
- 通過開源贏得使用者、贏得市場。
- 同時設法商業化,盈利。
當然,如果你已經贏得市場了,那就不一定需要開源了。
相信微軟在 10 年內都不會開源 Windows。
甲骨文在 10 年內不會開源 Oracle。
五、公司貢獻開源
下面我們看看貢獻者貢獻開源的動機。
除了開源自己的產品,公司還以貢獻的方式參與開源,這同樣是很值得思索的。
阿里雲專家張乎興回憶說:
2014 年,我加入阿里巴巴中介軟體團隊,開始接手集團應用容器的維護工作。當時集團的應用容器絕大部分都是基於 JBoss,老舊且無人維護,另外有一小部分跑在 Jetty 和 Tomcat 之上,當時中介軟體團隊維護了 Tomcat 的一個私有分支,最大的目標就是要統一所有集團的應用容器為 Tomcat。而在那之前,我從未接觸過 Tomcat 的開發和運維,對我來說,挑戰很大。
然而,更大的挑戰來自於團隊大 leader 提出的,在當時看來幾乎是無法實現的目標:成為 Apache Tomcat 的 committer。
要知道,作為 Apache 的核心專案之一,Tomcat 自 1999 年釋出第一版以來,一直是開源界和 Apache 基金會的明星專案,至今仍然在應用容器領域市場佔有率保持第一,歷經 20 年發展,依舊熱度不減。Tomcat 歷經這麼多年的發展,卻從未出現過一位來自中國的 committer。而我們小團隊只有 4 個人,根本沒有任何開源的經驗,也完全不知道從何做起。團隊 leader 問我們,誰願意挑戰一下的時候,我也沒有多想,就承擔了下來。
很快,我從修復 bug 開始,第一個 patch 是修復一個 Websocket 測試用例失敗的問題,修復該問題涉及到了對程式碼的一些重構。還記得當時提交之前我非常謹慎,和 leader 一起反覆討論了很多次,終於形成了一個比較滿意的方案。提交給 Tomcat 社群之後,很快,社群便有了響應,並合併了我提交的更新。第一次提交便獲得了認可,心裡很開心,緊張的情緒也緩解了。看到 Tomcat 的 release note 裡面出現了自己的名字,真的非常開心。
「在嚐到了貢獻的甜頭後,團隊的目標也有所調整:內部版本的 Tomcat 和開源版本的結構要保持完全一致。這使得合併開源 Apache Tomcat 變得非常容易;內部做的增強也更加方便合併到社群。
道理是非常直白和簡單的,有貢獻的一面,也有利己的一面,顯然,UpStream,自己也會受益良多。
六、個人貢獻開源
前面已經講了很多別人的例子,現在講一個我個人的例子。
在 Github 出來的時候(2008),我已經很少寫程式碼了,但我仍然在 2023 年貢獻了一個比較有影響力的專案。這個專案就是前面提到的 core-js,它每個月有 2.5 億次 NPM 下載,GitHub 上有 1900 萬個倉庫依賴它。他的作者 Denis 在 TOP 1000 網站上執行指令碼,檢測到 52% 的網站使用了它。
但是他本人卻落入了很悲慘的境地,他曾經因為駕駛摩托車撞人導致一死一傷,因為沒錢(有錢就可以受害人家屬和解),在監獄裡呆了 10 個月。由於他全職從事開源(也就是 core-js 的開發),他的經濟來源主要靠捐贈,剛開始,他每月能收到 2500 美元,後來只能收到 400 美元每月。所以,Denis 才在 2023 年情人節寫下了那篇長文,進行哭訴。
我看到後,覺得非常有利於人們理解開源的現狀,就把這篇長文翻譯出來了,大概 3.3 萬字。然後,我想,如果這篇翻譯能夠放在這個專案中,能讓更多使用這個專案的中國程式員幫助到他。於是就提交了這個翻譯版,Denis 很樂意看到這點。
LGTM=Looks Good To Me
當然,他還是很謹慎的,在我提交後,他號召懂中文的人評審,大約過了將近一個月,這個 PR 才被接受。
(其實很少有人真的做了翻譯層面的評審,他們更多只是提了點格式上的意見)
我想,我肯定幫助到他了。現在我們可以看到,不管是個人貢獻開源,還是公司貢獻開源,主要動機是:
- 1. 開源是個好東西,如果我們有能力,幫助它。
- 2. 我們使用它,改善它,並最好和它保持同步。
- 3. 如果做足夠多,還會給我們帶來其他好處。
七、為什麼成立基金會
在 2019 年 ASF 成立 20 週年時,有人訪談了當時 8 位創辦人,其中一位是 Randy Terbush。
在問到「是什麼原因促使 Apache Group 成立為 ASF?」
他說:
「這其中有很多的原因,如果我沒有記錯的話,其中的一個因素是希望能夠為貢獻者和公司提供相應的法律保護,另外的一個原因是希望我們能夠獲得現金和捐贈,從而能夠讓我們進入更加良好的發展。總而言之,我們最終的目的是建立一個組織,從而能夠支援日益增長的開源開發的參與,以及大量的被採用。」
另一位創辦人 Jim 則說:
「隨著網際網路和 web 技術的日益發展,也日漸穩固,我們都意識到需要較為正式法律給我們提供更多的保護。另外還有一個可能原因,當時,IBM 有意採用 Apache HTTPD 作為其 web 服務的基石,IBM 對於‘江湖’氣味頗濃的 Apache Group 是有些擔心的,這可說是千載難逢的機會,既有形勢的需要,又有如此勢力雄厚的盟友助陣,所以,我們沒用多久就促成了這次成立基金會的事宜。」
創辦人 Drik 說:
「這個時候,IBM 的 Domino WebServer 正在走下坡路,份額急速下降,他們正在研究開源的可行性,看能否切換到 Apache,但是隨著 NCSA 退出,Apache 尚沒有明確的合法所有人。USL 與 AT&T 的官司對 BSD 的影響才剛剛開始顯現…… 所有的這些事情都聚到一起了,當然,對於我一個歐洲的人來說,美國的訴訟習慣實在是太具有侵略性了…… 於是,稍作商量,我們便迅速的做出了決定。」
ASF 於 1999 年 6 月 30 日成立時,在官網上有一個公開的宣告 ,裡面更好地闡釋了這一點:
「Apache 軟體基金會將為 Apache 開源軟體專案提供組織、 法律和財務支援。 基金會確保 Apache 專案在個人志願者參與之外的連續性,在良好的基礎上提供智慧財產權和財務支援, 並提供在參與開源專案時限制法律風險的工具。」
基金會是這個目的,捐贈專案者的心態呢?
從下面的例子可以看出,完全吻合。
前面提到的 Envoy 建立者 Matt Klein 回憶:
到 2017 年秋天,有兩件事是清楚的。
1.Envoy 已經超出了 Lyft 所能提供的範圍。該專案需要法律、公共關係、行銷、活動組織等方面的幫助。
2. 我很快就完全倦怠了,需要找出一條可持續發展的道路。 我們最終同意考慮將 Envoy 轉交到 CNCF 基金會。
最現實的一點就是,個人可能會對一個專案失去興趣,公司也一樣。而在基金會,專案就有了一個獨立的家,如果基金會給力,專案就會活得更久和更好。
基金會的動機很單純,非常利他:
- 幫助開源專案、提供多種支援。
- 讓開源專案可持續發展。
八、總結
總結下來,我覺得開源動機有 4 點:
- 做一個好東西。(解決問題,展示能力)
- 幫助一個好東西。(善良是靈魂間的橋樑)
- 送出一個好東西。(贈送禮物,獲得使用者)
- 獲得回報。(贏得聲譽、獲得市場)
前面 3 點是最重要的,第 4 點往往來得自然而然。
用一句話說,就是:
人們總是想做、想用、想分享、想幫助好東西。
這很人話,如果想說得高大上一點,可以是:
人們渴望創造、體驗、分享、回饋優秀和卓越。
「好玩」哪裡去了?
那麼,我們前面說的「好玩」跑哪裡去了?
回看一下,你有沒有注意到,上面四點都很好玩?
「好玩」是表面現象,「好玩」的背後是利益。
大自然在造人的時候,做了這樣的安排:
凡是能帶來利益的,都好玩。而所有的「好東西」,都是利益。
📍相關報導📍
馬斯克:比特幣開源所以沒bug!未來數週公開「推特演算法」程式碼