關於開源的7大理念

軟件正在慢條斯理地吞噬世界,開源正在慢條斯理地吞噬軟件業。
軟件正在吞噬世界?是的,對於購物、吃飯、健身、交停車費都須要使用軟件的年代,對於平均每人天天都要花費5到6個小時使用手機軟件的年代,有什麼理由不相信軟件正在吞噬整個世界呢。javascript

開源正在吞噬軟件業?是的,由於在軟件愈來愈富裕的年代(也即軟件再也不稀缺),不開源的軟件,最終是無法和開源軟件競爭的。舉個簡單例子,若是有人要在不少個文件加密軟件中選擇一個使用,在功能和價格都差很少的狀況下,選擇開源的仍是閉源的?固然要選擇開源的,由於誰知道閉源的軟件中,會不會有後門?html

前言java

開源的成功程度,或者說開源的***程度,從中國銀行業的普遍採用就能夠看出來,銀行做爲一個在IT方面至關謹慎和保守的行業,在2012年(一個大約的年限)以前對開源基本上不屑一顧,使用的基本上全是商業軟件(這裏是指專有軟件),他們認爲商業軟件更專業、質量更高、更可信賴、更有保障,他們中很多人視開源軟件爲異類,對其功能、性能、安全性表示擔心,最重要的是,他們擔憂開源軟件出問題後找不到「原廠」解決問題和「承擔責任」。nginx

然而就在2012年之後,銀行業逐漸增長了開源的使用比例,這裏面有不少緣由,最重要的一個緣由是,在Linux面世20年後,不少開源軟件已經成爲比商業軟件更好的存在,以致於諮詢商、集成商、開發商們在爲銀行提供解決方案時,所拿出的最佳方案已是基於開源的方案,銀行(做爲甲方)已經無力拒絕。好比,現在當一個銀行要建設其自用的雲平臺時,在諮詢和調研一大圈下來,他幾乎必定會選擇基於openstack的方案,若是想使用容器技術,就幾乎必定會選擇容器編排軟件kubernetes,這時,已經顧不上有沒有「原廠」了(事實上仍是有服務商兜底),由於沒有太多更好的選擇了。git

銀行雖然還在使用Vmware、Oracle、Websphere、Weblogic,可是KVM、Mysql、Apache、nginx的***已經愈來愈嚴重,多數銀行的Linux主機數量早已超過了Windows服務器,由於Linux早已成爲整個世界的主流的服務器操做系統,並且還有像Redhat這樣的商業支持,爲何不使用呢。程序員

若是有條件,你能夠實地調查一下,各家銀行的IT部門,在最近5年內,已經不得不正面開源這種「新事物」給他們帶來的「問題」,由於對開源的引入、使用和運維,顯然和以往閉源軟件有明顯不一樣,他們開始寫出開源軟件使用管理辦法,並指定專門處室來負責管理。github

而那些有先見之明的企業(尤爲是互聯網企業),早已組建了開源辦公室,早已把本身的整個系統創建在開源軟件之上,而且早已在開源世界投入了大量的資金和人員,毫無疑問,他們也早已從開源中得到了巨大的收益。web

那麼,開源到底依靠什麼,讓本身大獲成功?sql

本文分析了開源的7大理念,有助於讀者更好理解開源的本質要素,這些理念爲「徹底自主」、「高度開放」、「自發自治」、「自下而上」、「自由競爭」、「贏在聲譽」、「社區賦能」。數據庫

注:在讀這篇文章的時候,你會發現,這些理念事實上是交織在一塊兒的,不少事例同時命中多個理念。由於開源自己就是一件事,我只是從不一樣側面對其進行了描繪。

注:本文所稱的「」採用的是(hacker)的原始含義,也即是熱衷於計算機軟硬件的技術高手,而不是媒體上所說的計算機犯罪分子。在必定程度上,本文再也不區分「」、「程序員」這兩個概念,你能夠認爲他們是一回事,也能夠把看做是技術高超的程序員,總之,是一個正面概念。另外,本文也再也不區分「企業」和「公司」,再也不區分「開源項目」和「開源軟件」,而認爲它們是一回事。

一、徹底自主

開源之因此可以大行其道,是由於全部程序員都喜歡源碼。

這就是開源的原生動力。

但願本身有徹底自主和徹底可控的世界,這和其餘人沒有兩樣,但有可能在計算機軟件領域實現這一點。

沒有源代碼就沒法掌控世界嗎?是的,若是一個操做系統是閉源的,***在使用操做系統時遇到bug而沒法修改,遇到需求而不被採納,試圖研究而無從下手,遇到壟斷、高價、霸王條款而迫不得已,哪裏還談得上掌控世界。

再如,寫程序,他但願有一個本身可以控制或者是能讓本身放心的編輯器,不只僅須要這個編輯器足夠好用,並且最好不會有後續的麻煩,好比不會有license的麻煩,不會有廠商中止服務的麻煩。但願這個編輯器能盡在掌握之中,遇到bug,本身或者有人能將其修復,一些想要的功能,本身或者有人能將其實現,並且最好是,本身怎麼折騰這個軟件,也不會陷入法律方面的麻煩。

也就是說,***喜歡在一個無拘無束的、自由自在的環境下,幹本身喜歡作的事,這是多麼美妙!

想要開源的操做系統,想要開源的編輯器,還想要開源的編譯器、開源的瀏覽器、開源的數據庫、開源的web server、開源的雲環境、開源的虛擬機軟件、開源的大數據工具、開源的人工智能軟件。。。總之,若是一切都開源了,這就是感受最自由和最自主的環境,這就是***的理想。

若是不少人都有這樣的需求,而又有人能把它實現,那這件事就必然會發生。

人類社會是頗有意思的,一些人的需求,會成爲另外一些人的動力,當程序員們渴望源碼的時候,天然就會有***奉上本身精心打造的源碼,無論他們是否意識到,在全部的需求知足背後,都暗藏着豐厚的回報。

當***們想要開源操做系統的時候,Tanenbaum帶着MINIX出現了,當人們但願它有更多的特性時,Linus拿出了Linux,當人們須要web server時,NCSA拿出了Apache,做者一開始開源本身的代碼時,並無想太多,可能僅僅就是想說:「兄弟們,看看我寫的這個東西怎麼樣?大家試試用一下?有啥問題,或者有什麼新想法,歡迎給我發郵件!」

時至今日,在企業愈來愈多主導開源的年代裏,這種原始的動機仍然存在,前段時間開源的TDengine,其主要做者陶建輝在文章(1)中寫道:

「要是有程序員仔細研究咱們源碼,看咱們是怎麼作到的,我會特別的開心。要是有程序員能把我這套方法借鑑過去,把他如今臃腫的系統大幅裁剪,把性能大幅提高,那我更會心花盛開。昨天有人在微信羣裏告訴我,說RPC模塊寫的高效簡潔,準備採納,真讓我有點忘乎所以。」

「兩年多的時間,近二十萬行代碼,放在了GitHub上。好多朋友關切的問我,開源怎麼贏利?拋開開源的商業模式不提,我想,只要咱們開源的代碼真正創造了價值,有人用,那我和團隊就是最大的贏家。若是30年後,還有人在用TDengine,哪怕只是其中一個模塊,其中一個函數,那就是對咱們兩年多日夜奮戰的最大確定,就是給我這個程序員的最大回報。」

「若是你發現什麼問題,我只會高興,不睡覺都想盡快去解決它。若是喜歡,更歡迎參與到咱們這個項目中來。五年以內,世界上90%以上的數據都將是物聯網採集的數據,若是咱們一塊兒開發出一個極爲高效的數據處理引擎來處理這些數據,並且爲全球開發者所使用,你是貢獻者之一,那是一個多麼自豪的事情。」

就這樣,在需求和供應的動力下,開源從底層的操做系統開始,充滿了整個開發環境和中間件,一直到最上層應用,只要是人們想要的東西,就會把它們實現,若是有同樣東西尚未開源,那必定還不是很想要的東西,或者是,他們認爲這個東西沒有必要開源(好比賴以賺錢和生存的東西,好比比較客戶化的東西)。

因此,咱們看到,操做系統Linux、Android;編輯器Vim、Emacs、Atom、Brackets、VS code,版本管理系統SVN、Git;數據庫MySQL、MongoDB、Redis、Postgres;大數據平臺Hadoop、Elasticsearch、Hbase、Spark;Web服務器Apache、Nginx、Node.js、Tomcat;DevOps工具Jenkins、Maven、Ansible、Chef;虛擬化軟件KVM、Xen、Docker、Kubernetes,如雨後春筍般應運而生,這些列出的和沒有列出的開源軟件,造成了一個完整的軟件生態環境,***們已經生活在一個很幸福的時代,他幾乎是想要什麼就有什麼,而幾乎在全部的IT企業和大型非IT企業裏,你都能看到這些開源軟件的身影。

看到這裏,你可能會有所明白,開源,實際上是程序員送給程序員的禮物。

由於真正須要源碼的人,是程序員,真正能寫出源碼的人,也是程序員。

二、高度開放

對軟件而言,源碼都開放了,還有什麼不能開放?

這要看狀況,軟件開放到什麼程度,徹底取決於其許可證(license)。(關於許可證的基本知識,建議看一下阮一峯的文章《開源許可證基礎知識掃盲》(2)

最開放的狀況莫過於「任何人能幹任何事」(anyone can hack anything),也即沒有任何事情能夠阻止人們運行該產品,獲取其源碼、複製其源碼、修改其源碼,推動其向不一樣方向演進,並聲稱是該產品。

這但是太過開放了,以致於拿到他人源碼後,「克隆」或者「山寨」出一個產品將沒有任何法律層面的壓力,爲何開源會開放到如此地步?

一方面,在源碼已經開放的前提下,你事實上很難阻止別人克隆、修改你的代碼並換個名字發佈。雖然程序員一般不會這麼作,但他們不肯意有限制,在一個廣泛寬鬆的環境下,若是你限制太多,程序員就不太會參與你的項目。

另外一方面,這是一個鼓勵充分競爭的世界,若是***們就項目的方向產生分歧,而又沒法達成一致,異見者就能夠分叉出來自立門戶。好比,EGCS分叉自GCC,OpenSSH脫胎於走向商業化前的SSH,Veracrypt派生自Truecrypt,再如近年來比較著名的事件:一些人不承認BTC的方向,分叉出來BCH,而後又有人不承認BCH,分叉出來BSV,雖然這個過程當中有不少爭吵,但沒有人能夠阻止這些。

爲了更好地理解開源所給予用戶的高度開放,下面咱們看看自由軟件是如何定義它所賦予用戶的自由(3):(雖然開源軟件和自由軟件並非一回事,但只有不多的開源軟件不是自由軟件,而幾乎全部自由軟件都是開源軟件(4) ,因此這裏咱們不去糾結自由軟件和開源軟件的種種區別,而是統一思考爲FOSS(Free and Open Source Software),並去理解其背後的初衷。)

若是一個軟件是自由軟件,那麼它必須爲用戶提供如下四項基本自由:

自由度0:用戶能夠按照本身的意願,自由地運行該軟件,而不論出自何種目的。

自由度1:用戶能夠自由地學習該軟件,能夠按照本身的意願修改該軟件,因此,用戶首先要能獲得源碼。

自由度2:用戶能夠自由地分發該軟件的拷貝,這樣就能夠幫助他人。

自由度3:用戶能夠自由地分發該軟件修改後的拷貝,藉此,用戶能夠將其修改分享給整個社區,令他人也從中受益。

「自由軟件」不等於「非商業軟件」。一個自由軟件必須容許商業用戶、商業開發和商業發佈。商業開發自由軟件早就司空見慣了,這樣的自由軟件很是重要。你可能須要花錢購買自由軟件,也可能免費拿到。可是不管你如何得到你的拷貝,做爲用戶,你的四大自由都會被保證,你能夠自由地運行、修改、發佈,甚至出shou自由軟件。

你(即,軟件用戶)能夠把軟件原版或修改版再發布給其餘用戶。你能夠免費發佈,也能夠收取費用(注:市場經濟下,別人免費發佈,你收費發佈,你要考慮提供如何好處才能讓人買單)。軟件能夠發佈給任何地方的任何人。所謂「自由」,意味着你的這些行爲沒必要事先徵得任何人的許可,也沒必要爲此額外支付任何費用。

從以上對自由度的定義能夠看出,FOSS的初心是讓人們可以更好地學習他人代碼、複用他人代碼,完善他人代碼、並能夠將軟件分發給須要的人,從而儘量讓更多的人從軟件和源碼中受益。

但開源的這種自由開放精神,會不會受到國家的限制?好比受到美國出口管理條例(Export Administration Regulation, EAR)的管制?這個問題曾經成爲今年(2019年5月)的關注焦點,參考有關專家解讀(5),這裏彙總解釋以下。

依EAR,美國人、美國公司將軟件出口至美國境外,或在美國境內提供給外國人做爲出口的預備行爲,必須申請取得許可。

但符合「公開可獲取(Publicly available)」定義的軟件,不在 EAR 管制範圍(EAR 734.7 (a)),也就是說,多數開源軟件,出口上不須要申請許可。

但 EAR 734.7 (b) 同時說明,公開可獲取軟件雖不需許可,但若涉及加解密技術,仍然必須申請許可,除非是這個加解密技術自己也是公開可獲取的,那就能夠採用EAR 742.15(b) 款提供源代碼或揭露源代碼來源的方式,來登陸備查。

Apache基金會(ASF)在2019年5月22日經過官博發表聲明(6),稱:

經美國商務部工業和安全局(BIS)從新分類(於2016年9月20日生效),開源公開可獲取的加密軟件源代碼,因已經是「公開可獲取」和「已發佈」,再也不受 EAR 約束。

涉及加密軟件源代碼的開源項目,仍然須要向 BIS 和 NSA 發送項目 URL 的通知(notice),以知足 EAR 742.15(b) 中的「公開可獲取」通知要求。

ASF 繼續與 Apache 項目及其社區合做,以確保他們的通知是最新的,並在將來獲得維護。

因此,開源軟件是否會被美國出口管制,這個問題基本上不用多慮,源碼已經在你的手裏,許可證又給予了你如此高度的自由,你還擔憂什麼呢,你最須要擔憂的問題可能只是:可否讀懂源碼?

三、自發自治

所謂開源社區,指的是全部關心、參與、支持、幫助某個開源項目的人的集合。

社區裏的人,是自發組織在一塊兒的。「其中90%是用戶,他們只是搭順風車或是湊湊熱鬧,9%的人積極參與、提交bug、回答問題,這是‘貢獻者’,1% 的人指導並控制項目的走向,委派任務和作決策,這是‘維護者’,或者簡單的說,他們是領導者。」 (7)

Eric Raymond在著名的《大教堂與集市》(8)一文中說:「誰能想到,幾千名散佈在全球各地的程序員,利用業餘時間,僅僅經過Internet,就鬼斧神工般地造就一個世界級的操做系統?」

他接着說:「多年以來。。。我相信大多數重要軟件(操做系統和真正大型工具如Emacs編輯器)須要像建造大教堂那樣,在與世隔絕的環境下,由天才式專家或幾個行家裏手精心打造,。。。而Linus Torvalds委託全部能委託的事、開放到幾乎混亂的程度,這實在使人驚訝不已,在Linux社區,沒有建築大教堂那樣的安靜和虔誠,倒更像是一個亂糟糟的大集市,充滿了各類不一樣的計劃和方法。」

Eric提出的問題是,一個大的項目裏,你們平時連面都見不上,那麼,如何把社區裏的人們組織起來,尤爲是把編寫代碼的***們組織起來?一個「亂糟糟的大集市」,真的能搭建起一個宏大而精妙的軟件嗎?書中並無給出明確答案。

在一個傳統的軟件公司裏,「組織」並非問題:肯定立項,設立項目組,明確角色和分工,明確需求、目標和計劃,給程序員們分配任務,千方百計調動他們的積極性,分配資源、保障進度,檢查質量。在一個理性的公司裏面,有大把的流程和制度在作這些事情,即使在開發中採起了敏捷方法,也是在命令體系下按照既定方法開展的。

可是,在一個徹底基於興趣而結合的開源社區裏(這裏先不考慮公司僱傭人全職作開源的狀況),你所面對的都是自由人,你只能經過他(她)的自願來獲取合做,若是他(她)願意,他(她)就能夠貢獻代碼,不肯意,徹底能夠不寫任何代碼(使用就行了),若是他(她)有能力,他(她)的代碼就能夠被採納,若是能力不足,他(她)的代碼大約就不會採納。

這徹底基於我的的意願和能力,一個開源項目的領導者,他所須要組織的,就是發現有能力的志願者,並予以相應的代碼提交權力。

在一個大型的社區,一般會有如下幾種不一樣的角色9:

一、領導者(Leader):好比 Linus Torvalds,做爲內核的創始人,毫無疑問是該項目的最高領導者,在理論上,對Linux內核的任何事務都擁有最終話語權。在另外的一些項目中,可能有一個或多我的共同負責,如 Node.js 項目採用的是核心技術委員會機制(the Core Technical Committee)。

二、維護者(Maintainer):領導者會將一些決策和模塊直接委託給維護者,維護者還能夠將其中部分工做再委託給下一個層級的維護者。例如,Linus Torvalds 手下就有若干位內核的維護者,負責不一樣的模塊。

三、提交者(committer):有些開源項目會設置一組能夠直接提交代碼到主幹的人,他們已經證實了本身能夠勝任工做而且靠譜,並且再也不須要提交維護者去進行審覈。但提交者對代碼沒有最終的決定權,維護者或項目的領導者若是發現了什麼,能夠將提交的內容打回去。

四、貢獻者(Developer或Contributor):貢獻者能夠作不少事,好比幫助解答用戶的問題,貢獻代碼或文檔,在郵件列表中參與討論,也能夠提交代碼committer。與前面的角色相比,貢獻者對於代碼的權力要小一些。

五、使用者(User):用戶爲項目提供了目標,並幫助項目持續進化,做爲社區成員,他們最有價值的部分是提出需求、報告缺陷、提出建議。

雖然Eric用「集市」一詞來描述開源模式,但社區裏的程序員可毫不是烏合之衆,***可毫不會讓本身的代碼失控,代碼永遠要清晰、乾淨、簡潔、優美。只有能作到這些的程序員才能夠被賦予維護代碼的權限,因此,這是一個典型的能力帶來權力的社會,或者說的更直白一些,這是一個精英引領的社會。

那麼,集市模式和大教堂模式有相通之處?

是的,這兩者並非截然對立的。

Linux內核在第一次發佈以前,必然凝結着Linus的精心設計(大教堂模式),雖然它是自下而上寫出來的,雖然它只是一個大學生的暑期做品,雖然它只有大約10000 行代碼(Linux 0.01 版本)。

而後,Linux走向了開源並吸引了大量程序員參與,開發進入了集市模式。現在,參與Linux內核開發的已經有100多家企業和接近4000名開發人員,內核源文件達到5.3萬個、源代碼達到2100萬行,Linux天天會新增1萬行代碼,刪除5000行代碼,修改1800行代碼,Linux每一小時就會發生8次變化10。在外人看來,這的確像是一個亂糟糟的集市,但這並不表明項目失控。

Linus對接十餘名核心維護者,每一個人都有本身負責的具體領域和項目內容(例如網絡、無線、USB驅動、ext2或vfat文件系統都有相應的最高負責人),每次有新的開發任務時,Linus會將它分配給對應的人,而這十餘位核心貢獻者又有各自的熟知並信賴的高手小團隊。

Linus不會也不可能親自審覈每一個設計和變動,而是按照這樣層級化的結構(大教堂模式?),最終由數百名維護人員負責代碼審查和整合。在Linus看來,一切都在有條不紊的控制之中(爲了更好控制代碼,Linus還專門開發了代碼管理工具git)。

這很像是一大羣能工巧匠(包括一些建築公司的團隊),無論出自何種利益考慮,爲了一個共同的目標,從世界各地自發參加一個大教堂羣的設計和建設,Linux內核就是這樣一個大教堂羣,每一個子系統都是一個大教堂,每一個大教堂都有着負責設計和建造的領導人,其下有有着數百名建造高手,他們在共識和規則之下,使用着像git、gcc、郵件列表這樣的設計、建造和協同工具,利用集體的力量(他們會討論,也會投票),把這些美輪美奐的大教堂建造出來。Linus做爲最高領導人,不會強制他們,更不會發薪水,一切都是這些高手自發自願自帶乾糧,無論是我的仍是公司。

集市模式和大教堂模式的本質區別只是在於:前者是自發的,也是自治的。

四、自下而上

自下而上是大天然最廣泛的法則,開源做爲一個從草根社會發展起來的事物,必然會遵循這個法則。

在開源世界裏,至少能夠從技術、生態、成就三個層面來觀察這一現象。

從技術上看,縱觀開源歷史,那些很是富有創意的軟件,一開始都是做者腦海中一個不太清晰、朦朦朧朧的想法,而後在做者能力和經驗的基礎上,經過代碼一步步明晰起來的,中間通過了若干次大大小小的架構調整,經歷過兩三次重寫,而後才終於成型。開源項目在第一次露面時,大多數狀況下只是初步能夠運行,而後經過其富有創意的特性和前景,吸引更多的程序員關注和貢獻。

一開始,Linus只是在Minix上編寫一個閱讀學校網絡上Usenet新聞組的終端仿真器,他把本身以前寫的用於測試任務切換能力的兩個進程加以修改,一個進程從鍵盤讀入信息併發給調制解調器,另外一個進程從調制解調器讀取數據,而後發送到屏幕上;爲了實現這些功能,他又寫下了鍵盤和顯示器的驅動程序;爲了從學校網絡下載文件,他寫出了磁盤驅動程序,而後又在Minix文件系統的基礎上寫了一個本身的新的文件系統;也就是說,他使用Minix做爲腳手架,逐步構建了本身的Linux。芬蘭學校的暑假有點長,1991年的暑假更是從5月中旬放到了10月中旬,Linus徹底將時間投入到了編程之中,一週7天,一天10個小時,全都在寫代碼。1991年9月,Linux的0.01版就這麼一點一點地作出來了11。

從生態上看,開源軟件之間造成的關係,也是自下而上的,先有了語言、編譯器、操做系統,而後在操做系統提供的各類功能的基礎上(好比文件系統、內存系統、硬件驅動等),作出了實用工具(binutils),作出外殼(Shell),作出了代碼管理工具、集成開發環境,作出了數據庫、Webserver、瀏覽器,作出了虛擬機,作出了javascript,作出了包管理工具,作出各類應用開發框架和組件,作出了大數據、雲技術,作出了各類面向最終用戶的應用。老是先作出底層的東西,而後才作出上層的東西,並且老是先有實踐,纔有了理論,老是先有代碼,纔有了設計模式、架構體系、軟件工程這些東西。

從成就上看,絕大多數***,一開始都是小打小鬧,從簡陋的程序開始起家,並無什麼宏大的想法,Linus一開始也只是本身玩玩看(《Just For Fun》),並無想着要怎麼改變世界,說本身「若是當時真的知道從頭創建一個操做系統的難度,確定是不會有勇氣去作的」12。而到了1999年,Linus在"The Linux Edge"一文中提到:「Linux如今有數百萬用戶、數千名開發者和正在增加的市場,Linux被用在嵌入式系統中,用在機器人系統中,用在航天飛機上,我想說我知道這些都會發生,這些都是統領世界計劃的一部分(that it's all part of the plan for world domination.)」,雖然,這也許只是一種詼諧的表達。

扎克伯格一開始作的僅僅是一個讓學生們能夠在一堆照片中選擇最佳外貌的程序(Facemash),他作這個也只是由於好玩,後來纔開始作了一個用於哈佛大學學生交流的網站:Facebook,隨着Facebook的壯大,在收購WhatsApp、Instagram以後,扎克伯格的成就和抱負也逐漸升級,2017年2月,扎克伯格在一篇宣言中稱「過去10年中,Facebook一直專一於幫用戶鏈接家人和朋友。下一步咱們要成爲新的社會基礎設施,保證社羣安全、提高每一個人在社會事務中的參與度並提升社會的包容性。」,2019年6月,Facebook提出Libra計劃,要「從新創造貨幣,重塑全球經濟,讓世界各地的人們過上更美好的生活」。誰能想象,一個程序員,竟然就這樣自下而上,作出如此的成就。

順便提一下,開源軟件進入財富500強的方式,並非Eric所倡導的自頂而下方式(《***的反擊》一文),開源並非由於CEO和CTO的倡導和命令而進入企業,開源仍然以其一向的方式,以其鎮定自若的態度,以其不可抵擋的實力,自下而上地推入了財富500強。

五、自由競爭

開源,是一個靠實力說話的世界。

開源軟件在競爭什麼?競爭的是誰的軟件好使,誰的評價更高,以及,最終,是誰得到了更多的市場份額。

「Talk is cheap, show me the code」,大約是這一點的經典詮釋。1992年1月,有一場著名的論戰,Tanenbaum做爲Minix的做者,發帖批評Linux是一個龐大而一體化(monolithic)的操做系統,而非早已被證實更先進的微內核設計,並稱「Linux簡直像是大踏步回到了20世紀70年代,就像拿來一個C語言的程序,再用Basic重寫一遍,在1991年還寫monolithic式的操做系統,真是太糟糕了。」,Linus則回懟「Linux在絕大多數方面都完勝Minix。。。若是微內核是判斷操做系統內核的惟一標準,那你多是對的,但你爲何不提Minix並無把微內核作的很好,而且在真正的多任務(內核層面)方面還有不少問題呢!」。

Linus怎麼會有底氣向一個多年研究操做系統的計算機系教授開火?那是由於他真的作出了比MINIX要好用更實用的內核,並且真的獲得了更多的歡迎,因此他才能夠這麼說,在理論上,Tanenbaum大約是對的,但在實踐中,Linus勝出了。

競爭比比皆是。

2004年,在Apache佔據最大Web server份額的年代,俄羅斯人Igor Sysoev開源發佈了Nginx(和Engine X諧音)。Nginx的一個明確目標就是超越Apache Web服務器的性能,它使用異步技術,成功解決了C10K(Concurrency 10K,1萬併發)問題,以其佔用內存少、併發能力強、配置靈活簡單等驚人性能,很快獲得了普遍採用。截止2019年6月,在全球流量最大的前100萬個網站中,Nginx佔有率已經從10年前的3%上升到現在的27%,而Apache的市場份額從66%下滑至32%,微軟的IIS則從19%下滑到9%13。在流量最大的前1萬個網站中,Nginx的使用率已經超過了Apache(30% vs 29%)14。

2015年,Google開源了Kubernetes,它基於Google自2003年起就在內部使用的集羣管理工具Borg,很快,微軟,紅帽,IBM和Docker加入,Google更是與Linux基金會合做組建了CNCF基金會(Cloud Native Computing Foundation ),將Kubernetes做爲種子技術來提供。如今,Kubernetes有380家企業和2500多名開發者參與開發,在和同類項目Swarm以及Mesos的競爭中,Kubernetes很快佔領了容器調度編排領域的絕對領先地位15。

軟件在競爭,我的也在競爭。

我的競爭的法則很簡單,若是你的貢獻——固然主要是指代碼的貢獻——獲得了同儕承認,你就會得到聲譽和權力。

2019年6月,ASF官方博客宣佈全球新增 40 位 Apache Member,阿里的張乎興有幸成爲其中一位,此時,全球共有771位 ASF Member,中國僅13位(member有權利選舉board、成爲board候選人、推選其餘member,提議將某項目歸入ASF孵化器)。他是怎麼作到的呢,張乎興記錄了這個過程16,如下是節選。

2014年我加入阿里巴巴中間件團隊,開始接手阿里巴巴集團應用容器的維護工做。當時中間件團隊維護了 Tomcat 的一個私有分支,最大的目標就是要統一全部集團的應用容器爲Tomcat。

Tomcat 自1999年發佈初版以來,一直是開源界和 Apache 基金會的明星項目,至今仍然在應用容器領域市場佔有率保持第一,歷經20年發展,依舊熱度不減。Tomcat歷經這麼多年的發展,卻從未出現過一位來自中國的committer。

我從修復 bug 開始。第一個patch是修復一個Websocket 測試用例失敗的問題,修復該問題涉及到了對代碼的一些重構。還記得當時提交以前我很是謹慎,和 leader一塊兒反覆討論了不少次,終於造成了一個比較滿意的方案。提交給 Tomcat 社區以後,很快,社區便有了響應,併合並了我提交的補丁。看到Tomcat的release note裏面出現了本身的名字,真的很是開心。

嚐到了貢獻的甜頭後,團隊的目標也有所調整。內部版本的Tomcat和開源版本的結構要保持徹底一致:使得合併開源Apache Tomcat變得很是容易;內部作的加強也更加方便合併到社區。

後續向社區的貢獻,主要來源於三個方面:第一:阿里內使用 Tomcat,在大規模、高併發場景下遇到的問題修復。比較典型的是當時無線網關應用採用的是Tomcat NIO+AsyncServlet的架構,做爲一個入口應用,曾經由於Tomcat 在高併發下的異常出現過一個比較大的故障,後來排查這個問題花了很是多的精力,最終完全修復了這個問題。第二,Tomcat 大面積在阿里鋪開時遇到的問題修復。例如,發現了一些不符合 Servlet 規範的行爲等。第三,主動參與開源社區,針對一些一直存在的問題的修復。

2016年8月23日,在一個日常工做日的上午,我打開郵箱,看到一封來自Tomcat社區核心開發、Java EE規範專家組成員、時任Apache基金會董事會成員Mark Thomas的來信,邀請我成爲Tomcat Committer。打開郵件的那一刻,感受本身的心都在顫抖,激動之情有點不能自已。

2017年,阿里重啓了 Dubbo 的開源維護工做,並決定把 Dubbo 捐獻給 Apache 軟件基金會。已經有過幾年 Apache 社區參與經驗的我,天然地承擔起幫助Dubbo進入Apache 基金會孵化的工做,從聯繫導師到修改提案,終於,Dubbo經過了Apache孵化器的社區投票,正式開始孵化。

第一次的 release,是孵化過程當中很重要的一個里程碑。在我看來,release的意義遠大於代碼層面的工做,還包括了準確的 License 和版權聲明、符合規範的代碼及依賴、準確一致的簽名等。Dubbo 花了不少的時間去準備,也把整個過程徹底的文檔化,孵化過程當中,由7位不一樣的 Release Manger 輪流負責,確保不一樣的人均可以完成發佈。

在 Dubbo 即將畢業的前夕,忽然有一天,我按慣例打開郵箱,忽然發現躺了一封 Invitation to join The Apache Software Foundation Membership。我心中一陣驚喜,點開以後,發現是邀請我成爲ASF Member的郵件,這讓我很是的出乎意料。

在ASF基金會裏,一名新的member,是現有其餘member提名和選舉出來的,張乎興獲取如此地位,依靠的是他的能力、貢獻以及同儕對他的承認。

六、贏在聲譽

***將本身的代碼貢獻出來,能獲得什麼?

除了項目發展、能力增加、回饋社會、自我實現以外,最大的好處莫過於聲譽。

這也是不少***貢獻代碼的初衷,TDengine的做者陶建輝很直接地說出這一點:

「錢再多,也難讓人在歷史上留下痕跡,但一幅好的做品卻能夠傳承,讓後人好好的品味。願我領頭開發的TDengine成爲傳世之做,Leave a dent in the world!」

聲譽會帶來直接的好處:一旦某人在開源社區創建起本身的聲譽,基本上他就再也不會爲職業生涯發愁,他們會很是搶手,儘管他們每每是分佈在全球各地,但這不妨礙企業爭着僱傭他們。

正如Autodesk 開放總監Guy Martin所言:「若是你打算僱傭一名維護者,或是想僱一名厲害的貢獻者,請時刻牢記,這些人被不少公司盯着,並且他們是這個世界作着足夠靈活的工做的人,這也就意味着,他們雖然從一家公司換到另一家公司,可是卻在同一個項目中工做,惟一改變的是簽署薪水的公司名稱。」7

聲譽帶來的更可能是無形的好處:你說的話會有人聽,你要作的事會有人支持,會有人更多的人願意和你合做。

如今,開源貢獻的主流力量已經轉變爲公司,各種大型企業尤爲是互聯網企業,開始以各類方式發佈本身的開源項目,企業爲何要把本身項目開源出來?

道理是同樣的,若是得法,企業不只能夠得到聲譽,還會得到更多好處。

37signals是一家很是小的公司,員工不多,但在業內卻很是出名。它的出名,很大程度上得益於員工大衛·海納梅爾·韓森在工做的時候,用Ruby寫了一個劃時代的web快速開發框架——Ruby on Rails,其革命性的設計理念,大大的提高了WEB網站的開發效率。37signals選擇了將此項目以開源的方式發佈,在業內引起了轟動效應。在37signals出版的暢銷書《Rework》裏,有一段這樣的文字:最好的大廚都樂於在公共頻道上教授本身的廚藝,這不只無損大廚的商業利益,反而大大增長了大廚的知名度,對大廚來講這是很是棒的舉措。

具體會有些什麼好處?

首先,項目會因開源而得到成長。

Google對其人工智能系統TensorFlow的開源決定就是基於這種考慮作出的,Google首席科學家傑夫·迪恩(Jeff Dean)指出,傳統的軟件研發實在是太慢了,一般是一個程序員花上幾個月寫完代碼,而後上會討論,再根據其餘人的意見進行相應的修改。相比之下,若是採用開源的協做開發形式,Google開發人員可以實時與外界進行協做,Google以外的人也能參與TensorFlow的編寫和完善,TensorFlow的開發進度就大大加快了。

濤思公司在將TDengine的核心部分開源以前,也經歷了反覆的討論和思考,最終在深思熟慮以後,決定開源,其官網上寫道:「濤思數據將盡最大努力打造開發者社區,維護這個開源的商業模式,相信不將最核心的代碼開源,任何軟件都將沒法贏得市場。濤思數據但願經過開源,快速得到市場反饋,完善產品,完善生態,並且吸引更多的開發者加入到這個項目中。」,若是你去github上看一下,就會發現,開源僅僅兩週內,TDengine就收到十多個修改建議(PR),其中不乏一些修復內存泄漏、防範段錯誤之類的高質量patch。

其次,開源產品可能會得到大量用戶使用,佔據份額優點,而後再經過其餘方式賺錢。

2007 年,Google開源了花幾億美金買來的Android,但願直接和 Apple、Nokia、BlackBerry 展開競爭。在此以前,塞班系統曾一度佔據了手機操做系統的榜首,而蘋果的iOS系統也風頭正勁。然而,在安卓出現以後,只用了很短期就奪下了手機操做系統市場第一的位置。根據Gartner發佈的數據,2018年安卓在智能手機系統中佔有的份額高達85.9%,位居第二的iOS系統佔據份額14%,其餘各類系統的市場份額加在一塊兒只佔0.1%。Google並不對andriod收取任何費用,但對於系統搭載的Google搜索、Google地圖等各種應用,卻能夠收費獲利,這和互聯網企業經過免費贏得用戶而後經過會員收費有殊途同歸之妙。

Kafka由LinkedIn公司於2011年開源,並在2012年末從ASF孵化器畢業,正式成爲ASF的頂級項目。2014年,Kafka的三個主要開發人員從LinkedIn出來創業,開了一家叫做Confluent的公司。Confluent的產品基於Kafka,其中Conflunt open source是Kafka的加強版本,仍然開源免費,但企業版Confluent Enterprise則是收費的,主要是裏面增長了一個非開源的Confluent Control Center,實現對整個產品的管理和控制,能夠對Kafka裏面各個生產者和消費者的性能進行監控。

因爲開源,Kafka已經在不少企業裏被做爲關鍵組件部署,但社區版kafaka自身並不自帶性能監控平臺,雖然也有公司本身開發了這樣的系統,但無疑Confluent開發的東西應該是最可靠的,畢竟沒有人比Kafka的開發者更瞭解本身的產品。現在,Confluent公司的年預訂量已超過1億美圓17,之因此能夠大賣,其基礎就在於Kafka已經獲得了普遍使用。

這是自Redhat創立以來,許多開源創業公司(如Cloudera、Elastic等)採用的商業盈利模式:將「社區版」開源,而後售賣該產品的「企業版」( 企業版內含更多的功能,或者和社區版徹底同樣,僅僅是從GPL許可轉爲非GPL許可,如MiniGUI的作法18),售賣雲服務版,售賣對產品的支持和服務。因此說,企業開源本身的項目,並不是不能賺錢,只要能積累起大量用戶,就能夠經過更誘人的功能,吸引用戶花錢購買更高級的產品,並且,開源創業公司還能夠「原廠」的身份,爲企業提供技術服務,爲企業解決後顧之憂。

還會有什麼好處呢,吸引人才。

將產品開源,若是能創建良好的聲譽,會讓開源開發者對公司產生興趣,而公司則能夠從開源貢獻者中選取人才,這提供了一種互相發現對方的機會,招聘到這種人纔是很是划算的,由於該程序員的能力早已在項目的貢獻中獲得檢驗,並且入職後無需磨合就可以直接上手工做。

如今再回頭看,公司能從開源得到什麼?至少有這麼幾點:得到聲譽,得到合做,得到用戶,得到客戶,得到員工。固然,公司不會同時得到這麼多,公司也未必想要這麼多。

雖然有這麼多好處,企業在開源項目前仍須三思,要綜合權衡利弊再作決定。微軟近年來以實際行動大力擁抱開源,也開源了很多項目,但顯然還不會把最新版的Windows和Office開源。

七、社區賦能

Apache有一句格言叫」社區重於代碼",它強調的是:一個健康的社區遠比良好的代碼重要。若是代碼消失, 一個強大的社區能夠重寫它;可是, 若是一個社區不健康, 代碼最終也會失敗。

背後的邏輯是明顯的,與代碼相比,人是最重要的。開源軟件的生命來自於人,一個軟件還活着,體現爲它還在被運行,還在被維護,若是沒有人關注和維護,這個軟件也就走到了盡頭。

「衆人拾柴火焰高」,社區越強大,項目繁榮的可能性就越大。近年來,公司做爲一股強大的社區力量(根據25週年版的Linux Kernel開發報告,我的志願者貢獻的代碼比例下降到了7.7%,大部分代碼都是企業貢獻的),不只把本身的項目開源出來,還會在使用他人開源項目的同時,對上游(也即這個開源項目)社區做貢獻。

有人會問,若是說公司將本身的項目開源會有利可圖,那麼,僱傭全職員工參與上游開發這件事,會有什麼好處呢?爲何必定要給上游作貢獻,fork代碼過來直接本身搞難道不行嗎?

這句話值得好好思考一下:「若是某個開源項目對你公司的產品起着很是致命的做用,而你的公司又只有一人在爲上游作貢獻,你就處於單點故障風險之中,你必需要有連續性計劃,你須要有一打以上的人作這件事。」7

公司將開源代碼下載而後本身搞,固然能夠,但這是一種遠離社區的作法,隨着時間推移,想要從社區的下一個版本中引入修復bug或新的功能,付出的代價就會越大。因此,最簡單的方式就是讓本身的員工花時間甚至是全職的時間參與到開源項目中,花這個錢是值得的。前面所述的阿里對Tomcat作貢獻的例子中,就很明白地說明了這個問題。

阿里、騰訊、百度、華爲、中國移動、招商銀行等國內企業近年來已經將開源做爲戰略行爲,不斷將本身的項目開源,並積極參與上游項目,經過其貢獻,已分別被Apache 基金會、Linux 基金會、 OpenStack 社區、MariaDB 基金會等接受爲白金、黃金或白銀會員,這意味着中國公司在開源社區開始有更多的話語權和影響力。

最後,有必要略微介紹一下基金會,它爲何會存在,它主要起什麼做用?

首先看看由純粹程序員組成的社區,可能會有什麼問題。

一、可能缺少管理。一個健康的社區須要及時處理issue和PR,須要有健康的討論,須要有正常的發佈頻率,這樣纔會聚攏人氣,纔會吸引更多的關注和貢獻。而***幾乎徹底是由興趣驅動的,他們有時候也會犯懶,項目有時會沉睡,一些取悅用戶的功能會遲遲不被實現,項目會失去其所需的活躍度。

二、可能缺少運營。想促進項目更好發展,有些非編碼性質的工做是必要的,好比品牌創建、推廣、運營、捐贈獲取、法律訴訟、培訓、認證等等,但對於醉心於技術的***,他們即使認識到重要性,即使有能力,可能也缺少主動性去作這些,這些事情須要有專門的人士來作,也須要專門的經費。Linus曾說:「若是你是一名工程師,頗有可能你只想處理本身感興趣的技術問題,其餘一切事情你都想移交給別人來處理。。。很慶幸本身不須要擔憂商業和管理的問題,只要能領到工資不擔憂養孩子上學的問題就很好」19。

三、可能缺少治理。開源項目大到必定程度,在多個公司捐贈和參與貢獻以後,企業之間、企業和社區之間的衝突如何處理和調和?這屬於治理層面的問題,也是頗讓人費腦筋的問題,***可不必定喜歡這個。

因此,基金會應運而生,在非盈利和良好願望的前提下,搞定這些在***看來略顯無趣的事。

Apache軟件基金會(ASF)成立於1999年,是全球目前最大的開源軟件基金會。20年來,它發展和孵化了350多個開源項目,像Apache HTTP server、Ant、Hadoop、Kafka、Maven、Struts、Tomcat、Zookeeper等,都是它的項目。ASF依美國非營利慈善組織條例 501(c)(3) 設立,其成立宗旨是:「爲公衆利益創造免費的軟件」。基金會由董事會(Board) 來管理,董事會目前由九名成員組成,每一年由全部ASF member投票選出。

Linux 基金會也是非營利組織,其宗旨爲:「促進、保護和規範Linux,圍繞開源項目建立可持續的開源生態系統,促進技術發展和商業採用」。像Linux、Hyperledger、Jenkins、Let’s Encrypt、Node.js、Kubernetes、Opendaylight、Xen這些都是Linux基金會旗下的項目,和ASF不一樣,一般是頂級企業會員有機會進入董事會或是各類技術決策委員會(TSC),其董事席位主要是由企業會員選出的。Linux基金會明確指出,基金會所獲資金,主要用於基礎設施和從事開源開發的人,包括Linus Torvalds。

後記

七大理念就說到這裏了,若是要細究的話,其實還能夠再整出幾條的,好比什麼「樂於共享」、「重在用戶」、「共識驅動」,「高度透明」、「精英引領」、「協做增效」之類的,可是我以爲有這七條也就基本能說明問題了,並且全部這些理念都是相互關聯的,關鍵是理解開源背後的動力結構和其所不可抵擋的優點。

總的來講,從需求上講,人們須要源碼實現高度自主和安全可控,從供應上講,提供源碼有利於贏取更多的關注、聲譽、用戶和市場;開源的高度開放和自由令人類智慧獲得更好的共享和發展,下降了學習成本、複用成本、改進成本,打破了技術封鎖;開源提供了更自由的競爭機會,使那些能力強的人和軟件脫穎而出;開源,最終造福整個軟件業和整個社會。

時至今日,80%以上的智能手機使用開源,90%的公有云負載使用開源,60%的嵌入式系統使用開源20,連微軟都在windows 10中內嵌Linux,那麼,有什麼理由不相信,開源正在慢條斯理地吞噬整個世界?

轉載自:
https://www.enmotech.com/web/detail/1/844/1.html
https://www.enmotech.com/web/detail/1/844/2.html

相關文章
相關標籤/搜索