作者:衛(wèi)劍釩
軟件正在慢條斯理地吞噬世界乘盼,開源正在慢條斯理地吞噬軟件業(yè)。
軟件正在吞噬世界俄烁?是的绸栅,對于購物、吃飯页屠、健身粹胯、交停車費都需要使用軟件的年代,對于平均每人每天都要花費5到6個小時使用手機軟件的年代辰企,有什么理由不相信軟件正在吞噬整個世界呢风纠。
開源正在吞噬軟件業(yè)?是的牢贸,因為在軟件越來越富裕的年代(也即軟件不再稀缺)竹观,不開源的軟件,最終是沒法和開源軟件競爭的。舉個簡單例子臭增,如果有人要在很多個文件加密軟件中選擇一個使用懂酱,在功能和價格都差不多的情況下,選擇開源的還是閉源的速址?當(dāng)然要選擇開源的玩焰,因為誰知道閉源的軟件中由驹,會不會有后門芍锚?
前言
開源的成功程度,或者說開源的滲透程度蔓榄,從中國銀行業(yè)的廣泛采用就可以看出來并炮,銀行作為一個在IT方面相當(dāng)謹(jǐn)慎和保守的行業(yè),在2012年(一個大約的年限)之前對開源基本上不屑一顧甥郑,使用的基本上全是商業(yè)軟件(這里是指專有軟件)逃魄,他們認(rèn)為商業(yè)軟件更專業(yè)、質(zhì)量更高澜搅、更可信賴伍俘、更有保障,他們中不少人視開源軟件為異類勉躺,對其功能癌瘾、性能、安全性表示擔(dān)憂饵溅,最重要的是妨退,他們擔(dān)心開源軟件出問題后找不到“原廠”解決問題和“承擔(dān)責(zé)任”。
然而就在2012年以后蜕企,銀行業(yè)逐漸增加了開源的使用比例咬荷,這里面有很多原因,最重要的一個原因是轻掩,在Linux面世20年后幸乒,很多開源軟件已經(jīng)成為比商業(yè)軟件更好的存在,以至于咨詢商唇牧、集成商罕扎、開發(fā)商們在為銀行提供解決方案時,所拿出的最佳方案已經(jīng)是基于開源的方案奋构,銀行(作為甲方)已經(jīng)無力拒絕壳影。比如,如今當(dāng)一個銀行要建設(shè)其自用的云平臺時弥臼,在咨詢和調(diào)研一大圈下來宴咧,他幾乎一定會選擇基于openstack的方案,如果想使用容器技術(shù)径缅,就幾乎一定會選擇容器編排軟件kubernetes掺栅,這時烙肺,已經(jīng)顧不上有沒有“原廠”了(事實上還是有服務(wù)商兜底),因為沒有太多更好的選擇了氧卧。
銀行雖然還在使用Vmware桃笙、Oracle、Websphere沙绝、Weblogic搏明,但是KVM、Mysql闪檬、Apache星著、nginx的滲透已經(jīng)越來越嚴(yán)重,多數(shù)銀行的Linux主機數(shù)量早已超過了Windows服務(wù)器粗悯,因為Linux早已成為整個世界的主流的服務(wù)器操作系統(tǒng)虚循,而且還有像Redhat這樣的商業(yè)支持,為什么不使用呢样傍。
如果有條件横缔,你可以實地調(diào)查一下,各家銀行的IT部門衫哥,在最近5年內(nèi)茎刚,已經(jīng)不得不正面開源這種“新事物”給他們帶來的“問題”,因為對開源的引入炕檩、使用和運維斗蒋,顯然和以往閉源軟件有明顯不同,他們開始寫出開源軟件使用管理辦法笛质,并指定專門處室來負(fù)責(zé)管理泉沾。
而那些有先見之明的企業(yè)(尤其是互聯(lián)網(wǎng)企業(yè)),早已組建了開源辦公室妇押,早已把自己的整個系統(tǒng)建立在開源軟件之上跷究,并且早已在開源世界投入了大量的資金和人員,毫無疑問敲霍,他們也早已從開源中獲得了巨大的收益俊马。
那么,開源到底依靠什么肩杈,讓自己大獲成功柴我?
本文分析了開源的7大理念,有助于讀者更好理解開源的本質(zhì)要素扩然,這些理念為“完全自主”艘儒、“高度開放”、“自發(fā)自治”、“自下而上”界睁、“自由競爭”觉增、“贏在聲譽”、“社區(qū)賦能”翻斟,如果你覺得已經(jīng)從字面意思都完全理解了逾礁,可以直接翻到文末領(lǐng)取福利。
注:在讀這篇文章的時候访惜,你會發(fā)現(xiàn)嘹履,這些理念事實上是交織在一起的,很多事例同時命中多個理念疾牲。因為開源本身就是一件事植捎,我只是從不同側(cè)面對其進行了描繪衙解。
注:本文所稱的“黑客”采用的是黑客(hacker)的原始含義阳柔,也即黑客是熱衷于計算機軟硬件的技術(shù)高手,而不是媒體上所說的計算機犯罪分子蚓峦。在一定程度上舌剂,本文不再區(qū)分“黑客”、“程序員”這兩個概念暑椰,你可以認(rèn)為他們是一回事霍转,也可以把黑客看作是技術(shù)高超的程序員,總之避消,黑客是一個正面概念。另外纱意,本文也不再區(qū)分“企業(yè)”和“公司”,不再區(qū)分“開源項目”和“開源軟件”,而認(rèn)為它們是一回事。
1妓忍、完全自主
開源之所以能夠大行其道定罢,是因為所有程序員都喜歡源碼祖凫。
這就是開源的原生動力惠况。
黑客希望自己有完全自主和完全可控的世界,這和其他人沒有兩樣权埠,但黑客有可能在計算機軟件領(lǐng)域?qū)崿F(xiàn)這一點呐粘。
沒有源代碼就無法掌控世界嗎?是的,如果一個操作系統(tǒng)是閉源的蓄坏,黑客在使用操作系統(tǒng)時遇到bug而無法修改,遇到需求而不被采納层坠,試圖研究而無從下手锹淌,遇到壟斷疯暑、高價恍涂、霸王條款而無可奈何宝惰,哪里還談得上掌控世界。
再如尼夺,黑客寫程序,他希望有一個自己能夠控制或者是能讓自己放心的編輯器隘截,不僅僅需要這個編輯器足夠好用乘陪,而且最好不會有后續(xù)的麻煩,比如不會有l(wèi)icense的麻煩雕擂,不會有廠商停止服務(wù)的麻煩。黑客希望這個編輯器能盡在掌握之中贱勃,遇到bug井赌,自己或者有人能將其修復(fù),一些想要的功能贵扰,自己或者有人能將其實現(xiàn)仇穗,而且最好是,自己怎么折騰這個軟件戚绕,也不會陷入法律方面的麻煩纹坐。
也就是說,黑客喜歡在一個無拘無束的舞丛、自由自在的環(huán)境下耘子,干自己喜歡做的事,這是多么美妙球切!
黑客想要開源的操作系統(tǒng)谷誓,想要開源的編輯器,還想要開源的編譯器吨凑、開源的瀏覽器捍歪、開源的數(shù)據(jù)庫户辱、開源的web server、開源的云環(huán)境糙臼、開源的虛擬機軟件庐镐、開源的大數(shù)據(jù)工具、開源的人工智能軟件变逃。焚鹊。∪拖祝總之末患,如果一切都開源了,這就是黑客感覺最自由和最自主的環(huán)境锤窑,這就是黑客的理想璧针。
如果很多人都有這樣的需求,而又有人能把它實現(xiàn)渊啰,那這件事就必然會發(fā)生探橱。
人類社會是很有意思的,一些人的需求绘证,會成為另一些人的動力隧膏,當(dāng)程序員們渴望源碼的時候,自然就會有黑客奉上自己精心打造的源碼嚷那,不管他們是否意識到胞枕,在所有的需求滿足背后,都暗藏著豐厚的回報魏宽。
當(dāng)黑客們想要開源操作系統(tǒng)的時候腐泻,Tanenbaum帶著MINIX出現(xiàn)了,當(dāng)人們希望它有更多的特性時队询,Linus拿出了Linux派桩,當(dāng)人們需要web server時,NCSA拿出了Apache蚌斩,作者一開始開源自己的代碼時铆惑,并沒有想太多,可能僅僅就是想說:“兄弟們送膳,看看我寫的這個東西怎么樣员魏?你們試試用一下?有啥問題肠缨,或者有什么新想法逆趋,歡迎給我發(fā)郵件!”
時至今日晒奕,在企業(yè)越來越多主導(dǎo)開源的年代里闻书,這種原始的動機仍然存在名斟,前段時間開源的TDengine,其主要作者陶建輝在文章[1]中寫道:
“要是有程序員仔細(xì)研究我們源碼魄眉,看我們是怎么做到的砰盐,我會特別的開心。要是有程序員能把我這套方法借鑒過去坑律,把他現(xiàn)在臃腫的系統(tǒng)大幅裁剪岩梳,把性能大幅提升,那我更會心花怒放晃择。昨天有人在微信群里告訴我冀值,說RPC模塊寫的高效簡潔,準(zhǔn)備采納宫屠,真讓我有點得意忘形列疗。”
“兩年多的時間浪蹂,近二十萬行代碼抵栈,放在了GitHub上。好多朋友關(guān)切的問我坤次,開源怎么贏利古劲?拋開開源的商業(yè)模式不提,我想缰猴,只要我們開源的代碼真正創(chuàng)造了價值产艾,有人用,那我和團隊就是最大的贏家洛波。如果30年后胰舆,還有人在用TDengine,哪怕只是其中一個模塊,其中一個函數(shù)蹬挤,那就是對我們兩年多日夜奮戰(zhàn)的最大肯定,就是給我這個程序員的最大回報棘幸⊙姘猓”
“如果你發(fā)現(xiàn)什么問題,我只會高興误续,不睡覺都想盡快去解決它吨悍。如果喜歡,更歡迎參與到我們這個項目中來蹋嵌。五年之內(nèi)育瓜,世界上90%以上的數(shù)據(jù)都將是物聯(lián)網(wǎng)采集的數(shù)據(jù),如果我們一起開發(fā)出一個極為高效的數(shù)據(jù)處理引擎來處理這些數(shù)據(jù)栽烂,而且為全球開發(fā)者所使用躏仇,你是貢獻者之一恋脚,那是一個多么自豪的事情⊙媸郑”
就這樣糟描,在需求和供應(yīng)的動力下,開源從底層的操作系統(tǒng)開始书妻,充滿了整個開發(fā)環(huán)境和中間件船响,一直到最上層應(yīng)用,只要是人們想要的東西躲履,黑客就會把它們實現(xiàn)见间,如果有一樣?xùn)|西還沒有開源,那一定還不是黑客很想要的東西工猜,或者是米诉,他們認(rèn)為這個東西沒有必要開源(比如賴以賺錢和生存的東西,比如比較客戶化的東西)域慷。
所以荒辕,我們看到,操作系統(tǒng)Linux犹褒、Android抵窒;編輯器Vim、Emacs叠骑、Atom李皇、Brackets、VS code宙枷,版本管理系統(tǒng)SVN掉房、Git;數(shù)據(jù)庫MySQL慰丛、MogoDB卓囚、Redis、Postgres诅病;大數(shù)據(jù)平臺Hadoop哪亿、Elasticsearch、Hbase贤笆、Spark蝇棉;Web服務(wù)器Apache、Nginx芥永、Node.js篡殷、Tomcat;DevOps工具Jenkins埋涧、Maven板辽、Ansible奇瘦、Chef;虛擬化軟件KVM戳气、Xen链患、Docker、Kubernetes瓶您,如雨后春筍般應(yīng)運而生麻捻,這些列出的和沒有列出的開源軟件,形成了一個完整的軟件生態(tài)環(huán)境呀袱,黑客們已經(jīng)生活在一個很幸福的時代贸毕,他幾乎是想要什么就有什么,而幾乎在所有的IT企業(yè)和大型非IT企業(yè)里夜赵,你都能看到這些開源軟件的身影明棍。
看到這里,你可能會有所明白寇僧,開源摊腋,其實是程序員送給程序員的禮物。
因為真正需要源碼的人嘁傀,是程序員兴蒸,真正能寫出源碼的人,也是程序員细办。
2橙凳、高度開放
對軟件而言,源碼都開放了笑撞,還有什么不能開放岛啸?
這要看情況,軟件開放到什么程度茴肥,完全取決于其許可證(license)坚踩。(關(guān)于許可證的基本知識,建議看一下阮一峰的文章《開源許可證基礎(chǔ)知識掃盲》[2]瓤狐。)
最開放的情況莫過于“任何人能干任何事”(anyone can hack anything)堕虹,也即沒有任何事情可以阻止人們運行該產(chǎn)品,獲取其源碼芬首、復(fù)制其源碼、修改其源碼逼裆,推進其向不同方向演進郁稍,并聲稱是該產(chǎn)品。
這可是太過開放了胜宇,以至于拿到他人源碼后耀怜,“克隆”或者“山寨”出一個產(chǎn)品將沒有任何法律層面的壓力恢着,為什么開源會開放到如此地步?
一方面财破,在源碼已經(jīng)開放的前提下掰派,你事實上很難阻止別人克隆、修改你的代碼并換個名字發(fā)布左痢。雖然程序員通常不會這么做靡羡,但他們不愿意有限制,在一個普遍寬松的環(huán)境下俊性,如果你限制太多略步,程序員就不太會參與你的項目;
另一方面定页,這是一個鼓勵充分競爭的世界趟薄,如果黑客們就項目的方向產(chǎn)生分歧,而又無法達成一致典徊,異見者就可以分叉出來自立門戶杭煎。比如,EGCS分叉自GCC卒落,OpenSSH脫胎于走向商業(yè)化前的SSH羡铲,Veracrypt派生自Truecrypt,再如近年來比較著名的事件:一些人不認(rèn)可BTC的方向导绷,分叉出來BCH犀勒,然后又有人不認(rèn)可BCH,分叉出來BSV妥曲,雖然這個過程中有很多爭吵贾费,但沒有人可以阻止這些。
為了更好地理解開源所給予用戶的高度開放檐盟,下面我們看看自由軟件是如何定義它所賦予用戶的自由[3]:(雖然開源軟件和自由軟件并不是一回事褂萧,但只有很少的開源軟件不是自由軟件,而幾乎所有自由軟件都是開源軟件[4] 葵萎,所以這里我們不去糾結(jié)自由軟件和開源軟件的種種區(qū)別导犹,而是統(tǒng)一思考為FOSS(Free and Open Source Software),并去理解其背后的初衷羡忘。)
如果一個軟件是自由軟件谎痢,那么它必須為用戶提供以下四項基本自由:
自由度0:用戶可以按照自己的意愿,自由地運行該軟件卷雕,而不論出自何種目的节猿。
自由度1:用戶可以自由地學(xué)習(xí)該軟件,可以按照自己的意愿修改該軟件,所以滨嘱,用戶首先要能得到源碼峰鄙。
自由度2:用戶可以自由地分發(fā)該軟件的拷貝,這樣就可以幫助他人太雨。
自由度3:用戶可以自由地分發(fā)該軟件修改后的拷貝吟榴,借此,用戶可以將其修改分享給整個社區(qū)囊扳,令他人也從中受益吩翻。
“自由軟件”不等于“非商業(yè)軟件”。一個自由軟件必須允許商業(yè)用戶宪拥、商業(yè)開發(fā)和商業(yè)發(fā)布仿野。商業(yè)開發(fā)自由軟件早就司空見慣了,這樣的自由軟件非常重要她君。你可能需要花錢購買自由軟件脚作,也可能免費拿到。但是無論你如何獲得你的拷貝缔刹,作為用戶球涛,你的四大自由都會被保證,你可以自由地運行校镐、修改亿扁、發(fā)布,甚至出售自由軟件鸟廓。
你(即从祝,軟件用戶)可以把軟件原版或修改版再發(fā)布給其他用戶。你可以免費發(fā)布引谜,也可以收取費用(注:市場經(jīng)濟下牍陌,別人免費發(fā)布,你收費發(fā)布员咽,你要考慮提供如何好處才能讓人買單)毒涧。軟件可以發(fā)布給任何地方的任何人。所謂“自由”贝室,意味著你的這些行為不必事先征得任何人的許可契讲,也不必為此額外支付任何費用。
從以上對自由度的定義可以看出滑频,F(xiàn)OSS的初心是讓人們能夠更好地學(xué)習(xí)他人代碼捡偏、復(fù)用他人代碼,完善他人代碼峡迷、并可以將軟件分發(fā)給需要的人霹琼,從而盡可能讓更多的人從軟件和源碼中受益。
但開源的這種自由開放精神,會不會受到國家的限制枣申?比如受到美國出口管理條例(Export Administration Regulation, EAR)的管制?這個問題曾經(jīng)成為今年(2019年5月)的關(guān)注焦點看杭,參考有關(guān)專家解讀[5]忠藤,這里匯總解釋如下。
依EAR楼雹,美國人模孩、美國公司將軟件出口至美國境外,或在美國境內(nèi)提供給外國人作為出口的預(yù)備行為贮缅,必須申請取得許可榨咐。
但符合“公開可獲取(Publicly available)”定義的軟件,不在 EAR 管制范圍(EAR 734.7 (a))谴供,也就是說块茁,多數(shù)開源軟件,出口上不需要申請許可桂肌。
但 EAR 734.7 (b) 同時說明数焊,公開可獲取軟件雖不需許可,但若涉及加解密技術(shù)崎场,仍然必須申請許可佩耳,除非是這個加解密技術(shù)本身也是公開可獲取的,那就可以采用EAR 742.15(b) 款提供源代碼或揭露源代碼來源的方式谭跨,來登錄備查干厚。
Apache基金會(ASF)在2019年5月22日通過官博發(fā)表聲明[6],稱:
經(jīng)美國商務(wù)部工業(yè)和安全局(BIS)重新分類(于2016年9月20日生效)螃宙,開源公開可獲取的加密軟件源代碼蛮瞄,因已是“公開可獲取”和“已發(fā)布”,不再受 EAR 約束污呼。
涉及加密軟件源代碼的開源項目裕坊,仍然需要向 BIS 和 NSA 發(fā)送項目 URL 的通知(notice),以滿足 EAR 742.15(b) 中的“公開可獲取”通知要求燕酷。
ASF 繼續(xù)與 Apache 項目及其社區(qū)合作籍凝,以確保他們的通知是最新的,并在未來得到維護苗缩。
所以饵蒂,開源軟件是否會被美國出口管制,這個問題基本上不用多慮酱讶,源碼已經(jīng)在你的手里退盯,許可證又給予了你如此高度的自由,你還擔(dān)心什么呢,你最需要擔(dān)心的問題可能只是:能否讀懂源碼渊迁?
3慰照、自發(fā)自治
所謂開源社區(qū),指的是所有關(guān)心琉朽、參與毒租、支持、幫助某個開源項目的人的集合箱叁。
社區(qū)里的人墅垮,是自發(fā)組織在一起的「“其中90%是用戶,他們只是搭順風(fēng)車或是湊湊熱鬧算色,9%的人積極參與、提交bug螟够、回答問題灾梦,這是‘貢獻者’,1% 的人指導(dǎo)并控制項目的走向齐鲤,委派任務(wù)和做決策斥废,這是‘維護者’,或者簡單的說给郊,他們是領(lǐng)導(dǎo)者牡肉。” [7]
Eric Raymond在著名的《大教堂與集市》[8](文末提供電子書下載)一文中說:“誰能想到淆九,幾千名散布在全球各地的程序員统锤,利用業(yè)余時間,僅僅通過Internet炭庙,就鬼斧神工般地造就一個世界級的操作系統(tǒng)饲窿?”
他接著說:“多年以來。焕蹄。逾雄。我相信大多數(shù)重要軟件(操作系統(tǒng)和真正大型工具如Emacs編輯器)需要像建造大教堂那樣,在與世隔絕的環(huán)境下腻脏,由天才式專家或幾個行家里手精心打造鸦泳,。永品。做鹰。而Linus Torvalds委托所有能委托的事、開放到幾乎混亂的程度鼎姐,這實在令人驚訝不已钾麸,在Linux社區(qū)更振,沒有建筑大教堂那樣的安靜和虔誠,倒更像是一個亂糟糟的大集市饭尝,充滿了各種不同的計劃和方法肯腕。”
Eric提出的問題是芋肠,一個大的項目里乎芳,大家平時連面都見不上,那么,如何把社區(qū)里的人們組織起來,尤其是把編寫代碼的黑客們組織起來雷激?一個“亂糟糟的大集市”理郑,真的能搭建起一個宏大而精妙的軟件嗎?書中并沒有給出明確答案寂殉。
在一個傳統(tǒng)的軟件公司里囚巴,“組織”并不是問題:確定立項,設(shè)立項目組友扰,明確角色和分工彤叉,明確需求、目標(biāo)和計劃村怪,給程序員們分配任務(wù)秽浇,想方設(shè)法調(diào)動他們的積極性,分配資源甚负、保障進度柬焕,檢查質(zhì)量。在一個理性的公司里面梭域,有大把的流程和制度在做這些事情斑举,即便在開發(fā)中采取了敏捷方法,也是在命令體系下按照既定方法開展的病涨。
但是富玷,在一個完全基于興趣而結(jié)合的開源社區(qū)里(這里先不考慮公司雇傭人全職做開源的情況),你所面對的都是自由人既穆,你只能通過他(她)的自愿來獲取合作赎懦,如果他(她)愿意,他(她)就可以貢獻代碼循衰,不愿意铲敛,完全可以不寫任何代碼(使用就好了),如果他(她)有能力会钝,他(她)的代碼就可以被采納伐蒋,如果能力不足工三,他(她)的代碼大約就不會采納。
這完全基于個人的意愿和能力先鱼,一個開源項目的領(lǐng)導(dǎo)者俭正,他所需要組織的,就是發(fā)現(xiàn)有能力的志愿者焙畔,并予以相應(yīng)的代碼提交權(quán)力掸读。
在一個大型的社區(qū),通常會有以下幾種不同的角色[9]:
1宏多、領(lǐng)導(dǎo)者(Leader):比如 Linus Torvalds儿惫,作為內(nèi)核的創(chuàng)始人,毫無疑問是該項目的最高領(lǐng)導(dǎo)者伸但,在理論上肾请,對Linux內(nèi)核的任何事務(wù)都擁有最終話語權(quán)。在另外的一些項目中更胖,可能有一個或多個人共同負(fù)責(zé)铛铁,如 Node.js 項目采用的是核心技術(shù)委員會機制(the Core Technical Committee)。
2却妨、維護者(Maintainer):領(lǐng)導(dǎo)者會將一些決策和模塊直接委托給維護者饵逐,維護者還可以將其中部分工作再委托給下一個層級的維護者。例如彪标,Linus Torvalds 手下就有若干位內(nèi)核的維護者倍权,負(fù)責(zé)不同的模塊。
3捐下、提交者(committer):有些開源項目會設(shè)置一組可以直接提交代碼到主干的人账锹,他們已經(jīng)證明了自己可以勝任工作并且靠譜,而且不再需要提交維護者去進行審核坷襟。但提交者對代碼沒有最終的決定權(quán)奸柬,維護者或項目的領(lǐng)導(dǎo)者如果發(fā)現(xiàn)了什么,可以將提交的內(nèi)容打回去婴程。
4廓奕、貢獻者(Developer或Contributor):貢獻者可以做很多事,比如幫助解答用戶的問題档叔,貢獻代碼或文檔桌粉,在郵件列表中參與討論,也可以提交代碼committer衙四。與前面的角色相比铃肯,貢獻者對于代碼的權(quán)力要小一些。
5传蹈、使用者(User):用戶為項目提供了目標(biāo)押逼,并幫助項目持續(xù)進化步藕,作為社區(qū)成員,他們最有價值的部分是提出需求挑格、報告缺陷咙冗、提出建議。
雖然Eric用“集市”一詞來描述開源模式漂彤,但社區(qū)里的程序員可絕不是烏合之眾雾消,黑客可絕不會讓自己的代碼失控,代碼永遠(yuǎn)要清晰挫望、干凈立润、簡潔、優(yōu)美媳板。只有能做到這些的程序員才可以被賦予維護代碼的權(quán)限范删,所以,這是一個典型的能力帶來權(quán)力的社會拷肌,或者說的更直白一些,這是一個精英引領(lǐng)的社會旨巷。
那么巨缘,集市模式和大教堂模式有相通之處?
是的采呐,這二者并不是截然對立的若锁。
Linux內(nèi)核在第一次發(fā)布之前,必然凝結(jié)著Linus的精心設(shè)計(大教堂模式)斧吐,雖然它是自下而上寫出來的又固,雖然它只是一個大學(xué)生的暑期作品,雖然它只有大約10000 行代碼(Linux 0.01 版本)煤率。
然后仰冠,Linux走向了開源并吸引了大量程序員參與,開發(fā)進入了集市模式蝶糯。如今洋只,參與Linux內(nèi)核開發(fā)的已經(jīng)有100多家企業(yè)和接近4000名開發(fā)人員,內(nèi)核源文件達到5.3萬個昼捍、源代碼達到2100萬行识虚,Linux每天會新增1萬行代碼,刪除5000行代碼妒茬,修改1800行代碼担锤,Linux每一小時就會發(fā)生8次變化[10]。在外人看來乍钻,這的確像是一個亂糟糟的集市肛循,但這并不代表項目失控铭腕。
Linus對接十余名核心維護者,每個人都有自己負(fù)責(zé)的具體領(lǐng)域和項目內(nèi)容(例如網(wǎng)絡(luò)育拨、無線谨履、USB驅(qū)動、ext2或vfat文件系統(tǒng)都有相應(yīng)的最高負(fù)責(zé)人)熬丧,每次有新的開發(fā)任務(wù)時笋粟,Linus會將它分配給對應(yīng)的人,而這十余位核心貢獻者又有各自的熟知并信賴的高手小團隊析蝴。
Linus不會也不可能親自審核每個設(shè)計和變更害捕,而是按照這樣層級化的結(jié)構(gòu)(大教堂模式?)闷畸,最終由數(shù)百名維護人員負(fù)責(zé)代碼審查和整合尝盼。在Linus看來,一切都在有條不紊的控制之中(為了更好控制代碼佑菩,Linus還專門開發(fā)了代碼管理工具git)盾沫。
這很像是一大群能工巧匠(包括一些建筑公司的團隊),不管出自何種利益考慮殿漠,為了一個共同的目標(biāo)赴精,從世界各地自發(fā)參加一個大教堂群的設(shè)計和建設(shè),Linux內(nèi)核就是這樣一個大教堂群绞幌,每個子系統(tǒng)都是一個大教堂蕾哟,每個大教堂都有著負(fù)責(zé)設(shè)計和建造的領(lǐng)導(dǎo)人,其下有有著數(shù)百名建造高手莲蜘,他們在共識和規(guī)則之下谭确,使用著像git、gcc票渠、郵件列表這樣的設(shè)計逐哈、建造和協(xié)同工具,利用集體的力量(他們會討論庄新,也會投票)鞠眉,把這些美輪美奐的大教堂建造出來。Linus作為最高領(lǐng)導(dǎo)人择诈,不會強制他們械蹋,更不會發(fā)薪水,一切都是這些高手自發(fā)自愿自帶干糧羞芍,不管是個人還是公司哗戈。
集市模式和大教堂模式的本質(zhì)區(qū)別只是在于:前者是自發(fā)的,也是自治的荷科。
4唯咬、自下而上
自下而上是大自然最普遍的法則纱注,開源作為一個從草根社會發(fā)展起來的事物,必然會遵循這個法則胆胰。
在開源世界里狞贱,至少可以從技術(shù)、生態(tài)蜀涨、成就三個層面來觀察這一現(xiàn)象瞎嬉。
從技術(shù)上看,縱觀開源歷史厚柳,那些非常富有創(chuàng)意的軟件氧枣,一開始都是作者腦海中一個不太清晰、朦朦朧朧的想法别垮,然后在作者能力和經(jīng)驗的基礎(chǔ)上便监,通過代碼一步步明晰起來的,中間經(jīng)過了若干次大大小小的架構(gòu)調(diào)整碳想,經(jīng)歷過兩三次重寫烧董,然后才終于成型。開源項目在第一次露面時胧奔,大多數(shù)情況下只是初步可以運行解藻,然后通過其富有創(chuàng)意的特性和前景,吸引更多的程序員關(guān)注和貢獻葡盗。
一開始,Linus只是在Minix上編寫一個閱讀學(xué)校網(wǎng)絡(luò)上Usenet新聞組的終端仿真器啡浊,他把自己之前寫的用于測試任務(wù)切換能力的兩個進程加以修改觅够,一個進程從鍵盤讀入信息并發(fā)給調(diào)制解調(diào)器,另一個進程從調(diào)制解調(diào)器讀取數(shù)據(jù)巷嚣,然后發(fā)送到屏幕上喘先;為了實現(xiàn)這些功能,他又寫下了鍵盤和顯示器的驅(qū)動程序廷粒;為了從學(xué)校網(wǎng)絡(luò)下載文件窘拯,他寫出了磁盤驅(qū)動程序,然后又在Minix文件系統(tǒng)的基礎(chǔ)上寫了一個自己的新的文件系統(tǒng)坝茎;也就是說涤姊,他使用Minix作為腳手架,逐步構(gòu)建了自己的Linux嗤放。芬蘭學(xué)校的暑假有點長思喊,1991年的暑假更是從5月中旬放到了10月中旬,Linus完全將時間投入到了編程之中次酌,一周7天恨课,一天10個小時舆乔,全都在寫代碼。1991年9月剂公,Linux的0.01版就這么一點一點地做出來了[11]希俩。
從生態(tài)上看,開源軟件之間形成的關(guān)系纲辽,也是自下而上的颜武,先有了語言、編譯器文兑、操作系統(tǒng)盒刚,然后在操作系統(tǒng)提供的各種功能的基礎(chǔ)上(比如文件系統(tǒng)、內(nèi)存系統(tǒng)绿贞、硬件驅(qū)動等)因块,黑客做出了實用工具(binutils),做出外殼(Shell)籍铁,做出了代碼管理工具涡上、集成開發(fā)環(huán)境,做出了數(shù)據(jù)庫拒名、Webserver吩愧、瀏覽器,做出了虛擬機增显,做出了javascript雁佳,做出了包管理工具,做出各種應(yīng)用開發(fā)框架和組件同云,做出了大數(shù)據(jù)糖权、云技術(shù),做出了各種面向最終用戶的應(yīng)用炸站。黑客總是先做出底層的東西星澳,然后才做出上層的東西,而且總是先有實踐旱易,才有了理論禁偎,總是先有代碼,才有了設(shè)計模式阀坏、架構(gòu)體系如暖、軟件工程這些東西。
從成就上看忌堂,絕大多數(shù)黑客装处,一開始都是小打小鬧,從簡陋的程序開始起家,并沒有什么宏大的想法妄迁,Linus一開始也只是自己玩玩看(《Just For Fun》)寝蹈,并沒有想著要怎么改變世界,說自己“如果當(dāng)時真的知道從頭建立一個操作系統(tǒng)的難度登淘,肯定是不會有勇氣去做的”[12]箫老。而到了1999年,Linus在"The Linux Edge"一文中提到:“Linux現(xiàn)在有數(shù)百萬用戶黔州、數(shù)千名開發(fā)者和正在增長的市場耍鬓,Linux被用在嵌入式系統(tǒng)中,用在機器人系統(tǒng)中流妻,用在航天飛機上牲蜀,我想說我知道這些都會發(fā)生,這些都是統(tǒng)領(lǐng)世界計劃的一部分(that it's all part of the plan for world domination.)”绅这,雖然涣达,這也許只是一種詼諧的表達。
扎克伯格一開始做的僅僅是一個讓學(xué)生們可以在一堆照片中選擇最佳外貌的程序(Facemash)证薇,他做這個也只是因為好玩度苔,后來才開始做了一個用于哈佛大學(xué)學(xué)生交流的網(wǎng)站:Facebook,隨著Facebook的壯大浑度,在收購WhatsApp寇窑、Instagram之后,扎克伯格的成就和抱負(fù)也逐漸升級箩张,2017年2月甩骏,扎克伯格在一篇宣言中稱“過去10年中,F(xiàn)acebook一直專注于幫用戶連接家人和朋友先慷。下一步我們要成為新的社會基礎(chǔ)設(shè)施横漏,保證社群安全、提升每個人在社會事務(wù)中的參與度并提高社會的包容性熟掂。”扎拣,2019年6月赴肚,F(xiàn)acebook提出Libra計劃,要“重新創(chuàng)造貨幣二蓝,重塑全球經(jīng)濟誉券,讓世界各地的人們過上更美好的生活”。誰能想象刊愚,一個程序員踊跟,居然就這樣自下而上,做出如此的成就。
順便提一下商玫,開源軟件進入財富500強的方式箕憾,并不是Eric所倡導(dǎo)的自頂而下方式(《黑客的反擊》一文),開源并不是因為CEO和CTO的倡導(dǎo)和命令而進入企業(yè)拳昌,開源仍然以其一貫的方式袭异,以其不慌不忙的態(tài)度,以其不可抵擋的實力炬藤,自下而上地推入了財富500強御铃。
5、自由競爭
開源沈矿,是一個靠實力說話的世界上真。
開源軟件在競爭什么?競爭的是誰的軟件好使羹膳,誰的評價更高睡互,以及,最終溜徙,是誰獲得了更多的市場份額湃缎。
“Talk is cheap, show me the code”,大約是這一點的經(jīng)典詮釋蠢壹。1992年1月嗓违,有一場著名的論戰(zhàn),Tanenbaum作為Minix的作者图贸,發(fā)帖批評Linux是一個龐大而一體化(monolithic)的操作系統(tǒng)蹂季,而非早已被證明更先進的微內(nèi)核設(shè)計,并稱“Linux簡直像是大踏步回到了20世紀(jì)70年代疏日,就像拿來一個C語言的程序偿洁,再用Basic重寫一遍,在1991年還寫monolithic式的操作系統(tǒng)沟优,真是太糟糕了涕滋。”挠阁,Linus則回懟“Linux在絕大多數(shù)方面都完勝Minix宾肺。。侵俗。如果微內(nèi)核是判斷操作系統(tǒng)內(nèi)核的唯一標(biāo)準(zhǔn)锨用,那你可能是對的,但你為什么不提Minix并沒有把微內(nèi)核做的很好隘谣,并且在真正的多任務(wù)(內(nèi)核層面)方面還有很多問題呢增拥!”。
Linus怎么會有底氣向一個多年研究操作系統(tǒng)的計算機系教授開火?那是因為他真的做出了比MINIX要好用更實用的內(nèi)核掌栅,而且真的得到了更多的歡迎秩仆,所以他才可以這么說,在理論上渣玲,Tanenbaum大約是對的逗概,但在實踐中,Linus勝出了忘衍。
競爭比比皆是逾苫。
2004年,在Apache占據(jù)最大Web server份額的年代枚钓,俄羅斯人Igor Sysoev開源發(fā)布了Nginx(和Engine X諧音)铅搓。Nginx的一個明確目標(biāo)就是超越Apache Web服務(wù)器的性能,它使用異步技術(shù)搀捷,成功解決了C10K(Concurrency 10K星掰,1萬并發(fā))問題,以其占用內(nèi)存少嫩舟、并發(fā)能力強氢烘、配置靈活簡單等驚人性能,很快得到了廣泛采用家厌。 截止2019年6月播玖,在全球流量最大的前100萬個網(wǎng)站中,Nginx占有率已經(jīng)從10年前的3%上升到如今的27%饭于,而Apache的市場份額從66%下滑至32%蜀踏,微軟的IIS則從19%下滑到9%[13]。在流量最大的前1萬個網(wǎng)站中掰吕,Nginx的使用率已經(jīng)超過了Apache(30% vs 29%)[14]果覆。
2015年,Google開源了Kubernetes殖熟,它基于Google自2003年起就在內(nèi)部使用的集群管理工具Borg局待,很快,微軟菱属,紅帽钳榨,IBM和Docker加入,Google更是與Linux基金會合作組建了CNCF基金會(Cloud Native Computing Foundation )照皆,將Kubernetes作為種子技術(shù)來提供。現(xiàn)在沸停,Kubernetes有380家企業(yè)和2500多名開發(fā)者參與開發(fā)膜毁,在和同類項目Swarm以及Mesos的競爭中,Kubernetes很快占領(lǐng)了容器調(diào)度編排領(lǐng)域的絕對領(lǐng)先地位[15]。
軟件在競爭瘟滨,個人也在競爭候醒。
個人競爭的法則很簡單,如果你的貢獻——當(dāng)然主要是指代碼的貢獻——得到了同儕認(rèn)可杂瘸,你就會獲得聲譽和權(quán)力倒淫。
2019年6月,ASF官方博客宣布全球新增 40 位 Apache Member败玉,阿里的張乎興有幸成為其中一位敌土,此時,全球共有771位 ASF Member运翼,中國僅13位(member有權(quán)利選舉board返干、成為board候選人、推選其他member血淌,提議將某項目納入ASF孵化器)矩欠。他是怎么做到的呢,張乎興記錄了這個過程[16]悠夯,以下是節(jié)選癌淮。
2014年我加入阿里巴巴中間件團隊,開始接手阿里巴巴集團應(yīng)用容器的維護工作沦补。當(dāng)時中間件團隊維護了 Tomcat 的一個私有分支乳蓄,最大的目標(biāo)就是要統(tǒng)一所有集團的應(yīng)用容器為Tomcat。
Tomcat 自1999年發(fā)布第一版以來策彤,一直是開源界和 Apache 基金會的明星項目栓袖,至今仍然在應(yīng)用容器領(lǐng)域市場占有率保持第一,歷經(jīng)20年發(fā)展店诗,依舊熱度不減裹刮。Tomcat歷經(jīng)這么多年的發(fā)展,卻從未出現(xiàn)過一位來自中國的committer庞瘸。
我從修復(fù) bug 開始捧弃。第一個patch是修復(fù)一個Websocket 測試用例失敗的問題,修復(fù)該問題涉及到了對代碼的一些重構(gòu)擦囊。還記得當(dāng)時提交之前我非常謹(jǐn)慎违霞,和 leader一起反復(fù)討論了很多次,終于形成了一個比較滿意的方案瞬场。提交給 Tomcat 社區(qū)之后买鸽,很快,社區(qū)便有了響應(yīng)贯被,并合并了我提交的補丁眼五∽彼遥看到Tomcat的release note里面出現(xiàn)了自己的名字,真的非常開心看幼。
嘗到了貢獻的甜頭后批旺,團隊的目標(biāo)也有所調(diào)整。內(nèi)部版本的Tomcat和開源版本的結(jié)構(gòu)要保持完全一致:使得合并開源Apache Tomcat變得非常容易诵姜;內(nèi)部做的增強也更加方便合并到社區(qū)汽煮。
后續(xù)向社區(qū)的貢獻,主要來源于三個方面:第一:阿里內(nèi)使用 Tomcat棚唆,在大規(guī)模暇赤、高并發(fā)場景下遇到的問題修復(fù)。比較典型的是當(dāng)時無線網(wǎng)關(guān)應(yīng)用采用的是Tomcat NIO+AsyncServlet的架構(gòu)瑟俭,作為一個入口應(yīng)用翎卓,曾經(jīng)因為Tomcat 在高并發(fā)下的異常出現(xiàn)過一個比較大的故障,后來排查這個問題花了非常多的精力摆寄,最終徹底修復(fù)了這個問題失暴。第二,Tomcat 大面積在阿里鋪開時遇到的問題修復(fù)微饥。例如逗扒,發(fā)現(xiàn)了一些不符合 Servlet 規(guī)范的行為等。第三欠橘,主動參與開源社區(qū)矩肩,針對一些一直存在的問題的修復(fù)。
2016年8月23日肃续,在一個平常工作日的上午黍檩,我打開郵箱,看到一封來自Tomcat社區(qū)核心開發(fā)始锚、Java EE規(guī)范專家組成員刽酱、時任Apache基金會董事會成員Mark Thomas的來信,邀請我成為Tomcat Committer瞧捌。打開郵件的那一刻棵里,感覺自己的心都在顫抖,激動之情有點不能自已姐呐。
2017年殿怜,阿里重啟了 Dubbo 的開源維護工作,并決定把 Dubbo 捐獻給 Apache 軟件基金會曙砂。已經(jīng)有過幾年 Apache 社區(qū)參與經(jīng)驗的我头谜,自然地承擔(dān)起幫助Dubbo進入Apache 基金會孵化的工作,從聯(lián)系導(dǎo)師到修改提案鸠澈,終于柱告,Dubbo通過了Apache孵化器的社區(qū)投票砖织,正式開始孵化。
第一次的 release末荐,是孵化過程中很重要的一個里程碑。在我看來新锈,release的意義遠(yuǎn)大于代碼層面的工作,還包括了準(zhǔn)確的 License 和版權(quán)聲明、符合規(guī)范的代碼及依賴桑李、準(zhǔn)確一致的簽名等宵统。Dubbo 花了很多的時間去準(zhǔn)備,也把整個過程完全的文檔化拳缠,孵化過程中墩新,由7位不同的 Release Manger 輪流負(fù)責(zé),確保不同的人都可以完成發(fā)布窟坐。
在 Dubbo 即將畢業(yè)的前夕海渊,突然有一天,我按慣例打開郵箱哲鸳,突然發(fā)現(xiàn)躺了一封 Invitation to join The Apache Software Foundation Membership臣疑。我心中一陣驚喜,點開之后徙菠,發(fā)現(xiàn)是邀請我成為ASF Member的郵件讯沈,這讓我非常的出乎意料。
在ASF基金會里婿奔,一名新的member缺狠,是現(xiàn)有其他member提名和選舉出來的,張乎興獲取如此地位萍摊,依靠的是他的能力挤茄、貢獻以及同儕對他的認(rèn)可。
6记餐、贏在聲譽
黑客將自己的代碼貢獻出來驮樊,能得到什么?
除了項目發(fā)展片酝、能力增長囚衔、回饋社會、自我實現(xiàn)之外雕沿,最大的好處莫過于聲譽练湿。
這也是很多黑客貢獻代碼的初衷,TDengine的作者陶建輝很直接地說出這一點:[1]
“錢再多审轮,也難讓人在歷史上留下痕跡肥哎,但一幅好的作品卻可以傳承辽俗,讓后人好好的品味。愿我領(lǐng)頭開發(fā)的TDengine成為傳世之作篡诽,Leave a dent in the world!”
聲譽會帶來直接的好處:一旦某人在開源社區(qū)建立起自己的聲譽崖飘,基本上他就不再會為職業(yè)生涯發(fā)愁,他們會非常搶手杈女,盡管他們往往是分布在全球各地朱浴,但這不妨礙企業(yè)爭著雇傭他們。
正如Autodesk 開放總監(jiān)Guy Martin所言:“如果你打算雇傭一名維護者达椰,或是想雇一名厲害的貢獻者翰蠢,請時刻牢記,這些人被很多公司盯著啰劲,而且他們是這個世界做著足夠靈活的工作的人梁沧,這也就意味著,他們雖然從一家公司換到另外一家公司蝇裤,但是卻在同一個項目中工作廷支,唯一改變的是簽署薪水的公司名稱∷ü迹”[7]
聲譽帶來的更多是無形的好處:你說的話會有人聽酥泞,你要做的事會有人支持,會有人更多的人愿意和你合作啃憎。
現(xiàn)在芝囤,開源貢獻的主流力量已經(jīng)轉(zhuǎn)變?yōu)楣荆黝惔笮推髽I(yè)尤其是互聯(lián)網(wǎng)企業(yè)辛萍,開始以各種方式發(fā)布自己的開源項目悯姊,企業(yè)為什么要把自己項目開源出來?
道理是一樣的贩毕,如果得法悯许,企業(yè)不僅可以獲得聲譽,還會獲得更多好處辉阶。
37signals是一家非常小的公司先壕,員工很少,但在業(yè)內(nèi)卻非常出名谆甜。它的出名垃僚,很大程度上得益于員工大衛(wèi)·海納梅爾·韓森在工作的時候,用Ruby寫了一個劃時代的web快速開發(fā)框架——Ruby on Rails规辱,其革命性的設(shè)計理念谆棺,大大的提升了WEB網(wǎng)站的開發(fā)效率。37signals選擇了將此項目以開源的方式發(fā)布罕袋,在業(yè)內(nèi)引發(fā)了轟動效應(yīng)改淑。在37signals出版的暢銷書《Rework》里碍岔,有一段這樣的文字:最好的大廚都樂于在公共頻道上教授自己的廚藝,這不僅無損大廚的商業(yè)利益朵夏,反而大大增加了大廚的知名度蔼啦,對大廚來說這是非常棒的舉措。
具體會有些什么好處仰猖?
首先询吴,項目會因開源而獲得成長。
Google對其人工智能系統(tǒng)TensorFlow的開源決定就是基于這種考慮做出的亮元,Google首席科學(xué)家杰夫·迪恩(Jeff Dean)指出,傳統(tǒng)的軟件研發(fā)實在是太慢了唠摹,通常是一個程序員花上幾個月寫完代碼爆捞,然后上會討論,再根據(jù)其他人的意見進行相應(yīng)的修改勾拉。相比之下煮甥,如果采用開源的協(xié)作開發(fā)形式,Google開發(fā)人員能夠?qū)崟r與外界進行協(xié)作藕赞,Google之外的人也能參與TensorFlow的編寫和完善成肘,TensorFlow的開發(fā)進度就大大加快了。
濤思公司在將TDengine的核心部分開源之前斧蜕,也經(jīng)歷了反復(fù)的討論和思考双霍,最終在深思熟慮之后,決定開源批销,其官網(wǎng)上寫道:“濤思數(shù)據(jù)將盡最大努力打造開發(fā)者社區(qū)洒闸,維護這個開源的商業(yè)模式,相信不將最核心的代碼開源均芽,任何軟件都將無法贏得市場丘逸。濤思數(shù)據(jù)希望通過開源,快速獲得市場反饋掀宋,完善產(chǎn)品深纲,完善生態(tài)镣奋,而且吸引更多的開發(fā)者加入到這個項目中〉”蛤奢,如果你去github上看一下痹屹,就會發(fā)現(xiàn),開源僅僅兩周內(nèi),TDengine就收到十多個修改建議(PR),其中不乏一些修復(fù)內(nèi)存泄漏、防范段錯誤之類的高質(zhì)量patch。
其次,開源產(chǎn)品可能會獲得大量用戶使用,占據(jù)份額優(yōu)勢,然后再通過其他方式賺錢。
2007 年,Google開源了花幾億美金買來的Android,希望直接和 Apple、Nokia、BlackBerry 展開競爭厅贪。在此之前,塞班系統(tǒng)曾一度占據(jù)了手機操作系統(tǒng)的榜首,而蘋果的iOS系統(tǒng)也風(fēng)頭正勁。然而杂腰,在安卓出現(xiàn)之后,只用了很短時間就奪下了手機操作系統(tǒng)市場第一的位置官还。根據(jù)Gartner發(fā)布的數(shù)據(jù)芹橡,2018年安卓在智能手機系統(tǒng)中占有的份額高達85.9%林说,位居第二的iOS系統(tǒng)占據(jù)份額14%珠移,其他各種系統(tǒng)的市場份額加在一起只占0.1%。Google并不對andriod收取任何費用艺栈,但對于系統(tǒng)搭載的Google搜索英岭、Google地圖等各類應(yīng)用,卻可以收費獲利毅人,這和互聯(lián)網(wǎng)企業(yè)通過免費贏得用戶然后通過會員收費有異曲同工之妙漾唉。
Kafka由LinkedIn公司于2011年開源,并在2012年底從ASF孵化器畢業(yè)堰塌,正式成為ASF的頂級項目赵刑。2014年,Kafka的三個主要開發(fā)人員從LinkedIn出來創(chuàng)業(yè)场刑,開了一家叫作Confluent的公司般此。Confluent的產(chǎn)品基于Kafka蚪战,其中Conflunt open source是Kafka的增強版本,仍然開源免費铐懊,但企業(yè)版Confluent Enterprise則是收費的邀桑,主要是里面增加了一個非開源的Confluent Control Center,實現(xiàn)對整個產(chǎn)品的管理和控制科乎,可以對Kafka里面各個生產(chǎn)者和消費者的性能進行監(jiān)控壁畸。
由于開源,Kafka已經(jīng)在很多企業(yè)里被作為關(guān)鍵組件部署茅茂,但社區(qū)版kafaka自身并不自帶性能監(jiān)控平臺捏萍,雖然也有公司自己開發(fā)了這樣的系統(tǒng),但無疑Confluent開發(fā)的東西應(yīng)該是最可靠的空闲,畢竟沒有人比Kafka的開發(fā)者更了解自己的產(chǎn)品令杈。如今,Confluent公司的年預(yù)訂量已超過1億美元[17]碴倾,之所以可以大賣逗噩,其基礎(chǔ)就在于Kafka已經(jīng)得到了廣泛使用。
這是自Redhat創(chuàng)立以來跌榔,許多開源創(chuàng)業(yè)公司(如Cloudera异雁、Elastic等)采用的商業(yè)盈利模式:將“社區(qū)版”開源,然后售賣該產(chǎn)品的“企業(yè)版”( 企業(yè)版內(nèi)含更多的功能僧须,或者和社區(qū)版完全一樣纲刀,僅僅是從GPL許可轉(zhuǎn)為非GPL許可,如MiniGUI的做法[18])皆辽,售賣云服務(wù)版柑蛇,售賣對產(chǎn)品的支持和服務(wù)芥挣。所以說驱闷,企業(yè)開源自己的項目,并非不能賺錢空免,只要能積累起大量用戶空另,就可以通過更誘人的功能,吸引用戶花錢購買更高級的產(chǎn)品蹋砚,而且扼菠,開源創(chuàng)業(yè)公司還可以“原廠”的身份,為企業(yè)提供技術(shù)服務(wù)坝咐,為企業(yè)解決后顧之憂循榆。
還會有什么好處呢,吸引人才墨坚。
將產(chǎn)品開源秧饮,如果能建立良好的聲譽,會讓開源開發(fā)者對公司產(chǎn)生興趣,而公司則可以從開源貢獻者中選取人才盗尸,這提供了一種互相發(fā)現(xiàn)對方的機會柑船,招聘到這種人才是非常劃算的,因為該程序員的能力早已在項目的貢獻中得到檢驗泼各,而且入職后無需磨合就能夠直接上手工作鞍时。
現(xiàn)在再回頭看,公司能從開源獲得什么扣蜻?至少有這么幾點:獲得聲譽逆巍,獲得合作,獲得用戶弱贼,獲得客戶蒸苇,獲得員工。當(dāng)然吮旅,公司不會同時獲得這么多溪烤,公司也未必想要這么多。
雖然有這么多好處庇勃,企業(yè)在開源項目前仍須三思檬嘀,要綜合權(quán)衡利弊再做決定。微軟近年來以實際行動大力擁抱開源责嚷,也開源了不少項目鸳兽,但顯然還不會把最新版的Windows和Office開源。
7罕拂、社區(qū)賦能
Apache有一句格言叫”社區(qū)重于代碼"揍异,它強調(diào)的是:一個健康的社區(qū)遠(yuǎn)比良好的代碼重要。如果代碼消失, 一個強大的社區(qū)可以重寫它爆班;但是, 如果一個社區(qū)不健康, 代碼最終也會失敗衷掷。
背后的邏輯是明顯的,與代碼相比柿菩,人是最重要的戚嗅。開源軟件的生命來自于人,一個軟件還活著枢舶,體現(xiàn)為它還在被運行懦胞,還在被維護,如果沒有人關(guān)注和維護凉泄,這個軟件也就走到了盡頭躏尉。
“眾人拾柴火焰高”,社區(qū)越強大后众,項目繁榮的可能性就越大胀糜。近年來稼锅,公司作為一股強大的社區(qū)力量(根據(jù)25周年版的Linux Kernel開發(fā)報告,個人志愿者貢獻的代碼比例降低到了7.7%僚纷,大部分代碼都是企業(yè)貢獻的)矩距,不僅把自己的項目開源出來,還會在使用他人開源項目的同時怖竭,對上游(也即這個開源項目)社區(qū)作貢獻锥债。
有人會問,如果說公司將自己的項目開源會有利可圖痊臭,那么哮肚,雇傭全職員工參與上游開發(fā)這件事,會有什么好處呢广匙?為什么一定要給上游做貢獻允趟,fork代碼過來直接自己搞難道不行嗎?
這句話值得好好思考一下:“如果某個開源項目對你公司的產(chǎn)品起著非常致命的作用鸦致,而你的公司又只有一人在為上游做貢獻潮剪,你就處于單點故障風(fēng)險之中,你必須要有連續(xù)性計劃分唾,你需要有一打以上的人做這件事抗碰。”[7]
公司將開源代碼下載然后自己搞绽乔,當(dāng)然可以弧蝇,但這是一種遠(yuǎn)離社區(qū)的做法,隨著時間推移折砸,想要從社區(qū)的下一個版本中引入修復(fù)bug或新的功能看疗,付出的代價就會越大。所以睦授,最簡單的方式就是讓自己的員工花時間甚至是全職的時間參與到開源項目中两芳,花這個錢是值得的。前面所述的阿里對Tomcat做貢獻的例子中睹逃,就很明白地說明了這個問題盗扇。
阿里祷肯、騰訊沉填、百度、華為佑笋、中國移動翼闹、招商銀行等國內(nèi)企業(yè)近年來已經(jīng)將開源作為戰(zhàn)略行為,不斷將自己的項目開源蒋纬,并積極參與上游項目猎荠,通過其貢獻坚弱,已分別被Apache 基金會、Linux 基金會关摇、 OpenStack 社區(qū)荒叶、MariaDB 基金會等接受為白金、黃金或白銀會員输虱,這意味著中國公司在開源社區(qū)開始有更多的話語權(quán)和影響力些楣。
最后,有必要略微介紹一下基金會宪睹,它為什么會存在愁茁,它主要起什么作用?
首先看看由純粹程序員組成的社區(qū)亭病,可能會有什么問題鹅很。
1、可能缺乏管理罪帖。一個健康的社區(qū)需要及時處理issue和PR促煮,需要有健康的討論,需要有正常的發(fā)布頻率整袁,這樣才會聚攏人氣污茵,才會吸引更多的關(guān)注和貢獻。而黑客幾乎完全是由興趣驅(qū)動的葬项,他們有時候也會犯懶泞当,項目有時會沉睡,一些取悅用戶的功能會遲遲不被實現(xiàn)民珍,項目會失去其所需的活躍度襟士。
2、可能缺乏運營嚷量。想促進項目更好發(fā)展陋桂,有些非編碼性質(zhì)的工作是必要的,比如品牌建立蝶溶、推廣嗜历、運營、捐贈獲取抖所、法律訴訟梨州、培訓(xùn)、認(rèn)證等等田轧,但對于醉心于技術(shù)的黑客暴匠,他們即便認(rèn)識到重要性,即便有能力傻粘,可能也缺乏主動性去做這些每窖,這些事情需要有專門的人士來做帮掉,也需要專門的經(jīng)費。Linus曾說:“如果你是一名工程師窒典,很有可能你只想處理自己感興趣的技術(shù)問題蟆炊,其他一切事情你都想移交給別人來處理。瀑志。盅称。很慶幸自己不需要擔(dān)心商業(yè)和管理的問題,只要能領(lǐng)到工資不擔(dān)心養(yǎng)孩子上學(xué)的問題就很好”[19]后室。
3缩膝、可能缺乏治理。開源項目大到一定程度岸霹,在多個公司捐贈和參與貢獻之后疾层,企業(yè)之間、企業(yè)和社區(qū)之間的沖突如何處理和調(diào)和贡避?這屬于治理層面的問題痛黎,也是頗讓人費腦筋的問題,黑客可不一定喜歡這個刮吧。
所以湖饱,基金會應(yīng)運而生,在非盈利和良好愿望的前提下杀捻,搞定這些在黑客看來略顯無趣的事井厌。
Apache軟件基金會(ASF)成立于1999年,是全球目前最大的開源軟件基金會致讥。20年來仅仆,它發(fā)展和孵化了350多個開源項目,像Apache HTTP server垢袱、Ant墓拜、Hadoop、Kafka请契、Maven咳榜、Struts、Tomcat爽锥、Zookeeper等涌韩,都是它的項目。ASF依美國非營利慈善組織條例 501(c)(3) 設(shè)立救恨,其成立宗旨是:“為公眾利益創(chuàng)造免費的軟件”贸辈∈褪鳎基金會由董事會(Board) 來管理肠槽,董事會目前由九名成員組成擎淤,每年由所有ASF member投票選出。
Linux 基金會也是非營利組織秸仙,其宗旨為:“促進嘴拢、保護和規(guī)范Linux,圍繞開源項目創(chuàng)建可持續(xù)的開源生態(tài)系統(tǒng)寂纪,促進技術(shù)發(fā)展和商業(yè)采用”席吴。像Linux、Hyperledger捞蛋、Jenkins孝冒、Let’s Encrypt、Node.js拟杉、Kubernetes庄涡、Opendaylight、Xen這些都是Linux基金會旗下的項目搬设,和ASF不同穴店,通常是頂級企業(yè)會員有機會進入董事會或是各種技術(shù)決策委員會(TSC),其董事席位主要是由企業(yè)會員選出的拿穴。Linux基金會明確指出泣洞,基金會所獲資金,主要用于基礎(chǔ)設(shè)施和從事開源開發(fā)的人默色,包括Linus Torvalds球凰。
后記
七大理念就說到這里了,如果要細(xì)究的話腿宰,其實還可以再整出幾條的弟蚀,比如什么“樂于共享”、“重在用戶”酗失、“共識驅(qū)動”义钉,“高度透明”、“精英引領(lǐng)”规肴、“協(xié)作增效”之類的捶闸,但是我覺得有這七條也就基本能說明問題了,而且所有這些理念都是相互關(guān)聯(lián)的拖刃,關(guān)鍵是理解開源背后的動力結(jié)構(gòu)和其所不可抵擋的優(yōu)勢删壮。
總的來說,從需求上講兑牡,人們需要源碼實現(xiàn)高度自主和安全可控央碟,從供應(yīng)上講,提供源碼有利于贏取更多的關(guān)注均函、聲譽亿虽、用戶和市場菱涤;開源的高度開放和自由使人類智慧得到更好的共享和發(fā)展,降低了學(xué)習(xí)成本洛勉、復(fù)用成本粘秆、改進成本,打破了技術(shù)封鎖收毫;開源提供了更自由的競爭機會攻走,使那些能力強的人和軟件脫穎而出;開源此再,最終造福整個軟件業(yè)和整個社會昔搂。
時至今日,80%以上的智能手機使用開源输拇,90%的公有云負(fù)載使用開源巩趁,60%的嵌入式系統(tǒng)使用開源[20],連微軟都在windows 10中內(nèi)嵌Linux淳附,那么议慰,有什么理由不相信,開源正在慢條斯理地吞噬整個世界奴曙?
注:
本文采用知識共享“署名-相同方式共享”4.0國際許可協(xié)議進行許可(Creative Commons Attribution ShareAlike 4.0 International License.)
關(guān)注公眾號"微月人話"(ID:man-mind)别凹,回復(fù)“catb”,獲取黑客藏經(jīng)閣第一收藏:開源運動“圣經(jīng)”《大教堂與集市》書籍最新譯本(電子版)洽糟。