眾所周知,Linux 是 C 語言的代言人。但是,時代變了,Rust 正在興起並贏得越來越多人的支持,它開始逐漸扮演 Linux 系統語言的角色。
在 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 的地步。
1 挺進 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)兼容性。
2 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 補充説。
3 寫在最後:
目前,幾乎可以肯定,用 Rust 重寫 Linux 這樣的事短時不會發生,但是 Linux 中用户空間程序和驅動程序卻有可能率先 Rust 化。