天天看點

用 Rust 重寫 Linux 核心,這可能嗎?挺進 Linux 世界,Rust 機會在哪?Linux 之父:驅動程式可能率先 Rust 化寫在最後:

在 2020 年 Linux Plumbers 峰會上,開發人員認真考慮過将 Rust 語言用于 Linux 内聯代碼的想法。此外,已經有很多 Linux 中的 Rust 内容被推向市場。比如,AWS 在 2020 年釋出了 Bottlerocket,這是一種專為運作容器而打造的基于 Linux 的開源作業系統,其中包含大量的 Rust 代碼。

另一個例子則與 Sylvestre Ledru 有關。他白天的身份是 Mozilla 的主管,而晚上卻是 Debian Linux 開發人員。 Ledru 已經使用 LLVM 編譯器基礎架構及其 Clang C 語言前端和工具鍊基礎架構,将一個 Rust 版本的 Coreutils 移植到了 Linux 中。據了解,Coreutils 是 GNU Shell 核心實用程式。基于這些内容,他已經啟動了 Linux 并運作了一些最受歡迎的 Debian 軟體包。雖然 Ledru 承認這一平台還沒有準備好投入生産,但經過很多繁重的工作後,它現在已經可以使用了。總有一天,它會發展到替代 GNU Coreutils 的地步。

挺進 Linux 世界,Rust 機會在哪?

Rust 之是以受歡迎,是因為開發人員用 Rust 更容易編寫出安全的軟體。一直以來,安全性深深困擾着微軟和谷歌等公司。此前,微軟的研究人員稱,該公司每年修複的漏洞中有 70% 與記憶體安全有關。谷歌的調查也發現,Chrome 代碼庫中所有嚴重的安全漏洞,70% 是記憶體管理的安全漏洞。

這些安全問題正好可以使用 Rust 來解決。AWS 産品經理 Samartha Chandrashekar 表示,“Rust 有助于確定線程安全,并防止與記憶體相關的錯誤,例如可能導緻安全漏洞的緩沖區溢出“。

據悉,2019 年 Linux 安全峰會揭示,大約三分之二的 Linux 核心漏洞來自記憶體安全問題。

從理論上講,Rust 可以使用本質上更安全的應用程式接口(API)完全避免這些漏洞。

那麼,關于 Linux 中的 Rust 地位,Linux 開發人員 Nelson Elhage 總結道:Linux Rust 的支援者并不是“提議将 Linux 核心用 Rust 重寫;他們隻是努力想做到讓新的代碼可以用 Rust 來編寫。Rust 支援的三個潛在關注點包括利用核心中的現有 API、架構支援”,以及處理 Rust 和 C 之間的應用程式二進制接口(ABI)相容性。

Linux 之父:驅動程式可能率先 Rust 化

當然,Rust 能否替代 C 語言,主宰 Linux 世界?Linux 之父 Linus 和 Linux 穩定核心的維護者 Greg Kroah-Hartman 或許最有發言權。

Linus 一直在“等待與觀察”。他說:“我對這個項目很感興趣,但我認為它是由非常熱衷于 Rust 的人們推動的,并且我想看看它在實踐中的效果究竟如何。”

Linus 表示,“絕不會推動 Linux 中的 Rust 運動。但是,鑒于 Rust 的優勢,我願意接受它。”

Linus 認為,Rust 的首要目标似乎是驅動程式,這是因為在那裡,你可以找到許多不同的可行目标,并且核心的這些部分相當小巧且獨立。對某些人來說,這可能沒那麼有趣,但它是非常明顯的目标。

在他看來,首先考慮驅動程式的另一個原因是“任何對驅動程式的初期嘗試都發生在架構層面。很多驅動程式隻關聯了少數幾個目标架構,是以 Rust 代碼在某些架構上不被支援的問題在這裡并不算什麼大事。”

Linux 穩定核心的維護者 Greg Kroah-Hartman 認同 Linus 的說法,“驅動程式可能是這類嘗試的首選領域,因為它們是核心源代碼依賴樹的'末端枝葉'。它們依賴于核心核心功能,但沒有任何内容依賴它們”。

Linus 知道有些人完全不喜歡使用者空間中有 Rust 的存在。“人們在抱怨使用者空間中的'Rust 化'對未來的核心來說并不是什麼好迹象,但究竟如何,我們可以拭目以待。核心與使用者空間項目是不一樣的——核心在某些方面更難處理(我們使用了很多非常奇怪的頭檔案,這些檔案推動了可以稱為“C”的邊界),但是在其他許多方面又更容易(主要因為核心是完全自包含的,是以最終二進制檔案不依賴其他項目”。

“一切都歸結為如何将用 C 編寫的核心核心結構和長期規則之間的互動映射到 Rust 結構和長期規則中,以讓 Rust 編寫的驅動程式能夠正确使用它們。想要将所有這些組織起來的開發人員将需要大量的用心努力,我祝他們好運。”Greg Kroah-Hartman 補充說。

寫在最後:

目前,幾乎可以肯定,用 Rust 重寫 Linux 這樣的事短時不會發生,但是 Linux 中使用者空間程式和驅動程式卻有可能率先 Rust 化。

繼續閱讀