關於討論在Linux核心中加入Rust開發工具問題的提案

尼克·德薩尼(尼克·德索爾尼耶),在 Google 工作,提供 支持 使用 Clang 編譯器建構 Linux 內核 幫助 修復 Rust 編譯器中的錯誤, предложил 舉行會議 2020 年 Linux 水管工會議 會議討論如何使用 Rust 開發內核元件。 Nick 正在組織一個專門針對 LLVM 的微型會議,他認為討論 Rust 支援可能整合到核心中的技術方面會很好(他已經為 KBuild 準備了一個工作原型),並了解是否應該提供這種支援到底應該添加什麼,以及應該接受哪些Rust 使用限制。

讓我們回想一下,在開源高峰會和嵌入式 Linux 會議最近的一次討論中,Linus Torvalds 不排除 Rust 等語言中用於開發非核心內核子系統(例如驅動程式)的綁定的出現。 使用 Rust 開發驅動程式的能力將使我們能夠以最小的努力創建更安全、更好的驅動程序,並且不會出現釋放後記憶體存取、空指標取消引用和緩衝區溢位等問題。 已經有幾個第三方項目來實現此功能:

  • “桶中魚”公司的開發人員 準備好了 一個用 Rust 語言為 Linux 核心編寫可載入模組的工具包,在介面和核心結構上使用一組抽象層來提高安全性。 使用該實用程式根據現有核心頭檔自動生成層 賓根。 Clang 用於建構層。 除了中間層之外,組裝的模組還使用 staticlib 套件。
  • 香港中文大學研究人員 發展 一個使用 Rust 開發嵌入式系統和物聯網設備驅動程式的項目,該項目還使用 bindgen 基於內核頭檔生成層。 該框架允許您在不更改核心的情況下提高驅動程式安全性 - 建議使用更安全的 Rust 語言在編譯階段阻止問題,而不是在核心中為驅動程式建立額外的隔離等級。 假設設備製造商可能需要這樣的方法,即在沒有進行適當審核的情況下匆忙開發專有驅動程式。
  • 框架開發者 C2鐵鏽 用於將 C 代碼廣播到 Rust, 執行 透過最少的手動編輯來轉換內核模組的實驗。 注意到的問題之一是在內核的許多部分使用的程式碼使用了 C2Rust 尚未支援的 GCC 擴充。 為了解決這個問題,C2Rust計劃添加對GCC屬性inline、cold、alias、used和section的支持,並擴展內聯彙編器的功能,解決同時對齊和打包的結構(例如xregs_state)的問題。 需要手動工作的重大問題包括無法將重要的 C 巨集轉換為 Rust 巨集以及需要重新定義類型,因為 C2Rust 將 C 類型轉換為 libc 套件中的定義,但該套件不能在核心模組中使用。

來源: opennet.ru

添加評論