Linus Torvalds訪談:我已經不讀程式碼了

盼盼姐發表於2012-11-15

編者按:本文作者Glyn Moody是一位技術書籍作家。他曾著有《反叛的程式碼:Linux和開源的革命》(Rebel Code: Linux and the Open Source Revolution),這是一本紀錄開源軟體運動的著名黑客訪談集。十年後Glyn再次採訪Linus,此時的他已經不是當時那位說出“talk is cheap, show me the code”的不羈黑客。今天,Linux的新角色是什麼呢?

enter image description here
作者/ Glyn Moody
翻譯/ 盼盼姐

我在Linux發展的早期就有幸採訪過Linus,那是1996年的時候,當時他還住在赫爾辛基(在舊版“連線”雜誌的人物中可以讀到這篇文章)。當時正是他人生的關鍵時期,既是他個人的(他第一個孩子剛剛出生),也是事業上的。他當時正要加入Transmeta這家晶片設計公司,這事雖然沒成,但是他卻移居到美國,直至今日。

如今他來歐洲的機會已經很少了,而我藉著他將在巴塞羅那的LinuxCon歐洲2012發表演講的機會再次採訪了他,我們回顧了Linux核心發展的一些關鍵點以及上次交談以後社群的進展。

Glyn Moody: 回顧過去15年,你覺得在核心發展方面有什麼關鍵性的進展?

Linus Torvalds: 對於我來說,頭等大事就是我們所有關於擴充套件性的工作。我們已經過了3、4臺CPU就過得去的時期,現在也許4000臺才是個坎兒,但是大多數時候核心並不是瓶頸。如果你的工作負載相對穩定,我們的擴充套件性已經做得相當好。這是在付出很多努力之後的成果。

有幾百臺CPU的時候,SGI在擴充套件性方面就能派上用場。他們最開始的補丁無法合併,我們無法在普通PC上利用他們的工作成果,因為它的基礎構造就是為了服務於上千臺CPU的。當你只有一兩臺的時候,就太昂貴了。

我最擔憂的其實是為大型機準備的高效能核心,這些的原始碼和普通核心是分開的。人們為了保證程式碼基的簡潔性已經花費了很多精力,這樣在編譯的時候就可以說:我需要能為4000臺CPU服務的核心,由此生成程式碼,如果你拒絕的話,那我需要可以為2臺CPU服務的核心,同時同樣的原始碼來編譯。

回顧起來這是相當重要的一點,因為這讓原始碼變得更好了。所有SGI的努力以及統一原始碼的成果都被清洗了一遍,因為它在一百臺CPU上行不通,所以這是無法避免的。而且,這也讓核心的可維護性變得更好了。現在對於桌上型電腦來說,8到16臺CPU都是很正常的,以前擴充套件到8臺就是個門檻,現在則完全不在話下。

但是也有其他重要的事情。我們在另外一端也花費了數年的時間,手機使用者已經清楚地意識到他們的hack醜陋不堪,特別是那些在ARM微處理器上為了節省電量所做的努力。我們花費數年時間在總體的電源管理上,以及行動電話適用人群關注的一些裝置,我們努力將這些融入到核心中來。我們用了5年時間才使得電源管理系統派上用場,因為這涉及到一套完整的體系。

通常來講如果新增一個裝置,並不會影響到其餘的核心,但是電源管理是個例外,它會影響到所有的上千臺裝置的驅動。它影響到核心功能,如關閉CPU,排程機,以及包括虛擬機器在內的所有東西。

還不只是影響,它甚至還有毀掉所有東西的可能,這些都讓人很痛苦。花費了那麼多時間,我們其實只向前挪動了兩步,還倒退了一步,因為雖然這步是一個顯著的提高但是卻毀壞了我們的機器。所以退回的一步完全用來修補被破壞了的裝置。

從現實角度考慮,大部分的釋出都只是關於驅程式的工作。這其實挺無聊的,驅動程式的本質就沒什麼意思,它只是為了支援其他晶片集,畢竟,這些東西都是核心的柴米油鹽。大部分的核心其實就是驅動程式,所有我們看起來又酷又炫的工作,在為了支援新硬體而做的努力面前都黯然失色了。

架構、社群,以及Linus的角色

Glyn Moody: 為了支援新硬體有什麼架構方面的重大變革嗎?

Linus Torvalds: USB的堆疊被重新改寫了幾次,就是因為一些新用例的產生,我們覺得原來的USB子系統沒有把這些考慮進來。USB3.0也需要新的主控制器來支援,而這些東西帶來的差異足以讓我們更改核心堆疊,以使得其在不同版本上都能使用。這些改變不只限於USB,也包括PCI,PCI變成了PCIe,這時候熱插拔又出現了。

這就是傳統Linux和傳統Unix的一點不同。如果你有一個Unix工作站,啟動它之後,它就不會變,因為你不會增加裝置。現在人們對於增加USB裝置都習以為常了,但是過去可不是這樣的。為了實現熱插拔裝置,我們幾乎更改了所有的基礎構造,為了與時俱進。

Glyn Moody: 核心社群現在的發展怎麼樣了?

Linus Torvalds: 過去,我們的社群是比較扁平的。我也不知道什麼時候開始了這樣的改變,過去只有我和大約50個左右的開發者,現在這裡劃分了好多等級。補丁要到我這層估計要經過4層左右的人。我們大概3個月會發布一次,每次釋出都會牽涉到1000人左右。而這些人中的一半大概只提交了一行不太重要的程式碼,有些人就是這麼工作的,而且以後也再沒啥貢獻,這其實也挺好的。你想想如果涉及1000人的話,而有一些只是打醬油的,不可能要求我把每個人提交的補丁都過一遍。我沒這麼多時間和這麼多人打交道。

有些人比較擅長驅動器,有些人又特別擅長於特定的驅動器領域,他們就要和開發獨立驅動器或者提交補丁的人打交道。我所看到的補丁大概就要經過這些層,雖然有時候是4個,但是經常是2個人。

Glyn Moody: 那你的角色現在是什麼樣的?

Linus Torvalds:最大的改變莫過於我不再讀程式碼了。當一個補丁已經至少經過了兩個人的時候,我就可以看著這個補丁說:你們所有工作都白費了,我在這個層面進行微管理——說實在的,我不想這麼做,我也沒有能力這麼做。

所以大多數時候,它們(補丁)經過子系統的主要維護人員,這些人都是我信賴的人,我和他們共同工作長達5年,10年,甚至15年,所以我連程式碼都不用看。他們會給我一個很高等級的概述,告訴我這就是做出的變更。他們可能用5行內容告訴我什麼改變了,然後給我一個diffstat告訴我在文件中改變了15行左右,在文件中改變25行意味著diffstat可能要有上百行,因為有幾百個文件都發生了改變。所以我不用親自面對程式碼,就可以說這些變更可以執行,順便說一句,我很信任你。然後這些就會執行起來。

Glyn Moody: 那你現在的角色是?

Linus Torvalds: 從廣義上說,我是在管理人。並不是後勤方面——我並不給任何人發工資,也不擔心他們會進入到不應該的硬體中。大部分時候我在人們產生爭議或摩擦的時候介入,或者當bug出現的時候。

bug無時無刻不在產生,而人們不知道該找誰,所以他們就會把bug報告傳送給Linux核心郵件列表,幾乎沒有人能面面俱到地閱讀這些。如果在郵件列表中沒有人能搞明白的話,他們就會開始轟炸我,並且說:這機器怎麼不工作了呢?雖然我已經不讀程式碼了,但是我知道該找誰,所以最終我會作為這個bug報告的牽線人出現。這就是我現在乾的,整天整天地讀郵件。這也挺好的,我也樂於做這些事,但是這和我曾經所做的已經大相徑庭了。

其他工具?平板和雲

Glyn Moody: 這是否意味著你會寫出其他像Git一樣的工具,用於管理人,而非程式碼?

Linus Torvalds: 我目前沒有這樣的打算。也許會有新的工具產生,但是實際講,我現在所做的都是和人打交道。我們有用於人員管理的工具。這些工具的作用就是:我們知道是這部分程式碼出了問題,誰最後接觸了這些程式碼,誰是這個子系統的維護人員,因為整個系統牽涉的人太多,不用自動化系統來處理這件事是行不通的。但是多數時候工作內容都是與人接觸,不同人有不同的工作方法,過度依賴自動化裝置對於人來說也是不合適的。

我們現在幹得不錯。10年前那種痛苦糾結的時刻已經沒有了。那都是由於以前的扁平結構造成的,而現在我們改進了工具,改變了工作流。並不是只有我,整個核心沒有一個人不在這種工作流程下工作。

我會收到海量的郵件,但是我並沒有被這些郵件淹沒。我喜歡在旅行的時候通過手機讀郵件。甚至在休息的時候我也會讀郵件,因為其中90%我只需要把它們存檔就可以了。除此之外不用做任何事,抄送給我的郵件很多,告知我現在發生了什麼事。所以在旅行時,我就可以做90%的工作,甚至都不用電腦。晚上回到賓館,我會把剩下的10%解決掉。

Glyn Moody: 16年前,你說過你做的很多事都是由外在世界所推進的,現在大家對平板和移動這麼關注,這些對核心的發展有什麼影響?

Linus Torvalds: 在平板領域,很大一塊問題來源於電源管理,因為平板比手機要大。它們的電池更大,人們期待平板的電池待機更長也想要更大的螢幕,而這兩點是矛盾的。在核心方面,從硬體角度和使用角度來說,平板和手機是非常相近的,而這方面我們是有些經驗的,因為畢竟有Android。

平板的使用者介面有一些讓我們糾結的問題——但是那些和核心離得比較遠。在手機上,瀏覽器通常不是一個完整的瀏覽器——過去都是專用的移動瀏覽器;但是在平板上,大家都期待有一個完整的瀏覽器。所以關於平板的大部分問題都是在使用者空間方面的。在手機核心方面我們確實有很多問題,但是大部分問題也是平板共有的。

Glyn Moody: 關於雲端計算呢?這些對核心有什麼影響呢?

Linus Torvalds: 最大的影響在於,在雲端計算條件下,甚至伺服器端,人們都更加意識到能量功耗的問題。過去,所有關於能量功耗的問題都是在嵌入式人員以及手機這裡發生的,而在最近3-4年,伺服器端的工作人員也意識到能量的問題。因為太多的機器被聚在一起;而經常來講,使用還有峰值。如果研究亞馬遜的話,你就會發現他們峰值使用量是通常狀態下的好幾個數量級。比如說在亞馬遜的銷售方面,11月末和12月的時候,聖誕節的一個月以前,他們的工作量和整年的工作量差不多。問題是他們要為這樣的峰值擴充套件硬體基建,而平時只能用到這些能力的十分之一。所以不用每時每刻都使用能量是很重要的,因為電力對於這些巨大的伺服器來說是很大的消耗。

亞馬遜、Google,以及郵件

Glyn Moody: 亞馬遜加入到核心的工作中來了嗎?

Linus Torvalds: 亞馬遜不是一個很好的例子,其實Google更合適,因為他們僱了一堆核心工程師。多數時間,Google自己就能解決問題。我覺得亞馬遜面臨的問題更多的來自於標準配件。事實上他們已經改變了構建硬體的方法——他們現在自己有自己的硬體參考設計。他們以前都是從惠普和戴爾那裡購買硬體的,但是到頭來如果你發現你需要購置一萬臺機器的時候,還是自己設計起來更簡單,你就可以和裝置生產廠商說:我就要臺這樣的。但是他們只是最近才開始這樣做。

我不知道是亞馬遜有些落伍了,還是Google太以科技為核心了。亞馬遜在使用者空間方面做了不少工作,他們的核心是很標準的。而Google的工作核心更偏重於核心,他們做了自己的檔案系統。他們以前也是自己做硬碟的驅動,因為他們對此有一些特殊的要求。

Glyn Moody: Google在核心方面的工作對你們有用嗎?

Linus Torvalds:有幾年時間,甚至是5到10年時間,Google都是一個黑洞。他們自己僱用核心工程師,而且會突然消失得杳無音信。他們在Google內部工作,然後從此再也沒有人聽說關於這些人的事,因為他們做的都是專屬於Google的東西,而Google又沒有什麼相關的反饋。

這些現在都已經極大地改變了,可能是因為Google在我們釋出的2.4版上呆的時間太長了。他們在上面幹了好幾年,因為為自己專屬硬體定做的內部修改實在是太多了,所以升級核心對於他們來說是個大問題。一部分也因為整個的Android工程,他們也想在上游區域更加活躍一些。

現在他們更活躍了,人也不會突然消失了。事實說明核心也更好了,因為很多問題都是細枝末節上的而不再是巨大的缺口了。他們現在已經平易近人多了,只是在標準核心上做一些小改動,而不是為了適應自己的基礎裝置做一些大手術。

Glyn Moody: 最後,你說你用很多時間來回郵件,作為一個曾經的出類拔萃的黑客,你為此擔心嗎?

Linus Torvalds: 我覺得還好。我現在不再像以前那樣寫很多程式碼了。從另一方面看,其實有一些型別的程式設計我也不希望再做了。當我20歲的時候我喜歡玩裝置驅動。如果這輩子我都不用再寫裝置驅動了,我會覺得很幸福。就像頭疼少一點總不是壞事。

但是我很喜歡Git,這個可有意思多了。我開始整個設計,然後在使用者空間程式設計,而我有15年沒幹這事了,但是感覺很棒,超簡單。我什麼也不用擔心,有無盡的堆疊,分配記憶體也剛剛好。但是在核心空間,我就要擔心鎖定問題、安全問題,以及硬體問題。玩Git,是一種放鬆。但是最近我也有點厭倦了。

另外還有一個我還在做的專案是關於潛水電腦的。在kernel.org站點,曾經發生過一次非法闖入。對於維護人員來說,那可真是苦事一樁啊,最後FBI也給扯進來了,想看看到底發生了什麼。結果兩個月來,核心一點進展都沒有,雖然人們仍然可以開發核心,但是大家聚在一起的主站點當機了,而很多核心核心人員要花很多時間檢查是否有人闖入過自己的機器。當時大家都有點被害幻想症了。

所以有幾個月的時間我的工作都不存在了,因為我需要整合不同人的工作,而我們的整合伺服器當機了。所以我又開始玩我的潛水記錄軟體,無聊嘛,這個還蠻有意思的。所以到頭來我還是程式設計的,最後,我總會回到核心上。

原文連結

相關文章