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

Rust-for-Linux 專案的作者 Miguel Ojeda 提出了第三個元件選項,用於使用 Rust 語言開發裝置驅動程序,供 Linux 核心開發人員考慮。 Rust 支援被認為是實驗性的,但已經同意包含在 linux-next 分支中。該開發由 Google 和 ISRG(網路安全研究小組)資助,ISRG 是 Let’s Encrypt 專案的創始人,致力於推動 HTTPS 以及提高網路安全性的技術開發。

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

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

新版本的補丁繼續消除了在討論第一版和第二版補丁時所做的評論。最明顯的變化:

  • 已過渡到使用 Rust 1.57 的穩定版本作為參考編譯器,並提供了 Rust 2021 語言穩定版本的連結。先前,補丁與 Rust 的 beta 分支相關聯,並使用了一些語言功能,被歸類為不穩定。向 Rust 2021 規範的過渡使我們能夠開始工作,以避免在補丁中使用 const_fn_transmute、const_panic、const_unavailable_unchecked 以及 core_panic 和 try_reserve 等不穩定功能。
  • 補丁中包含的 Rust 庫的 alloc 版本的開發仍在繼續,並進行了修改,以消除記憶體分配函數在發生錯誤(例如記憶體不足)時可能產生的「恐慌」狀態。新版本實作了「no_rc」和「no_sync」選項來停用核心 Rust 程式碼中未使用的功能,使程式庫更加模組化。主要分配開發人員的工作仍在繼續,旨在將核心所需的變更轉移到主庫。該庫在核心層級工作所需的「no_fp_fmt_parse」選項已移至 Rust 基礎庫(核心)。
  • 程式碼已被清理,以消除在 CONFIG_WERROR 模式下建置核心時可能出現的編譯器警告。在 Rust 中建置程式碼時,會啟用額外的編譯器診斷模式和 Clippy linter 警告。
  • 建議在 Rust 程式碼中使用抽象來實作 seqlock(序列鎖)、電源管理回呼呼叫、I/O 記憶體(readX/writeX)、中斷和執行緒處理程序、GPIO、裝置存取、驅動程式和憑證。
  • 驅動程式開發工具已擴展到包括可重定位互斥體、位元迭代器、簡化的指標綁定、改進的故障診斷和獨立於資料匯流排的基礎設施。
  • 基於 refcount_t 後端,使用簡化的 Ref 類型改進了連結的工作,該後端使用同名的內核 API 來計數引用。標準分配庫中提供的對 Arc 和 Rc 類型的支援已被刪除,並且在核心層級執行的程式碼中不可用(已為庫本身準備了禁用這些類型的選項)。
  • 這些補丁包括用 Rust 重寫的 PL061 GPIO 驅動程式版本。這個驅動程式的一個特點是它的實作幾乎逐行重複現有的 C 語言 GPIO 驅動程式。對於想要熟悉在 Rust 中建立驅動程式的開發人員,我們準備了逐行比較,使他們能夠了解 C 程式碼被轉換成 Rust 中的哪些結構。
  • 主要 Rust 程式碼庫採用了 rustc_codegen_gcc,它是 GCC 的 rustc 後端,使用 libgccjit 函式庫實現提前 (AOT) 編譯。透過正確開發後端,您將可以使用 GCC 收集核心中涉及的 Rust 程式碼。
  • 除了 ARM、Google和微軟之外,紅帽也表示有興趣在 Linux 核心中使用 Rust 語言。讓我們回想一下,Google 直接為 Rust for Linux 專案提供了支持,正在開發 Rust 中 Binder 進程間通訊機制的新實現,並且正在考慮在 Rust 中重新設計各種驅動程式的可能性。 Microsoft 已開始在 Rust 中實作 Hyper-V 驅動程式。 ARM 正在努力改進對基於 ARM 的系統的 Rust 支援。 IBM 已經為 PowerPC 系統實作了 Rust 的核心支援。

來源: opennet.ru

添加評論