Linux 核心補丁第二版,支援 Rust 語言

Rust-for-Linux 專案的作者 Miguel Ojeda 提出了用於以 Rust 語言開發裝置驅動程式的元件的更新版本,供 Linux 核心開發人員考慮。 Rust 支援被認為是實驗性的,但已經同意包含在 linux-next 分支中。 新版本消除了在討論第一個版本補丁時所做的評論。 Linus Torvalds 已經加入了討論並提議更改處理某些位元運算的邏輯。

回想一下,提議的更改使得可以使用 Rust 作為開發驅動程式和核心模組的第二語言。 Rust 支援作為一個選項提供,預設不啟用,並且不會導致 Rust 被包含為核心所需的建置依賴項。 使用 Rust 進行驅動程式開發將允許您以最小的努力創建更安全、更好的驅動程序,並且不會出現釋放後記憶體存取、空指標取消引用和緩衝區溢位等問題。

Rust 在編譯時通過引用檢查、跟踪對象所有權和對像生命週期(範圍)以及在代碼執行期間評估內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。

新版本補丁中最顯著的變化:

  • 當發生記憶體不足等錯誤時,記憶體分配代碼不會產生潛在的「恐慌」狀態。 其中包含 Rust alloc 庫的變體,它重新編寫程式碼以處理故障,但最終目標是將核心所需的所有功能轉移到 alloc 的主版本(更改已經準備好並轉移到標準版本) Rust 庫)。
  • 現在您可以使用 rustc 編譯器的 beta 版本和穩定版本來編譯支援 Rust 的內核,而不是夜間建置。 目前使用 rustc 1.54-beta1 作為參考編譯器,但月底發布 1.54 版本後,將支援它作為參考編譯器。
  • 新增了對使用 Rust 標準「#[test]」屬性編寫測試的支持,以及使用 doctest 記錄測試的能力。
  • 除了先前支援的 x32_86 和 ARM64 之外,還新增了對 ARM64 和 RISCV 架構的支援。
  • 改進了 GCC Rust(Rust 的 GCC 前端)和 rustc_codegen_gcc(GCC 的 rustc 後端)的實現,現已通過所有基本測試。
  • 提出了一個新的抽象級別,用於用 C 編寫的核心機制的 Rust 程序,例如紅黑樹、引用計數物件、檔案描述符建立、任務、檔案和 I/O 向量。
  • 驅動程式開發元件改進了對 file_operations 模組、module! 巨集、巨集註冊和基本驅動程式(探測和刪除)的支援。
  • Binder 現在支援傳遞檔案描述符和 LSM 掛鉤。
  • 提出了一個更強大的 Rust 驅動程式範例 - bcm2835-rng,用於 Raspberry Pi 板的硬體隨機數產生器。

此外,也提到了一些公司與在核心中使用 Rust 相關的項目:

  • 微軟表示有興趣參與將 Rust 支援整合到 Linux 核心中的工作,並準備在未來幾個月內為 Rust 上的 Hyper-V 提供驅動程式實作。
  • ARM 正在努力改進對基於 ARM 的系統的 Rust 支援。 Rust 專案已經提出了一些更改,將使 64 位元 ARM 系統成為第 1 層平台。
  • Google 直接為 Rust for Linux 專案提供支持,正在開發 Rust 中 Binder 進程間通訊機制的新實現,並正在考慮在 Rust 中重新設計各種驅動程式的可能性。 透過 ISRG(網路安全研究小組),Google 為將 Rust 支援整合到 Linux 核心中的工作提供了資金。
  • IBM 已經為 PowerPC 系統實作了 Rust 的核心支援。
  • LSE(系統研究實驗室)實驗室以 Rust 開發了 SPI 驅動程式。

來源: opennet.ru

添加評論