<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          30 周年,Linux 成功的真正原因是什么?

          共 14101字,需瀏覽 29分鐘

           ·

          2021-07-19 05:13

          微信搜索逆鋒起筆關(guān)注后回復(fù)編程pdf
          領(lǐng)取編程大佬們所推薦的 23 種編程資料!

          作者丨 Jeremy Andrews

          譯者丨屠靈

          策劃丨蔡芳芳

          Linux 誕生于 1991 年,距今已經(jīng) 30 年了。雖然它一開始只是 Linus 的一個(gè)個(gè)人項(xiàng)目,而非出于要開發(fā)一個(gè)新操作系統(tǒng)的偉大夢想,但如今的 Linux 早已無處不在。


          30 年前,當(dāng) Linus Torvalds 第一次發(fā)布 Linux 內(nèi)核時(shí),他還是赫爾辛基大學(xué)的一名 21 歲的學(xué)生。他宣布說:“我正在開發(fā)一個(gè)(免費(fèi)的)操作系統(tǒng)(這只是個(gè)愛好,不會做得很大,也不會很專業(yè)……)”。30 年后,500 強(qiáng)超級計(jì)算機(jī)和 70% 以上的智能手機(jī)都在運(yùn)行 Linux。很顯然,Linux 不僅大,而且很專業(yè)。
          30 年來,Linus Torvalds 一直在領(lǐng)導(dǎo)著 Linux 內(nèi)核的開發(fā),啟發(fā)了無數(shù)開發(fā)者和開源項(xiàng)目。2005 年,Linus 開發(fā)了 Git,用來管理內(nèi)核開發(fā)過程。Git 現(xiàn)在已經(jīng)成為最流行的版本控制系統(tǒng),受到無數(shù)開源和私有項(xiàng)目的信任。
          正值 Linux 誕生 30 周年之際,Linus Torvalds 通過電子郵件回復(fù)了 Tag 1 咨詢公司的創(chuàng)始合伙人 / 首席執(zhí)行官 Jeremy Andrews 的訪談問題(《An Interview With Linus Torvalds: Linux and Git - Part 1》),回顧并總結(jié)了過去這些年他在領(lǐng)導(dǎo)大型開源項(xiàng)目過程中得到的真知灼見。本文著重介紹 Linux 內(nèi)核開發(fā)和 Git。


          1
          Linux 內(nèi)核開發(fā)
           Linux 發(fā)展的關(guān)鍵:“我不認(rèn)識的人都在使用 Linux”


          Jeremy Andrews:Linux 無處不在,它是整個(gè)開源世界的靈感源泉。當(dāng)然,事情并不是從一開始就這樣的。1991 年,你在 comp.os.minix Usenet 新聞組中發(fā)布了一個(gè) Linux 內(nèi)核。十年后,你寫了一本書,叫作“Just for Fun: The Story of an Accidental Revolutionary”(中譯名:《只是為了好玩:Linux 之父林納斯自傳》),對那段歷史進(jìn)行了深度回顧。今年 8 月,Linux 將迎來它的 30 周年紀(jì)念日!在這個(gè)過程中,你是在什么時(shí)候開始意識到 Linux 并不僅僅是一個(gè)“愛好”的?
          Linus Torvalds:這聽起來可能有點(diǎn)荒謬,實(shí)際上我很早就開始意識到了。在 1991 年末(以及 1992 年初),Linux 已經(jīng)比我預(yù)想的要大得多。
          那時(shí)候可能只有幾百個(gè)用戶(確切地說不是“用戶”,因?yàn)槿藗冞€要不斷地對它進(jìn)行修修補(bǔ)補(bǔ)),從沒想過 Linux 后來能夠發(fā)展壯大。在我看來,最大的轉(zhuǎn)折點(diǎn)是當(dāng)我意識到其他人正在使用它,并對它感興趣,它開始有了自己的生命。人們開始發(fā)送補(bǔ)丁,這個(gè)系統(tǒng)能做的事情比我最初預(yù)想的要多得多。
          1992 年 4 月的某個(gè)時(shí)候,X11 被移植到 Linux 上(其實(shí)我也記不太清具體時(shí)間了,畢竟那是很久以前的事了),這是一個(gè)重大進(jìn)步,Linux 系統(tǒng)突然間有了 GUI 和一系列全新的功能。
          我一開始并沒有什么大計(jì)劃。這只是一個(gè)個(gè)人項(xiàng)目,并不是出于要開發(fā)一個(gè)新操作系統(tǒng)的偉大夢想。我當(dāng)時(shí)只是想了解我的新 PC 硬件的來龍去脈。
          所以,在發(fā)布第一個(gè)版本時(shí),實(shí)際上更多的是想“看看自己都做了些什么”。當(dāng)然,我希望其他人會覺得它有趣,但它并不是一個(gè)真正可用的操作系統(tǒng)。它更多的是一種概念驗(yàn)證,而且只是一個(gè)我在當(dāng)時(shí)做了幾個(gè)月的個(gè)人項(xiàng)目。
          從“個(gè)人項(xiàng)目”到其他人開始使用它、給我反饋(和 bug 報(bào)告)和發(fā)送補(bǔ)丁,對我來說是一個(gè)巨大的轉(zhuǎn)變。
          舉個(gè)最基本的例子:最初的版權(quán)許可是“你可以以源代碼的形式發(fā)布它,但不能用它賺錢”。
          對于當(dāng)時(shí)的我來說,商業(yè)版 Unix 太貴了(作為窮學(xué)生,我已經(jīng)為了買新 PC 花光了所有錢),所以我希望這個(gè)操作系統(tǒng)的源代碼是公開可用的(這樣人們就可以提供補(bǔ)丁),我希望將它開放給像我這樣負(fù)擔(dān)不起昂貴電腦和操作系統(tǒng)的人
          1991 年末(或是 1992 年初),我把許可改為 GPLv2,因?yàn)橛腥讼氚阉攒洷P的形式分發(fā)給本地 Unix 用戶組,但又想收回軟盤的成本,并補(bǔ)償他們拷貝軟盤所花費(fèi)的時(shí)間。我覺得這很合理,因?yàn)椤懊赓M(fèi)”與否并不是最重要的,最重要的是要“公開源碼”。
          最終的結(jié)果是:人們不僅在 Unix 用戶組中發(fā)布它,在幾個(gè)月之內(nèi)還出現(xiàn)了 SLS 和 Slackware 的軟盤發(fā)行版。
          與最初的那些根本性的變化相比,后來的一切都是“增量式”的。當(dāng)然,有些增量式的變化也是大跨步(IBM 的加入、Oracle 數(shù)據(jù)庫的移植、Red Hat 的首次公開募股,Android 在手機(jī)上的應(yīng)用,等等),但在我看來,它們?nèi)匀徊蝗缱畛醯摹拔也徽J(rèn)識的人都在使用 Linux”那樣具有革命性。


           Linux 成功的重要原因:修改開源許可協(xié)議,采用 GPLv2


          Jeremy Andrews:你是否曾經(jīng)后悔修改了許可協(xié)議?或者說,其他人或公司用你開發(fā)的系統(tǒng)賺了很多錢,你因此感到后悔嗎?
          Linus Torvalds:我從來沒有后悔過。
          首先,我過得還不錯(cuò)。我不是特別富有,但我是一個(gè)薪水很高的軟件工程師,可以按照自己的節(jié)奏做我喜歡做的事情。
          關(guān)鍵是我百分之百認(rèn)為這個(gè)許可是 Linux(以及 Git)取得成功的重要原因。我認(rèn)為,當(dāng)所有人都認(rèn)為他們有平等的權(quán)利,沒有人在這方面有特權(quán)的時(shí)候,他們才會變得更快樂。
          有很多項(xiàng)目采用了“雙重許可”,一方面,原作者保留了商業(yè)許可(“只要你支付了許可費(fèi)用,就可以使用它”),另一方面,項(xiàng)目也可以在 GPL 許可下開源。
          我認(rèn)為要在這種情況下建立好的社區(qū)是非常困難的,因?yàn)殚_源那一方知道自己是“二等公民”。另外,為了讓享有特權(quán)的那一方一直享有特殊的權(quán)利,需要做很多許可文書工作,這給項(xiàng)目帶來了額外的阻力。
          另一方面,我見過很多基于 BSD(或 MIT 等類似的許可)許可的開源項(xiàng)目,當(dāng)它們變得足夠強(qiáng)大,大到具備商業(yè)價(jià)值時(shí),它們就開始分裂,相關(guān)的公司不可避免地會將自己的那部分變成專有的。
          我認(rèn)為 GPLv2 能夠在“每個(gè)人都處于相同的規(guī)則之下”和“要求人們回饋社區(qū)”之間取得完美的平衡。每個(gè)人都知道,所有參與者都受到相同的規(guī)則的約束,所以這是非常公平的。
          當(dāng)然,你的投入總會得到回報(bào)。如果你只是想輕度參與項(xiàng)目,或者只是想作為一名用戶,那也是可以的。如果你真的只是這樣,就也無法控制這個(gè)項(xiàng)目。如果你真的只需要一個(gè)基本的操作系統(tǒng),而 Linux 已經(jīng)具備你想要的所有功能,那也完全沒有問題。但如果你有特殊的需求,想要為這個(gè)項(xiàng)目做一點(diǎn)事情,那么唯一的方法就是參與其中。
          這讓每個(gè)人都秉持誠實(shí)的態(tài)度,包括我在內(nèi)。任何人都可以 fork 這個(gè)項(xiàng)目,用他們自己的方式,然后說“再見了,Linus,我要維護(hù)自己的 Linux 版本”。我之所以“特別”,僅僅是因?yàn)槿藗兿嘈盼夷馨压ぷ髯龊谩?/section>
          “任何人都可以維護(hù)自己的 Linux 版本”,這讓一些人對 GPLv2 產(chǎn)生了懷疑,但我認(rèn)為這是一種優(yōu)勢,而不是劣勢。我認(rèn)為,這實(shí)際上是避免 Linux 出現(xiàn)分裂的原因:每個(gè)人都可以創(chuàng)建自己的項(xiàng)目分支。事實(shí)上,這也是“Git”的核心設(shè)計(jì)原則之一——代碼庫的每一個(gè)克隆都是一個(gè)分支,人們(和公司)再 fork 出自己的版本,完成開發(fā)工作。
          所以,分支不是問題,只要你能把好的部分合并回來。這就是 GPLv2 發(fā)揮作用的地方。能夠拉取分支,并按照自己的方式修改代碼,擁有這些權(quán)利很重要,但另一方面也同樣重要——當(dāng)一個(gè)分支被證明取得了成功,有權(quán)利把它合并回去。
          另一個(gè)問題是,除了要有支持這種工作流的工具,也要有可以支持它的心態(tài)。合并分支的一大障礙不僅是許可問題,還有“嫌隙”問題。如果分支是源于對立,那么要合并兩個(gè)分支就非常困難——不是因?yàn)樵S可或技術(shù)方面的原因,而是因?yàn)榉种еg太過對立。我認(rèn)為 Linux 避免了這種情況的發(fā)生,主要是因?yàn)槲覀円恢闭J(rèn)為分支是一件很自然的事情。而且,當(dāng)一些開發(fā)工作被證明取得了成功,嘗試將其合并回來也是很自然的。
          雖然這個(gè)答案有點(diǎn)偏離正題,但我認(rèn)為它很重要——我不后悔修改了許可,因?yàn)槲艺娴恼J(rèn)為 GPLv2 是 Linux 取得成功的一個(gè)重要原因。
          金錢不是一種很好的激勵(lì)方式,它無法讓人們團(tuán)結(jié)在一起。我認(rèn)為,參與一個(gè)共同的項(xiàng)目,并感覺到自己可以成為這個(gè)項(xiàng)目的合作伙伴,這樣才能激勵(lì)人們。
          Jeremy Andrews:現(xiàn)在,人們基于 GPLv2 發(fā)布源代碼通常是因?yàn)?Linux。你當(dāng)時(shí)是怎么找到這個(gè)許可的?你在調(diào)研其他許可方面又投入了多少時(shí)間和精力呢?
          Linus Torvalds:那個(gè)時(shí)候,有關(guān) BSD 和 GPL 的爭論非常激烈。我在閱讀各種新聞組(比如 comp.arch、comp.os.minix 等)時(shí)看到了一些有關(guān)許可的討論。
          其中兩個(gè)最主要的原因可能是 gcc 和 Lars Wirzenius。gcc 對 Linux 的發(fā)展起到了很大作用,因?yàn)槲铱隙ㄐ枰粋€(gè) C 語言編譯器。Lars Wirzenius 是我在念大學(xué)時(shí)另一個(gè)說瑞典語(瑞典語在芬蘭是小語種)的計(jì)算機(jī)系學(xué)生。
          Lasu 比我更喜歡討論與許可相關(guān)的事情。
          在我看來,選擇 GPLv2 并不算是什么重大的政治問題,主要是因?yàn)槲易畛踉谶x擇許可時(shí)太過倉促,后來需要做出修改。況且,我很感恩有 gcc,并且 GPLv2 更符合我對“你必須把源代碼合并回來”這種想法的期望。
          因此,與其另起爐灶新建一個(gè)許可,不如選擇一個(gè)人們已經(jīng)知道并且有一些律師參與其中的許可。


           Linux 之父的一天


          Jeremy Andrews:通常情況下,你的一天是怎么過的?其中有多少時(shí)間花在寫代碼上,多少花在評審代碼上,多少花在電子郵件上?你如何平衡個(gè)人生活和 Linux 內(nèi)核開發(fā)工作?
          Linus Torvalds:我現(xiàn)在寫的代碼很少,而且已經(jīng)很久沒寫了。再要寫代碼,通常是因?yàn)槿藗儗δ承┨囟ǖ膯栴}存在爭議。我修改代碼,并將其作為補(bǔ)丁發(fā)布出去,作為對解決方案的解釋說明。
          換句話說,我寫的大部分代碼更多的是作為解決方案的示例,而補(bǔ)丁是一種非常具體的例子。人們很容易陷入理論討論的陷阱,而我發(fā)現(xiàn)描述解決方案最好的方式是寫代碼片段,不一定要完整的程序,只要讓解決方案具體化一些即可。
          我的工作時(shí)間都花在電子郵件上了。主要是溝通,而不是寫代碼。事實(shí)上,我認(rèn)為這種與記者和技術(shù)博主之間的交流就是我工作的一部分——它可能比技術(shù)討論優(yōu)先級低一些,但我也花了相當(dāng)多的時(shí)間在這類事情上。
          當(dāng)然,我也會花一些時(shí)間在代碼評審上。但老實(shí)說,當(dāng)我收到一個(gè) PR 時(shí),有問題的代碼通常已經(jīng)被其他人評審過了。所以,雖然我仍然會看一下補(bǔ)丁,但實(shí)際上會更多地去關(guān)注注解,以及補(bǔ)丁的演化過程。但對于那些與我共事很久的人,我不會這么做:他們是自己子系統(tǒng)的維護(hù)者,我不需要對他們的工作指手畫腳。
          所以,很多時(shí)候,我的主要工作就是“待在那里”,執(zhí)行管理和發(fā)布任務(wù)。換句話說,我的工作通常更多地是關(guān)于維護(hù)過程,而不是底層代碼。


           Linux 之父的工作環(huán)境


          Jeremy Andrews:你的工作環(huán)境是怎樣的?比如,你是喜歡黑暗、不會受人打擾的房間,還是喜歡能看到風(fēng)景的房間?你喜歡在安靜的環(huán)境下工作,還是喜歡一邊聽音樂一邊工作?你通常使用哪種硬件?你是在終端上使用 vi 來評審代碼,還是使用某種奇特的 IDE?你是否有偏愛的 Linux 發(fā)行版作為開發(fā)環(huán)境?
          Linus Torvalds:我的房間并不“暗”,但我確實(shí)把桌子旁邊窗戶上的百葉窗關(guān)上了,因?yàn)槲也幌胍獜?qiáng)烈的陽光。所以,我的房間沒有什么風(fēng)景視野,只有一張(凌亂的)桌子,配了兩個(gè) 4k 顯示器,桌子下面有一臺強(qiáng)勁的電腦主機(jī)。還有幾臺筆記本電腦供我測試和在路上用。
          我喜歡安靜地工作。我很討厭機(jī)械硬盤的滴答聲,所以我把它們?nèi)舆M(jìn)了垃圾桶,現(xiàn)在只使用 SSD。這樣已經(jīng) 10 多年了。嘈雜的 CPU 風(fēng)扇聲也是不可接受的。
          代碼評審都是在傳統(tǒng)的終端上完成的,不過我沒有使用 vi。我使用的是“micro-emacs”這個(gè)令人討厭的東西。它與 GNU emacs 完全沒有關(guān)系,只是有些鍵綁定與它相似。我在赫爾辛基大學(xué)時(shí)就習(xí)慣用它了,到現(xiàn)在還沒改掉這個(gè)習(xí)慣。幾年前,我給它增加了(非常有限的)utf-8 支持,但它確實(shí)很老舊了,所有的跡象都表明它是在 80 年代開發(fā)的,我使用的版本是一個(gè)自 90 年代中期以來就沒有更新過的分支。
          赫爾辛基大學(xué)選擇了這個(gè)工具,因?yàn)樗梢栽?DOS、VAX/VMS 和 Unix 上運(yùn)行,這也是為什么我也會用它。到現(xiàn)在,我的手指已經(jīng)對它形成肌肉記憶了。我真的需要換個(gè)有人維護(hù)并支持 utf-8 的工具,只是我增強(qiáng)的那部分功能用起來還好,所以一直沒有強(qiáng)迫我的手指去接受新的工具。
          我的工作桌面相當(dāng)簡單:幾個(gè)文本終端,一個(gè)打開了電子郵箱的瀏覽器(還打開了其他幾個(gè)標(biāo)簽,主要是新聞和科技網(wǎng)站)。我喜歡大的桌面空間,因?yàn)槲伊?xí)慣使用大終端窗口(100x40 是我的默認(rèn)初始大小),并且并排打開好幾個(gè)。我使用了兩個(gè) 4k 顯示器。
          我在所有的機(jī)器上都安裝了 Fedora 發(fā)行版,并不是因?yàn)槲移珢鬯且驗(yàn)槲伊?xí)慣了。我并不太關(guān)心使用哪個(gè)發(fā)行版——對于我來說,選擇發(fā)行版只是在機(jī)器上安裝 Linux 和開發(fā)工具的一種方式。


           如何處理大量電子郵件?


          Jeremy Andrews:Linux 內(nèi)核郵件組(https://lore.kernel.org/lkml/) 是人們公開交流內(nèi)核開發(fā)的地方,流量非常高。你是怎么處理這么多電子郵件的?你嘗試過郵件組之外的其他協(xié)作和溝通解決方案嗎?或者說,這種簡單的郵件組對你的工作來說足夠好嗎?
          Linus Torvalds:我沒有直接閱讀內(nèi)核郵件組里的郵件,而且好幾年都沒有。郵件太多了。
          內(nèi)核郵件組里的郵件會被抄送到所有的討論當(dāng)中。當(dāng)新人加入討論時(shí),他們可以通過查看內(nèi)核郵件組來了解相關(guān)的歷史和背景。
          過去我會訂閱郵件組,讓所有沒有抄送給我的電子郵件自動(dòng)歸檔,默認(rèn)不看它們。當(dāng)一些問題需要我介入時(shí),我可以找到所有相關(guān)的討論,因?yàn)樗鼈兌荚谖业碾娮余]件里,只是在需要時(shí)才會出現(xiàn)在我的收件箱里。
          現(xiàn)在,我使用的是 lore.kernel.org 提供的功能,因?yàn)樗芎糜茫椅覀冞€基于它開發(fā)了一些工具。這樣就不需要讓郵件自動(dòng)歸檔了,我們換了一種討論方式,但基本的工作流程是一樣的。
          但很顯然,我仍然會收到很多郵件——但從很多方面來看,這些年來情況變得越來越好,而不是越來越糟。其中很大一部分原因是 Git 和內(nèi)核發(fā)布流程的改進(jìn):我們過去在代碼流程和工具方面存在很多問題。在本世紀(jì)初是最為糟糕的,當(dāng)時(shí)我們?nèi)匀辉谔幚砭薮蟮难a(bǔ)丁炸彈,我們的開發(fā)流程存在嚴(yán)重的可伸縮性問題。
          郵件組模式確實(shí)運(yùn)作得很好,但并不是說人們就不使用除電子郵件之外的其他溝通方式了:有些人喜歡各種實(shí)時(shí)聊天工具(比如傳統(tǒng)的 IRC)。雖然我不是很喜歡這樣,但很顯然有些人喜歡用它們來進(jìn)行頭腦風(fēng)暴。但這種“郵件組存檔”模式運(yùn)作得非常好,并且能夠無縫地與“開發(fā)者之間以郵件的形式發(fā)送補(bǔ)丁”和“以郵件的形式發(fā)送問題報(bào)告”相結(jié)合。
          所以電子郵件仍然是主要的溝通渠道,并且因?yàn)猷]件中可以包含補(bǔ)丁,我們可以更容易地討論技術(shù)問題。而且郵件可以跨越時(shí)區(qū),當(dāng)參與者分布在不同地區(qū)時(shí),這一點(diǎn)非常重要。


           Linux 3.0 以來,內(nèi)核開發(fā)的有趣事情


          Jeremy Andrews:我密切關(guān)注內(nèi)核開發(fā)大約有 10 年了,并在 KernelTrap 上寫與內(nèi)核有關(guān)的博文,大概是在 3.0 內(nèi)核發(fā)布時(shí)停止更新博客。3.0 內(nèi)核的發(fā)布與 2.6.x 內(nèi)核的發(fā)布相隔了 8 年。請總結(jié)一下自 3.0 版本以來內(nèi)核開發(fā)中發(fā)生的一些有趣的事情。
          Linus Torvalds:那是很久以前的事了,我不知道該從哪里開始總結(jié)。從 3.0 版本到現(xiàn)在已經(jīng) 10 年了,在這 10 年中發(fā)生了很多技術(shù)上的變化。ARM 已經(jīng)發(fā)展成熟,ARM64 已經(jīng)成為我們的主要架構(gòu)之一,并出現(xiàn)了大量新的驅(qū)動(dòng)程序和核心功能。
          如果說過去 10 年有什么有趣的事情,那一定是我們努力保持開發(fā)模式的穩(wěn)定,以及那些沒有發(fā)生改變的東西。
          在過去的幾十年里,我們經(jīng)歷了多種不同的版本號方案和不同的開發(fā)模式,3.0 版本最終確定了后來一直使用的模式。它讓“基于時(shí)間發(fā)布,版本號只是數(shù)字,與特性無關(guān)”這一說法落地了。
          在 2.6.x 版本中,我們就有了基于時(shí)間的發(fā)布模式,所以它并不是什么新東西,但 3.0 版本確實(shí)是讓這種模式板上釘釘?shù)闹陵P(guān)重要的一步。
          我們以前使用隨機(jī)編號方案(主要是在 1.0 版本之前),然后用“奇數(shù)表示開發(fā)版內(nèi)核,偶數(shù)表示穩(wěn)定的生產(chǎn)就緒版內(nèi)核”,然后在 2.6.x 版本中,我們開始進(jìn)入基于時(shí)間的發(fā)布模式。但人們?nèi)匀粚Α笆裁磿r(shí)候需要增加主版本號”存在疑問。3.0 版本正式發(fā)布后,宣告了主版本號沒有任何意義,我們盡量簡化數(shù)字,不要讓它們變得太大。
          因此,在過去的 10 年里,我們做了巨大的改變(有了 Git,就可以很容易地得到一些數(shù)字統(tǒng)計(jì)數(shù)據(jù):超過 1.7 萬人提交了大約 75 萬次代碼),但開發(fā)模式仍然相當(dāng)穩(wěn)定。
          但并非一直都是這樣的,內(nèi)核開發(fā)的前 20 年經(jīng)歷了相當(dāng)痛苦的開發(fā)模式變更,只是在過去 10 年中,發(fā)布可預(yù)測性才得到大幅提升。


           Linux 發(fā)布流程


          Jeremy Andrews:目前,最新的版本是 5.12-rc5。現(xiàn)在的發(fā)布流程標(biāo)準(zhǔn)是怎樣的?例如,-rc1 和 -rc2 有什么不同?你會在什么情況下決定正式發(fā)布其中一個(gè)給定的版本?如果在正式發(fā)布之后出現(xiàn)了大量的回歸會怎樣?這種情況發(fā)生的頻率是怎樣的?這些年來,這個(gè)過程是如何演變的?
          Linus Torvalds:我之前提到過,這個(gè)過程本身是很標(biāo)準(zhǔn)的,并且在過去十年里一直如此。在此之前,它經(jīng)歷了幾次演變,但實(shí)際上從 3.0 開始它就像時(shí)鐘一樣走得很穩(wěn)定。
          到現(xiàn)在為止,我們的發(fā)布節(jié)奏是這樣的:先是兩周的合并時(shí)間窗口,然后是大約 6 到 8 周的候選版本,然后是最終版本。這樣子差不多 15 年了。
          規(guī)則一直都是一樣的,盡管它們并不總是被完全嚴(yán)格執(zhí)行:合并時(shí)間窗口是針對那些被認(rèn)為已經(jīng)“經(jīng)過測試和準(zhǔn)備就緒”的新代碼,然后在接下來的大約兩個(gè)月里進(jìn)行修復(fù),以確保所有的問題都得到解決。有時(shí)候,那些所謂的“就緒”代碼會在發(fā)布之前會被禁用或完全推翻。
          這個(gè)過程會重復(fù),所以我們大約每 10 周發(fā)布一次。
          達(dá)到可以發(fā)布的標(biāo)準(zhǔn)是我對候選版本有足夠的信心,而這是以各種問題報(bào)告為基礎(chǔ)的。如果某些方面在 rc 后期仍然會出問題,我就極力推翻這些內(nèi)容,并建議將其放在后續(xù)的版本中。但總體而言,很少會出現(xiàn)這種情況。
          這樣就完全沒有問題了嗎?不是的。一旦內(nèi)核發(fā)布了,就會有新用戶,他們會發(fā)現(xiàn)一些在 rc 版本中沒有被發(fā)現(xiàn)的問題。這幾乎是不可避免的。這也是為什么我們需要“穩(wěn)定內(nèi)核”樹。在發(fā)布之后,我們可以繼續(xù)修復(fù)代碼。一些穩(wěn)定內(nèi)核比其他版本內(nèi)核維護(hù)的時(shí)間更長,被稱為 LTS(“Long Term Support”)版本。
          所有這些在過去十年里都沒有什么變化,盡管后來有了更多的自動(dòng)化流程。一般來說,內(nèi)核測試自動(dòng)化是很困難的——因?yàn)楹芏鄡?nèi)核是驅(qū)動(dòng)程序,十分依賴硬件的可用性。不過,我們有幾個(gè)測試場同時(shí)進(jìn)行引導(dǎo)和性能測試,以及各種隨機(jī)負(fù)載測試。這些在這幾年有了很大的改善。


           一直等待可用的 ARM 機(jī)器


          Jeremy Andrews:去年 11 月,有人說你對蘋果公司在部分新款電腦中使用的 ARM64 芯片十分感興趣。Linux 會支持它們嗎?我看到一些代碼被合并到 for-next。即將到來的 5.13 內(nèi)核有可能在蘋果 MacBook 上啟動(dòng)嗎?你有可能是它的早期采用者嗎?ARM64 有什么重大的意義?
          Linus Torvalds:我偶爾會跟進(jìn)一下,但現(xiàn)在說這些還為時(shí)過早。正如你所說的,早期支持可能會被合并到 5.13 中,但這只是一個(gè)開始,并不能說明 Linux 和蘋果電腦將來會怎樣。
          主要問題不是 arm64 架構(gòu),而是與之相關(guān)的所有硬件驅(qū)動(dòng)程序(特別是 SSD 和 GPU)。到目前為止,一些底層的東西得到了支持,但除了可以啟用硬件之外,沒有任何有用的結(jié)果。要想達(dá)到可以被人們使用的程度,還需要一些時(shí)間。
          不僅僅是蘋果的硬件得到了改進(jìn)——arm64 架構(gòu)總體上也已經(jīng)成長了很多,內(nèi)核在服務(wù)器領(lǐng)域也更具競爭力了。不久前,arm64 在服務(wù)器領(lǐng)域的競爭力還很弱,但亞馬遜的 Graviton2 和安培的 Altra 處理器——都是基于改進(jìn)后的 ARM Neoverse IP——比幾年前的產(chǎn)品要好很多。
          我已經(jīng)等了十多年都沒能等到一個(gè)可用的 ARM 機(jī)器,可能還要繼續(xù)等下去,但情況明顯比以前好了一些。
          事實(shí)上,我很早之前就想要一臺 ARM 機(jī)器。當(dāng)我還是個(gè)少年,我真正想要的是一臺 Acorn Archimedes,但可用性和價(jià)格讓我最終選擇了 Sinclair QL(M68008 處理器),然后幾年后換成了 i386。
          所以,這個(gè)想法已經(jīng)醞釀了幾十年。但到現(xiàn)在它們還沒有被廣泛使用,而且對于我來說,它們在價(jià)格和性能方面都不具競爭力。希望在不久的將來,這個(gè)想法能夠變成現(xiàn)實(shí)。


           重寫內(nèi)核會做出的改變


          Jeremy Andrews:內(nèi)核中有什么東西需要進(jìn)行完全的重寫才能達(dá)到最優(yōu)的嗎?或者說,內(nèi)核已經(jīng)有 30 年的歷史了,知識、編程語言和硬件在這 30 年里發(fā)生了很大的變化:如果現(xiàn)在讓你從頭開始重寫,你會做出哪些改變?
          Linus Torvalds:如果有必要的話我們會這么做的。我們真的很擅長重寫,那些本來會造成災(zāi)難的東西很久以前就被我們重寫了。
          我們有很多“兼容”層,不過它們一般不會造成太大問題。如果從頭開始重寫,這些兼容層是否要去掉,我們還不清楚——它們存在的目的是為了與舊二進(jìn)制文件向后兼容(通常是與舊架構(gòu)向后兼容,例如在 x86-64 上運(yùn)行 32 位的 x86 應(yīng)用程序)。因?yàn)槲艺J(rèn)為向后兼容是非常重要的,所以即使重寫,我也希望保留這些兼容層。
          所以很明顯,有很多東西并不是最優(yōu)的,畢竟任何東西都有改進(jìn)的空間。但就你提的這個(gè)問題,我不得不說,我不鄙視任何東西。有一些遺留驅(qū)動(dòng)程序,可能沒有人關(guān)心,也沒有人去清理,會做一些丑陋的事情,但這主要是因?yàn)椤皼]有人關(guān)心”。這些在過去不是問題,而一旦成為問題,我們就會積極把這些沒人關(guān)心的東西移除掉。多年來,我們已經(jīng)移除了很多驅(qū)動(dòng)程序,當(dāng)維護(hù)不再有任何意義時(shí),我們會放棄整個(gè)架構(gòu)支持。
          “重寫”的主要原因是:整個(gè)架構(gòu)不再有意義,但仍然存在一些應(yīng)用場景。最有可能的情況是,一些小型嵌入式系統(tǒng)并不需要 Linux 提供的所有東西,它們的硬件很小,需要的是更簡單、更少的系統(tǒng)功能。
          Linux 已經(jīng)有了長足的發(fā)展。現(xiàn)在,即使是小硬件(比如手機(jī)等)也比當(dāng)初開發(fā) Linux 所使用的機(jī)器強(qiáng)大得多。


           不會用 Rust 取代 C 語言來開發(fā)內(nèi)核


          Jeremy Andrews:如果用 Rust 來重寫一部分系統(tǒng)會怎樣?在這方面還有改進(jìn)的余地嗎?在內(nèi)核開發(fā)方面,你覺得是否有可能用另一種語言(比如 Rust)來取代 C 語言?
          Linus Torvalds:我不認(rèn)為我們會用 Rust 取代 C 語言來開發(fā)內(nèi)核,但可能會用來開發(fā)一些驅(qū)動(dòng)程序,也許是整個(gè)驅(qū)動(dòng)子系統(tǒng),也許是文件系統(tǒng)。所以不是“取代 C 語言”,而是“在一些有意義的地方擴(kuò)展我們的 C 代碼”。
          當(dāng)然,驅(qū)動(dòng)程序幾乎占了內(nèi)核的一半代碼,有非常大的重寫空間,但我不認(rèn)為所有人都會很期待使用 Rust 全盤重寫現(xiàn)有的驅(qū)動(dòng)程序。可能“有些人會用 Rust 開發(fā)新驅(qū)動(dòng)程序,或者適當(dāng)?shù)刂貙懸徊糠峙f驅(qū)動(dòng)程序”。
          現(xiàn)在更多的是“人們在嘗試和體驗(yàn)”Rust,僅此而已。Rust 優(yōu)勢的背后肯定存在復(fù)雜性,所以我會采取觀望的態(tài)度,看看這些優(yōu)勢是否真的奏效。


           內(nèi)核中最令 Linux 之父自豪的部分


          Jeremy Andrews:內(nèi)核中是否有你個(gè)人感到最自豪的部分?
          Linus Torvalds:我最想說的是 VFS 層(虛擬文件系統(tǒng),特別是路徑名查找)和 VM。前者是因?yàn)?Linux 在做一些基礎(chǔ)任務(wù)(在操作系統(tǒng)中查找文件名確實(shí)是一個(gè)核心的操作)時(shí)比其他系統(tǒng)都要好得多,后者主要是因?yàn)槲覀冎С?20 多種架構(gòu),但仍然在使用一個(gè)基本統(tǒng)一的 VM 層,我認(rèn)為這一點(diǎn)很了不起。
          但與此同時(shí),這很大程度上取決于“你最關(guān)注內(nèi)核的哪一部分”。內(nèi)核很大,不同的開發(fā)者(和不同的用戶)會關(guān)注不同的方面。有些人認(rèn)為調(diào)度是內(nèi)核中最令人感到興奮的部分,有些人則關(guān)注設(shè)備驅(qū)動(dòng)程序的細(xì)節(jié)(我們有很多這樣的驅(qū)動(dòng)程序)。我個(gè)人在 VM 和 VFS 這兩個(gè)方面參與得更多,所以自然會提到它們。


           Linux 在這個(gè)方面比其他操作系統(tǒng)做得更好


          Jeremy Andrews:我看了這個(gè)關(guān)于路徑名查找的描述(https://www.kernel.org/doc/html/latest/filesystems/path-lookup.html ,它比我預(yù)想的要復(fù)雜。是什么讓 Linux 在這方面比其他操作系統(tǒng)做得更好?你說的“更好”是什么意思?

          Linus Torvalds:路徑名查找是一個(gè)非常常見和基礎(chǔ)的任務(wù),以至于大多數(shù)非內(nèi)核開發(fā)者不認(rèn)為它會是一個(gè)問題:他們只知道打開文件,并認(rèn)為這是理所當(dāng)然的。
          但要做好其實(shí)是相當(dāng)復(fù)雜的。確切地說,因?yàn)閹缀跛械胤蕉荚谟寐窂矫檎遥詫π阅芤蠛芨撸掖蠹叶枷M?SMP 環(huán)境中具有良好的伸縮性,而在鎖定方面又很復(fù)雜。你不想發(fā)生 IO,那么緩存就非常重要。路徑名查找是如此的重要,以至于你不能把它留給底層的文件系統(tǒng),因?yàn)槲覀冇?20 多種不同的文件系統(tǒng),讓它們各自擁有自己的緩存和鎖定機(jī)制將是一場徹頭徹尾的災(zāi)難。
          所以,VFS 層的一個(gè)主要任務(wù)是處理所有路徑名組件的鎖定和緩存問題,以及所有的序列化和掛載點(diǎn)遍歷問題,這些都是通過無鎖算法(RCU)來完成的,但也會有一些非常智能的鎖(Linux 內(nèi)核的“l(fā)ockref”鎖是一種非常特殊的“帶有引用計(jì)數(shù)的自旋鎖”,表面上看是為 dcache 緩存而設(shè)計(jì)的,但本質(zhì)上是一個(gè)專門的鎖感知引用計(jì)數(shù),可以在某些常見情況下消除鎖)。
          最終結(jié)果是:底層文件系統(tǒng)仍然需要對未緩存的內(nèi)容進(jìn)行查找,但它們不需要關(guān)心緩存和一致性規(guī)則以及與路徑名查找相關(guān)的原子性規(guī)則。VFS 會為它們處理好所有這些問題。
          而且它的性能比任何其他操作系統(tǒng)都要好,基本上可以在擁有數(shù)千個(gè) CPU 的機(jī)器上完美運(yùn)行。
          所以不僅僅是“更好”,而是“大寫”的更好。沒有什么能與之相提并論的了。Linux dcache 是獨(dú)一無二的。


           新冠疫情對內(nèi)核開發(fā)的影響


          Jeremy Andrews:過去的一年對全世界來說是艱難的一年。新冠疫情對內(nèi)核開發(fā)進(jìn)程帶來了哪些影響?
          Linus Torvalds:實(shí)際上,得益于我們一直以來的工作方式,它的影響非常小。電子郵件真的是一個(gè)很好的工具,我們并不依賴面對面的會議。
          是的,它確實(shí)影響了去年的年度內(nèi)核峰會(今年的峰會仍懸而未決),大多數(shù)會議被取消或轉(zhuǎn)為線上進(jìn)行。以前在辦公室工作的人大都開始在家里工作(但很多核心內(nèi)核維護(hù)者在之前已經(jīng)這么做了)。所以,周圍的很多東西都發(fā)生了改變,但內(nèi)核開發(fā)還是像以前一樣。
          很顯然,新冠疫情在其他方面影響了我們所有人的生活,但總的來說,作為幾乎完全通過電子郵件進(jìn)行交流的內(nèi)核開發(fā)人員,我們可能是受影響最小的。


          2
          版本控制系統(tǒng) Git
           對 Git 項(xiàng)目領(lǐng)導(dǎo)權(quán)主動(dòng)放手


          Jeremy Andrews:Linux 只是你對開源做出的眾多貢獻(xiàn)中的一個(gè)。在 2005 年,你還創(chuàng)建了 Git,一個(gè)非常流行的分布式源代碼控制系統(tǒng)。你快速地將 Linux 內(nèi)核源代碼樹從專有的 Bitkeeper 遷移到開源的 Git 系統(tǒng)中,并在同年將維護(hù)工作移交給了 Junio Hamano。這里有很多有趣的故事,是什么原因促使你這么快就將項(xiàng)目的領(lǐng)導(dǎo)權(quán)移交了出來,你是如何找到并選擇了 Junio 的?
          Linus Torvalds:答案可以分為兩個(gè)部分。
          首先,我并不想創(chuàng)建一個(gè)新的源代碼控制系統(tǒng)。開發(fā) Linux 是因?yàn)橛布蛙浖g的底層接口很吸引我——基本上是出于個(gè)人的熱愛和興趣。相反,開發(fā) Git 是因?yàn)榇_實(shí)有這個(gè)需要:不是因?yàn)槲矣X得源代碼控制很有趣,而是因?yàn)槲沂直梢暿忻嫔系拇蠖鄶?shù)源代碼控制系統(tǒng)。而我覺得最合適的、在 Linux 開發(fā)當(dāng)中很好用的 BitKeeper 已經(jīng)無法維持下去了。
          我開發(fā) Linux 已經(jīng)超過 30 年了(距離第一個(gè)版本的周年紀(jì)念還有幾個(gè)月,但在 30 年前我就開始研究 Linux 的“前身”了),并且一直在維護(hù)它。但 Git 呢?我從來沒有想過我真的想要長期維護(hù)它。我喜歡用它,而且在某種程度上,我認(rèn)為它是最好的 SCM,但它并不是我的興趣所在。
          所以我總是希望別人來為我維護(hù) SCM——事實(shí)上,如果當(dāng)初我不用自己開發(fā)這個(gè) SCM,我會很開心。
          以上就是故事的背景。
          至于 Junio,他實(shí)際上是最早加入 Git 開發(fā)隊(duì)伍的人員之一。他在我將 Git 的第一個(gè)非常粗糙的版本公開后的幾天內(nèi)提交了第一次變更代碼,所以 Junio 在 Git 一開始就參與其中了。
          但我之所以把項(xiàng)目交給 Junio,并不是因?yàn)樗堑谝慌鷧⑴c項(xiàng)目的人。在維護(hù)了 Git 幾個(gè)月之后,讓我決定將項(xiàng)目交給 Junio 維護(hù)者的真正原因是“好品味”——一個(gè)很難描述的概念。我真的想不到還有什么更好的描述:編程主要是為了解決技術(shù)問題,但如何解決這些問題以及如何思考也很重要。隨著時(shí)間的推移,你開始意識到:有些人就有這種“好品味”,他總能選擇正確的解決方案。
          我不想將編程說成是一門藝術(shù),因?yàn)樗鼘?shí)際上主要是關(guān)于“好的工程”。我很喜歡托馬斯·愛迪生的那句“天才是百分之一的靈感加上百分之九十九的汗水”:編程涉及的幾乎都是細(xì)枝末節(jié)的東西和日常繁重的工作。但是,那百分之一的“靈感”,也就是“好品味”,不僅要解決問題,而且要干凈、漂亮地解決。
          Junio 就有那種“好品味”。
          每次提到 Git,我都想試著講清楚:我在一開始提出了 Git 的核心思想,并經(jīng)常因?yàn)檫@部分工作而獲得太多榮譽(yù)。Git 的這 15 年,我也只是在第一年真正參與了項(xiàng)目。Junio 是一個(gè)優(yōu)秀的維護(hù)者,是他讓 Git 變成現(xiàn)在的樣子。
          順便說一下,關(guān)于“好品味”,以及找到擁有好品味的人,并信任他們——不僅僅 Git 是這樣,Linux 也是這樣。與 Git 不一樣的是,Linux 這個(gè)項(xiàng)目我仍然在積極維護(hù),但與 Git 一樣的是,Linux 也是一個(gè)有很多人共同參與的項(xiàng)目。我認(rèn)為,Linux 的一大成功是它擁有數(shù)百名維護(hù)者,他們都具備了“好品味”,并維護(hù)著內(nèi)核的不同部分。


           項(xiàng)目維護(hù)并非“非黑即白”


          Jeremy Andrews:你有沒有過這樣的經(jīng)歷:把控制權(quán)交給維護(hù)者,然后發(fā)現(xiàn)這是一個(gè)錯(cuò)誤的決定?
          Linus Torvalds:我們的維護(hù)體系從來就不是非黑即白的,所以不會出現(xiàn)這種情況。事實(shí)上,我們甚至沒有將維護(hù)權(quán)正式記錄下來:我們確實(shí)有一個(gè) MAINTAINERS 文件,但那只是為了讓你在遇到問題時(shí)能夠找到對的人,并不是某種排他所有權(quán)的標(biāo)志。
          所以,“誰負(fù)責(zé)什么東西”更像是一種流動(dòng)的指南,以及“這個(gè)人很活躍,工作做得很好”,而不是“我們把所有權(quán)給了那個(gè)人,然后他搞砸了”。
          從某種意義上說,我們的維護(hù)體系也是流動(dòng)的。假設(shè)你是某個(gè)子系統(tǒng)的維護(hù)者,如果你需要另一個(gè)子系統(tǒng)的東西,是可以跨界的。通常人們在這樣做之前都會進(jìn)行廣泛的溝通,而且這種事情確實(shí)發(fā)生了。這并不是“你只能動(dòng)這個(gè)文件”之類的硬性規(guī)定。
          實(shí)際上,這與前面討論的有關(guān)許可的事情有些聯(lián)系。“Git”的另一個(gè)設(shè)計(jì)原則是“每個(gè)人都有自己的代碼樹,但沒有哪一個(gè)代碼樹是特殊的”。
          因?yàn)楹芏嗥渌?xiàng)目都使用了工具——比如 CVS 或 SVN——這些工具會讓一些人變得“特殊”,賦予了他們某種“所有權(quán)”。在 BSD 世界里,他們稱之為“commit bit”:給一個(gè)維護(hù)者“commit bit”意味著他可以將代碼提交到中央代碼庫。
          我一直很討厭這種模式,因?yàn)樗鼤豢杀苊獾貙?dǎo)致政治“小團(tuán)體”的出現(xiàn)。在這種模式下,總有一些人是特殊、隱性受信任的。問題的關(guān)鍵甚至不在于“隱性受信任”,而在于硬幣的另一面——其他人不被信任,他們被定義成局外人,必須受制于監(jiān)護(hù)者。
          同樣,在 Git 開發(fā)中也不存在這種情況。每個(gè)人都是平等的,任何人都可以克隆代碼,做自己的開發(fā),做好了,就可以合并回來。
          所以,沒有必要給人們特權(quán),也不需要“commit bit”。這樣就可以避免出現(xiàn)政治“小團(tuán)體”,也不需要“隱性信任”。如果他們做得不好——或者更常見的是,最終消失了,并轉(zhuǎn)向了另一個(gè)興趣——他們的代碼就不會被合并回來,也不會阻礙其他有新想法的人。


           對 Git 特性的看法


          Jeremy Andrews:Git 有沒有哪些新特性讓你印象深刻,并成為你工作流的一部分?還有哪些特性是你想要增加的?
          Linus Torvalds:我對 Git 的需求總是最早得到滿足的,所以,對于我來說,Git 沒有“新”特性。
          這些年來,Git 確實(shí)有很大的改進(jìn),有一些在我的工作流中已經(jīng)體現(xiàn)出來了。例如,Git 的速度一直都很快——畢竟這是我的設(shè)計(jì)目標(biāo)之一——但它的大部分特性最初是圍繞 shell 腳本而構(gòu)建的。多年來,大多數(shù) shell 腳本都已經(jīng)消失了,這意味著我可以比原來更快地應(yīng)用 Andrew Morton 的補(bǔ)丁。這一點(diǎn)令人感到欣慰,因?yàn)檫@實(shí)際上是我早期用于性能測試的基準(zhǔn)之一。
          所以,Git 對我來說一直都很好,而且變得越來越好。
          Git 最大的改進(jìn)在于“普通用戶”的使用體驗(yàn)變得更好了。一部分原因是人們在學(xué)習(xí) Git 工作流的過程中逐漸習(xí)慣了它,但更多的是因?yàn)?Git 本身變得更易于使用。

          6 個(gè)“嚇人”的 Linux 命令

          10 本最佳 Linux、UNIX 編程書籍

          Linux 新手入門的一些基本知識點(diǎn)整理

          下載!《鳥哥 Linux 私房菜》PDF

          Linux 開發(fā)過程那么麻煩,是否值得?

          點(diǎn)個(gè)在看少個(gè) bug ??
          瀏覽 32
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美操逼免费看 | 欧美性猛交XXXXXX | 亚洲天堂av在线 亚洲天堂影音先锋 | 久色视频在线 | 亚洲AV人人澡人人爽人人乐 |