越來越多的開發(fā)者和內(nèi)核維護者青睞 rust,但在內(nèi)核開發(fā)社區(qū)中,支持 rust 和支持 c 的陣營之間存在爭議。
rust 最終應(yīng)該在 Linux 內(nèi)核中取代 C 代碼。然而,這可能需要幾十年的時間才能實現(xiàn)。但在短期內(nèi),預(yù)計會看到 Rust 代碼在 Linux 中的激增,從邊緣設(shè)備到微軟的 xbox 都有支持,盡管包括一些 Linux 內(nèi)核維護者在內(nèi)的許多人對此表示不滿。
Rust 在內(nèi)核中的使用越來越普遍,并且已經(jīng)證明其在 Linux 內(nèi)核和其他領(lǐng)域的各種用例中優(yōu)于 C,特別是在內(nèi)存安全方面。然而,Rust 相對于內(nèi)核中的 C 語言并非沒有風(fēng)險,更不用說其非常陡峭的學(xué)習(xí)曲線。越來越多的開發(fā)人員和內(nèi)核維護人員喜歡 Rust,但內(nèi)核開發(fā)社區(qū)中存在著支持 Rust 和支持 C 陣營之間的爭論,這種爭論在本周持續(xù)進行,雙方進行了激烈的交流。
Rust 相關(guān)的動態(tài)是 FOSDEM (歐洲自由和開源開發(fā)者會議) 的一個主要討論主題,這是一個由志愿者在布魯塞爾自由大學(xué) (ULB) 組織的領(lǐng)先開源會議。在數(shù)十個與 Rust 相關(guān)的演講中,由 Miguel Ojeda 做的同名演講 Rust for Linux 脫穎而出,他負責(zé)維護該項目,并且是 Linux 基金會技術(shù)咨詢委員會的成員。除了討論 Rust for Linux 項目外,他還介紹了發(fā)行工具鏈的狀態(tài)、Rust 的穩(wěn)定性,以及重要的是,你如何為內(nèi)核的開發(fā)做出貢獻。Rust for Linux 計劃還在與 GCC 和其他組織合作,以促進在 Linux 內(nèi)核中添加直接內(nèi)存訪問 (DMA) Rust 抽象。
Google 一直是將 Rust 添加到內(nèi)核以在 android 手機中運行 Linux 的堅定支持者。在內(nèi)核中使用 Rust 被認為是避免與 C 和 c++ 代碼相關(guān)的內(nèi)存漏洞并為 Android 操作系統(tǒng)增加更多穩(wěn)定性的一種方式。“Google 希望用 Rust 代碼替換 C 代碼,這只代表內(nèi)核的一小部分,但會產(chǎn)生巨大的影響,因為我們談?wù)摰氖菙?shù)十億部手機,”O(jiān)jeda 在他的演講后告訴我。
除了 Google 之外,隨著 Rust 獲得更多的架構(gòu)支持以及“維護者對它越來越滿意”,Rust 的采用和熱情也在增加,Ojeda 告訴我?!熬S護者已經(jīng)告訴我,如果可以的話,他們現(xiàn)在就開始編寫 Rust,”O(jiān)jeda 說。“如果他們可以放棄 C,他們就會這樣做。”
Ojeda 在他的演講中沒有提到的是,最近那些不愿在容器中混合 C 和 Rust 代碼的維護者遭到了強烈反對。9 月,Linux 的創(chuàng)建者 Linus Torvalds 在他的 Open Source Summit 主題演講中將這場爭議描述為具有“幾乎宗教戰(zhàn)爭的意味”。Torvalds 隨后表示,雖然這場爭議涉及健康的爭論,但有些爭論正變得非常消極。
問題在于 C 語言和 Rust 語言在跨語言邊界提交更改時存在的文化沖突。代表 Rust 人員修改 C 接口可能從 Rust 的角度來看是有意義的(反之亦然),而 C 人員則尋求 Rust 貢獻來插入 C。
這場爭議可以追溯到三年多前,當(dāng)時有人提出 Rust 具有 C 所不具備的某些安全優(yōu)勢,可以成為內(nèi)核的一部分并有可能取代它。盡管如此,該項目并沒有停滯不前。
例如,現(xiàn)在著名的緩沖區(qū)溢出攻擊或可以使用 C 和 CPU 生成的漏洞幾乎已經(jīng)過時。雖然 Rust 提供了一些安全特性和缺點,但與更容易掌握的 C 相比,它也更難學(xué)習(xí)。
在最近的 Rust 和 C 陣營之間的一次交流中,軟件工程師和 Linux 內(nèi)核維護者 Christoph Hellwig 在 1 月初的一封電子郵件中寫道:“kernel/dma 中不要有 Rust 代碼?!彼男畔⑹菫榱嘶貞?yīng)在 Linux 內(nèi)核中為 DMA API 添加 Rust 補丁的請求。一月份,在最近的一次來回討論中,在周三的 FOSDEM 周邊會議前夕,討論進一步升溫。
(2016 年,Hellwig 在一起針對當(dāng)時的 VMware 的訴訟中敗訴,聲稱 vSphere 侵犯了一個開源許可證。漢堡的德國法院駁回了該訴訟。)
上周,Hellwig 拒絕了 red Hat 工程師和內(nèi)核貢獻者 Danilo Krummrich 對為 C API 添加 Rust 抽象的支持。
Krummrich 提出,DMA 一致性分配器的 Rust 抽象層應(yīng)作為“單獨的組件”進行維護。Hellwig 上周回復(fù)了 Krummrich 的提議:
Rust 浪潮在爭議中,人們一直在大聲支持 Ojeda。他的大部分討論還涵蓋了內(nèi)核中 Rust 倡導(dǎo)者發(fā)表的聲明,從內(nèi)核的首席開發(fā)人員(包括 Linux 創(chuàng)建者 Linus Torvalds 本人)到 Red Hat、Samsung、Google、microsoft 等公司的技術(shù)負責(zé)人。
在他的演講中,Ojeda 重申了他之前在 2021 年給 Torvalds 的電子郵件中寫的一句話,他說這句話至今仍然適用:
“通過在 Linux 內(nèi)核中使用 Rust,我們希望:
由于下面提到的語言特性,用 Rust 編寫的新代碼可以降低內(nèi)存安全錯誤、數(shù)據(jù)競爭和總體邏輯錯誤的風(fēng)險。由于 Rust 的安全子集,維護人員更有信心重構(gòu)和接受模塊的補丁。由于基于現(xiàn)代語言特性且有詳細文檔支持的更易于推理的抽象,新的驅(qū)動程序和模塊變得更容易編寫。由于使用了現(xiàn)代語言,更多的人參與到內(nèi)核的開發(fā)中。通過利用 Rust 的工具鏈,我們持續(xù)確保項目中已建立的文檔規(guī)范得到執(zhí)行。例如,我們要求對所有公共 API、安全性前置條件、unsafe 代碼塊和類型不變量都進行文檔說明。與此同時,使用 Rust 和 C 之間的選擇不一定是二選一的問題。我認為,C 將無限期地用于許多內(nèi)核層和規(guī)范中。畢竟,古老的格言適用:‘如果它沒有壞,那就不要修理它。’”
Ojeda 告訴我:“有些維護人員不想放棄 C。但是何時不再使用 C 取決于成熟度。這取決于底層和架構(gòu)的成熟度,而架構(gòu)的成熟度各不相同?!?/p>