回顧Linux、Git 之父Linus Torvalds的傳奇技術(shù)人生
1寫在前面
本文引用地址:http://m.butianyuan.cn/article/201712/372878.htm提起 Linus Torvalds 大家的第一反應(yīng)是怎樣的?是嚴(yán)苛刻薄,還是神級偉大,亦或是孤傲清高?二十五年來,Linus Torvalds 一直堅(jiān)持在技術(shù)第一線,開發(fā)了 Linux 和 Git 兩個項(xiàng)目,并深刻影響了軟件行業(yè)。如果沒有 Linux,就不會有基于 Linux 的安卓系統(tǒng),那世界是怎樣的?如果沒有 Git 的誕生,就不會基于 Git 的 GitHub,那么開源的興旺之勢將會遲來多久?
有人問 Linus,你是如何成長為今天的你自己的?Linus Torvalds 說,我本人并不適合回答這個問題,因?yàn)檫@是個漸進(jìn)不自知的過程;應(yīng)該請一個不會天天見到他的人以第三方視角,來談?wù)勔粋€不敢直視別人眼睛的十二歲書蟲小男孩怎樣蛻變成今天的樣子的。雖然現(xiàn)在,Linus 已經(jīng)很大程度上擺脫了社交恐懼癥,面對媒體和觀眾們可以侃侃而談;但是他依然認(rèn)為自己不擅長于與人打交道。他認(rèn)為貢獻(xiàn)開源項(xiàng)目通過郵件與人互動,給人緩沖是他更喜歡的交流方式。他不喜歡直面很多人一起工作,而 Linux 和 Git 兩個項(xiàng)目則恰恰是他所喜歡的工作形式體現(xiàn)。Linus 稱開源社區(qū)需要有溝通專家,他們溫暖而友善,但遺憾的是他自己并不是這樣的人。
Linus Torvalds 極度熱愛技術(shù),但并不是泛 IT 技術(shù)的追隨者,他從來沒有寫過 web 程序、不會設(shè)置 FTP 服務(wù)器的他有著很聚焦的技術(shù)關(guān)注點(diǎn)。Linus 的技術(shù)興趣很挑剔,“如果我被困在一個孤島上,唯一逃生的機(jī)會就是寫出一套漂亮的 UI,那么我死定了。所以人與人是不一樣的,我不是在找借口,我只是在解釋。”
但是,他并不是一根筋的潔癖開源理想者,很早他就思考了商業(yè)對開源的作用;他很開心也很感激商業(yè)公司和基金會幫他處理所有那些他不愿意處理的事情,并且可以做到完全放權(quán)、不管不問?!安煌娜擞胁煌呐d趣,擅長不同的事情”。
在他眼中,很可能大多數(shù)代碼都是平庸的。為什么 25 年一直在做 Linux?“因?yàn)閷懗鰞?yōu)秀的代碼是件很困難的事情?!薄癓inux 項(xiàng)目中,我會和有的人說‘請不要這樣做,這樣又蠢又笨’,然后他們離開了再以不會靠近我?!彼莾?yōu)秀并嚴(yán)格,在工作中難免會傷及他人的自尊心。
不過,在他特別在意的內(nèi)核項(xiàng)目之外,我想 Linus 應(yīng)該會更加隨和甚至親切。上個月有幸面對面采訪 Linus,他全程面帶微笑;大會開場的出席訪談也是一如既往地沒有準(zhǔn)備 PPT。本文取材自采訪和已有的一些訪談資料,希望可以為讀者們展現(xiàn)一個更為具體、盡量全面客觀的 Linus Torvalds。
2被編程深深地吸引
Linus 大約從十一歲左右開始編程,最初看的是一本匯編語言的書。在祖父的電腦上,Linus 開始使用了 BASIC 語言。
Linus 的妹妹 Sara 記得 Linus 展示的第一段代碼的運(yùn)行效果,是所有 Basic 語言入門的那段代碼:
Linus 表示他很懷疑這段代碼是否發(fā)自真心。他狡黠一笑地說,因?yàn)樗退妹?Sara 并不是一直都是最好的朋友,可能當(dāng)時他自己只是想試著友好些,并借此機(jī)會向展示 Sara 他的編程能力。
使用 BASIC 語言編程在很多人看來很蠢,Edsger Wybe Dijkstra,Dijkstra 算法發(fā)明者曾經(jīng)表示:
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
“一個有過 BASIC 編程經(jīng)歷的人是很難學(xué)會好的編程習(xí)慣的。作為一個潛在的程序員,他們已經(jīng)被腦殘并且無法修復(fù)?!?/p>
Linus 表示最初的編程并不是很認(rèn)真,但是那真的就是十幾歲的他所能觸碰到了,而且他并不完全知道自己在做什么。即便當(dāng)時條件有限,即便 Edsger 的斷言有些令人觸目驚心,但是 Linus 依然成長成為了一名卓越的程序員,并且在 1991 年還是在校學(xué)的時候就創(chuàng)造了 Linux 的雛形,并從此沒有再離開。
Linus 最喜歡的是在電腦上輸入指令,然后它就會去執(zhí)行該執(zhí)行的任務(wù),沒有任何其他多余的動作。Linus 坦白地說有可能是太自閉或邊緣化性格其他問題,但是這樣的爽快干脆的執(zhí)行感絕對不會在日常生活中出現(xiàn)。
“成為程序員真的不是我的計(jì)劃,但是這確實(shí)是我的激情所在?!?/p>
“你看見代碼的時候立刻就知道這段程序是在做什么”。
“你可以把代碼寫得很漂亮,但是實(shí)際上它并不能解決問題。”
3從沒有計(jì)劃編寫 Linux,到一切為了 Linux
Linus 曾經(jīng)公開表示,學(xué)生時期的他本來是想購買 PC 操作系統(tǒng)的,但是昂貴價格實(shí)在讓人望而卻步,于是只好告訴自己說,“哎好吧,我需要自己寫出來了?!?/p>
在 1991 年 9 月發(fā)布 Linux 系統(tǒng)之前,Linus 其實(shí)自己寫過好多工具。巧的是,如果再晚幾個月, 如果 Linus 知道后來問世的 GNU kernel 或者 386BSD(NetBSD, OpenBSD 和 FreeBSD 的前身),現(xiàn)在大家可能就見不到 Linux 操作系統(tǒng)了。所以說 Linux 系統(tǒng)的誕生確屬是意料之外,確切地說是 Linus 為了解決遇到問題而做的事情。
于是他專門為自己配著 80386 處理器的新電腦寫下了第一版的操作系統(tǒng)代碼,開發(fā)工作是在 MINIX 中使用 GNU C 編譯器,并且必須使用硬盤開機(jī)。Linux 系統(tǒng)的第一個版本代碼是上傳到 FTP 服務(wù)器上的,但是至今 Linus 也不知道怎么配置 FTP,他也從來沒有自建 web 站點(diǎn)。
每個人喜歡做的事情不一樣,對于不喜歡的事情,Linus 一律“偷懶”地尋求外援。有一個有趣的小插曲,最初 Linus 給自己寫的操作系統(tǒng)命名“Freax”,取自自由(“free”)和奇異(“freak”)的結(jié)合,末尾附上“X”,是表示其為類 Unix 系統(tǒng);但是 Linus 委托的 FTP 服務(wù)器管理員認(rèn)為“Freax”這個名字并不好聽,于是把內(nèi)核更名為 Linux。
開發(fā) Linux,只選對的
最初 0.01 版本只有 10000 行代碼,內(nèi)核編程的前六個月都是 Linus 一人完成,但是 1992 年起 Linus 開始采納其他開發(fā)人員的補(bǔ)丁。
如今,Linus 擁有一個實(shí)力超群內(nèi)核維護(hù)小組,Linux 系統(tǒng)的協(xié)助模式是 Linus 負(fù)責(zé)總體的協(xié)調(diào)和溝通,他會對接十余名核心貢獻(xiàn)者,每個人都有自己負(fù)責(zé)的具體領(lǐng)域和項(xiàng)目內(nèi)容,每次有新的開發(fā)任務(wù)時 Linus 會將它分配給對應(yīng)的人;而這十余位核心貢獻(xiàn)者又有各自的熟知并信賴的高手小團(tuán)隊(duì)。Linus 只需知道將任務(wù)交給他自己團(tuán)隊(duì)中十余名成員哪個人即可。
這樣多層次小團(tuán)體的工作模式,現(xiàn)在看起來更像是目前備受推崇的微服務(wù)開發(fā)組織架構(gòu);不過 Linus 這樣做的并不是因?yàn)轭I(lǐng)悟了康威定律的 two-pizza 團(tuán)隊(duì)原則,Linus 認(rèn)為他能信任并依賴的程序員也就 10 個左右?!澳憧赡苡泻荦嫶蟮纳缃痪W(wǎng)絡(luò),比如在 LinkedIn 上你可能有 5000 個好友;但是其中有多少人是你信任的?”在 Linus 看來,工作上的關(guān)系和生活中的朋友類似,Linux 的開發(fā)模式要保證真正熟知并且雙向協(xié)作起來都很愉快。
VMware 開源技術(shù)總監(jiān) Dirk Hohndel 曾經(jīng)問 Linus,這樣開發(fā)模式是否是可持續(xù)性的?Linus 笑著回答如果當(dāng)前團(tuán)隊(duì)中有程序員變老變胖不想繼續(xù)做下去的話也沒有問題,因?yàn)闀行碌某绦騿T補(bǔ)充進(jìn)來。Dirk 又追問 Linus 道,在內(nèi)核不斷提升迭代的過程中,是不是你具有著絕對的決定權(quán)?Linus 回答到“不是的”,他發(fā)自內(nèi)心地鼓勵大家按照自己的需求建立 fork,如果最終這樣的想法有良好的結(jié)果做證明,其精華部分就會被吸收到 Linux 內(nèi)核項(xiàng)目中。Dirk 對此總結(jié),當(dāng)今的分支發(fā)展再吸收代碼的模式其實(shí)反映的就是 Linus 本人或其團(tuán)隊(duì)的決定性。
Linus 認(rèn)為雖然大部分 linux 內(nèi)核代碼的 fork 版本不是很優(yōu)秀,但是有一小部分是好的。作為一個熱愛編程的神級人物,加上自稱不善交流有自閉傾向,Linus 身上定不會缺少程序員們常有的代碼傲骨;工作起來的 Linus 想必是極為嚴(yán)苛的,能贏他由衷贊嘆的代碼當(dāng)屬少數(shù)。
Linus 的商業(yè)化:廠商與基金會
大約在 1992 年 Linux 0.12 版本的時候,Linus 收到朋友轉(zhuǎn)發(fā)有廠商在售賣 Linux 的消息。Linus 稱當(dāng)時自己的第一反應(yīng)就是:什么?他們竟然在賣這個東西?朋友問道“這個真的是你所期望發(fā)生的嗎?”Linus 知道朋友希望他說“不”,希望得到類似于免費(fèi)開源夢等答案;但是他很誠實(shí)說“呃,是吧。但是,我不知道接下來會怎樣”。
Linus 在乎的不是價格,他在乎的 Linux 可以成為像 Unix 一樣的知名操作系統(tǒng)。在他看來商業(yè)化和推廣是很有必要的,很多開源項(xiàng)目本應(yīng)該更加壯大的,遺憾的是它們太過純粹了。其實(shí) Linus 也會擔(dān)心商業(yè)公司不正當(dāng)?shù)乩瞄_源成果,開始接觸廠商的時候,Linus 坦言他很緊張;但是很快接觸后發(fā)現(xiàn)對方很可愛,商業(yè)化意味著很多繁瑣的事情,拋開商業(yè)策略、宣傳推廣等,單單是 QA 工作就讓程序員們皺起眉頭了,正式商業(yè)公司完成了所有 Linus 沒有興趣做的事情。
一切都分工明確,內(nèi)核開發(fā)工作完全交由 Linus 主導(dǎo),任何一丁點(diǎn)的商務(wù)他都不會過問。他說可能商業(yè)化中會有很多問題,但是 Linus 完全放手。不過,Linus 指出開源項(xiàng)目的核心維護(hù)者需要做到的是“free and pure”。
Linus Torvalds 于 2003 年決定離開當(dāng)時的公司、加入開源碼發(fā)展實(shí)驗(yàn)室以專職投入到 Linux 內(nèi)核的工作,后來 Linux 基金會正式成立。正如所愿,這就是 Linus Torvalds 和基金會的分工,基金會負(fù)責(zé)接管許可證、專利、法務(wù)等問題,處理電話、郵件和文件準(zhǔn)備等工作,事無巨細(xì)。
Linus 只想做技術(shù),不想處理技術(shù)以外的事情?!叭绻闶且幻こ處?,很有可能你只想處理自己感興趣的技術(shù)問題,其他一切事情你都想移交給別人來處理?!?LinusTorvalds 說他很慶幸自己不需要擔(dān)心商業(yè)和管理的問題,他只要能領(lǐng)到工資不擔(dān)心養(yǎng)孩子上學(xué)的問題就很好。
Linux 基金會執(zhí)行總監(jiān) Jim Zemlin 稱這是正確的模式: Linux 操作系統(tǒng)標(biāo)準(zhǔn)價值 103 億美元;Linux 基金會擁有 Linux、Kubernetes、Cloud Foundry、Xen 等項(xiàng)目,以及 CNCF 基金會、Node 基金會等,整體所寫的代碼價值標(biāo)準(zhǔn)為 145 億美元;由此估算 Linux 的經(jīng)濟(jì)價值占據(jù)整體價值 71%,不愧為開源項(xiàng)目鼻祖。
堅(jiān)持了 25 年,但是已經(jīng)不能掌握內(nèi)核的全部了
“在大家的眼中,我是那個創(chuàng)造了 Linux 并依然維護(hù)它的人?!?/p>
“為什么我 25 年來依然在做同樣的事情?因?yàn)閷懗鰞?yōu)秀的代碼是件很困難的事情?!?/p>
所以,能保持優(yōu)秀的 Linux 內(nèi)核開發(fā)團(tuán)隊(duì)是非常難但是重要的事情。在問及現(xiàn)在是否還編寫 Linux 內(nèi)核的代碼時,Linus Torvalds 坦言現(xiàn)在做的項(xiàng)目管理的工作,他有一小撮頂級開發(fā)者共同協(xié)作,當(dāng)有新的任務(wù)時,他知道應(yīng)該把任務(wù)分配給誰。比起代碼編寫這樣細(xì)節(jié)的問題,他需要更加關(guān)心的是 code flow 和 process,擔(dān)當(dāng)起架構(gòu)師的角色,關(guān)心代碼穩(wěn)定和如何改進(jìn)更高層次更抽象的工作內(nèi)容。
除了總體的溝通協(xié)調(diào)工作,Linus 本人還負(fù)責(zé) merge 代碼,Linux 內(nèi)核每三個月(70 天左右)發(fā)布 1 個版本,即便在不同國家出差,Linus 也要克服時差按時發(fā)布。
“如果你對某開源項(xiàng)目感興趣,那你可以去閱讀學(xué)習(xí)源代碼,但是要警惕成為專家的想法?!盠inux 內(nèi)核那么大,沒有人了解全部、沒有人是專家,Linus 稱自己也不是面面俱到。
4Git 是為 Linux 而生,卻帶來了意外之喜
Linus 還稱創(chuàng)建 Git 從來不在他的計(jì)劃內(nèi),版本管理系統(tǒng)(和數(shù)據(jù)庫)是他最不感興趣的方向,甚至帶著一種本能逃離式的討厭。曾經(jīng)的 BitKeeper 出現(xiàn)令他眼前一亮,本地可以留有一份源代碼,很好地管理了分布式團(tuán)隊(duì)中“誰可以修改代碼”的權(quán)限問題。2005 年,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了 Linux 內(nèi)核社區(qū)免費(fèi)使用 BitKeeper 的權(quán)力。Linus 不想倒退回到?jīng)]有高效版本管理的時代;而除了 BitKeeper 之外,沒有其他軟件可以做到更好的遠(yuǎn)程協(xié)同;并且 Linus 還很在意代碼的完整性和整個管理流程。為此,自己動手研發(fā)一個軟件成為了當(dāng)時唯一的解決方案。
基于 BitKeeper 的使用經(jīng)驗(yàn)并結(jié)合了團(tuán)隊(duì)的訴求,Linus 花費(fèi)數(shù)周創(chuàng)造了 Git 的初始版本,該系統(tǒng)定位目標(biāo)特色是:
速度
簡單的設(shè)計(jì)
對非線性開發(fā)模式的強(qiáng)力支持(允許成千上萬個并行開發(fā)的分支)
完全分布式
有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項(xiàng)目(速度和數(shù)據(jù)量)
十二年來,Git 圍繞當(dāng)初設(shè)定的目標(biāo)不斷迭代,并且深受喜愛。
然而,在 Git 被創(chuàng)造出來之后的前三四年,Linus 稱業(yè)界對它并不是很認(rèn)可,因?yàn)檫@種版本管理方式與大家已經(jīng)習(xí)慣的 SVN 方式相差很大,當(dāng)時普遍反響是 Git 太難用了。
但是慢慢地,圈內(nèi)的聲音發(fā)生了變化,Linus 認(rèn)為大家應(yīng)該開始接受并適應(yīng)了 Git。
而幾乎每個開發(fā)者都會使用的 GitHub 則使用 Git 為核心技術(shù),于 2007 年問世。一個有趣的故事是,Linus 本人欣賞但不使用 GitHub,并認(rèn)為 GitHub 還有可以提高改善的地方。在一次 linux.com 的采訪中,Linus 曾經(jīng)表示 GitHub 平臺不適合內(nèi)核開發(fā),功能設(shè)計(jì)依然比較局限。
“我女兒的同學(xué)們在聽說她的父親是 Git 的創(chuàng)作者之后非常興奮,這種興奮程度要比說有個 Linux 創(chuàng)作者的父親更高。”Linus 對 Git“更走紅”的現(xiàn)象表示驚訝,一方面是因?yàn)?Git 最初只是為 Linux 內(nèi)核開發(fā)者們而建;另一方面 Git 只花費(fèi)了十天(相比常年深耕 Linux 系統(tǒng))。Linus 分析總結(jié)道,對于現(xiàn)在的 CS 學(xué)生們,Git 似乎是個更棒更有趣的產(chǎn)品;這或許代表著年輕一代更熟悉更欣賞 Git。
5對話 Linus
如果重來一次,你會做什么?
所有軟件語言中,Linus 對 C 語言情有獨(dú)鐘,并認(rèn)為它更趨同于機(jī)器思維、接近底層,可以讓開發(fā)者們從軟件角度去詮釋硬件。
Linus 表示自己曾經(jīng)接觸過硬件,但是這很危險,他稱自己對硬件“破壞力很強(qiáng)”。換而言之,Linus 很自知地沒有選擇在硬件的道路上繼續(xù)走下去。
不過,他對現(xiàn)在的 Raspberry Pi、FPGA 電路板很感興趣,如果重來一次又不可以選擇編寫 Linux 的話,他會考慮基于硬件開發(fā)版的編程。
堅(jiān)持不意味著得到,去做你喜歡的事情吧
Linus 深耕 Linux 代碼二十五年如一日,InfoQ 問到 Linus,是否只要堅(jiān)持到最后大概率而言都會收獲一些成果?Linus 表示他非常想告訴大家“堅(jiān)持就是勝利”,但是很遺憾的是事實(shí)并非如此。最重要的是找到自己感興趣的事情去做。這二十五年來做 Linux 系統(tǒng),總會有不斷新的挑戰(zhàn)出現(xiàn),所以 Linus 稱這些年非常有趣并不是充滿重復(fù)的工作。
那么為什么 Linus 可以做這么久?
最靠譜的答案也許就是 Linus 所說的他自己深深喜歡代碼,除了代碼之外的事情,他都不希望考慮或參與,比如許可證專利,與外界公眾的溝通,或者怎么保持盈利以養(yǎng)家糊口;很多技術(shù)人都是這樣的,他們希望可以心無旁騖地做技術(shù)工作,不希望被無關(guān)的瑣事打擾。
除了盡可能地縮小和聚焦自己的工作范圍,興趣還可以讓人更主動地工作。Linus 說他也會度假很喜歡潛水,但是一旦在外面“浪”過一周,他就“心癢癢”地想回去編程。
Linus 非常強(qiáng)調(diào)自我驅(qū)動,他強(qiáng)調(diào)一定要知道自己內(nèi)心想做什么,什么是真正讓你感興趣的事情。比如,如果你對某開源項(xiàng)目感興趣,那你可以去閱讀學(xué)習(xí)源代碼,但是要警惕成為專家的想法:Linux 內(nèi)核那么大,沒有人了解全部、沒有人是專家,Linus 稱自己也不是面面俱到。
Linux 成功是因?yàn)樽銐蛐疫\(yùn)
在媒體見面會上,Linux 中國的老王問道,“Linux 系統(tǒng)和您個人所取得的成功是一種偶然還是必然?”Linus Torvalds 回答說,這份成功的背后既有必然性也有偶然性。其中偶然性,是在于時機(jī)剛剛好。如果 Linux 出現(xiàn)再早幾年就可能趕不上互聯(lián)網(wǎng)的發(fā)展,沒有了網(wǎng)絡(luò)傳播、社區(qū)協(xié)作也就很難取得成果。如果再晚幾年,可能成功的就是另外的操作系統(tǒng)。也就是說,必然性在于大家對開源操作系統(tǒng)的需求。而 Jim Zemlin 則表示“Do the right thing”,并且成功需要有良好的模式。
推崇成功等于 99% 汗水和 1% 創(chuàng)新
Linus Torvalds 認(rèn)為,科技行業(yè)對創(chuàng)新的頌揚(yáng)是一種自鳴得意,沾沾自喜,以自我為中心。
他更直白地表示:“行業(yè)所說的這么多的創(chuàng)新都是扯淡,”他說,“任何人都可以創(chuàng)新,不要把‘另類思考(think different)’當(dāng)成什么了不起的事情,談?wù)撃切┒际呛翢o意義的。成功的 99% 就是把工作做好,也就是說要埋頭苦干。”
Torvalds 說:“所有真正的工作并非說的如云如雨、不著邊際的天花亂墜,而是在于細(xì)節(jié)?!?/p>
Torvalds 認(rèn)為成功的項(xiàng)目都是 99%的汗水和 1%的創(chuàng)新。
編程之外的 Linus
除了編程之外,Linus 還喜歡潛水。但是他說如果潛水超過一周,他就會感覺手癢癢想編程。
最近,Linus 在網(wǎng)絡(luò)上發(fā)布了幾塊款他推薦的好物品。首當(dāng)其中是潛水裝備 Atomic Aquatics scuba regulator。還有一件是給貓貓準(zhǔn)備的物品。
6采訪花絮碎碎語
2017 年 6 月,Linux 基金會首次在中國召開 LinuxCon,有幸參加媒體采訪,見到 Linus Torvalds 本尊。采訪環(huán)節(jié)結(jié)束后,記者們立刻將 Linus Torvalds 團(tuán)團(tuán)圍住,他微笑著耐心回答每個問題。在征求簽名時,他有些不好意思地說“我的簽名很丑”并在名字下面附上了“the ugliest signature ever”。我順勢詢問是否有一句話可以送給開發(fā)者們時,他遲疑之后說自己不敢給出這樣莊重的建議;但是他表示他認(rèn)為做自己喜歡的、并對其他人也有幫助的事情很重要。
隨后,中國開源軟件推進(jìn)聯(lián)盟主席陸首群走進(jìn)采訪室,和 Linus 見面擁抱聊天。陸先生從 20 世紀(jì)九十年代就開始推動包括 Linux 基金會在內(nèi)的開源軟件組織在中國的發(fā)展。
從進(jìn)入媒體視線、訪談交流到離開的三個多小時內(nèi),Linus Torvalds 一直面帶微笑。
在我看來,這種微笑不是職業(yè)訓(xùn)練出來的,而是一個純粹技術(shù)人發(fā)自內(nèi)心的表達(dá)。這位名揚(yáng) IT 界二十余載的神級人物,想必早已過了恃才傲物、口沸目赤的階段,內(nèi)心充盈的更多是工作中獲得的欣慰與肩負(fù)的責(zé)任。
在他提到不想關(guān)心 Linux 技術(shù)以外的任何事情、一周不寫代碼就坐立不安的時候,我似乎看見了那個 11 歲學(xué)習(xí) BASIC 并從此再也沒有離開自己所愛的大男孩兒,擁有一顆不老心的 Linus Torvalds 依然葆有著他的技術(shù)好奇。
評論