調整 Debian 以使用 coreutils 的 Rust 實現

Sylvestre Ledru 因其使用 Clang 編譯器建立 Debian GNU/Linux 的工作而聞名,他報告了使用另一組實用程式 coreutils(用 Rust 語言重寫)的成功實驗。 Coreutils 包括 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls 等實用程式。對於 Rust 版本 coreutils 整合到 Debian 的第一階段,設定了以下目標:

  • 為 Debian 和 Ubuntu 打包 coreutils 的 Rust 替代品。
  • 使用 rust-coreutils 啟動帶有 GNOME 桌面的 Debian。
  • 從儲存庫安裝 1000 個最受歡迎的軟體包。
  • 在具有 rust-coreutils 的環境中從 Firefox、LLVM/Clang 和 Linux 核心原始碼進行建置。

在為 Rust/coreutils 創建了 100 多個補丁後,我們成功實現了所有預期目標。正在進行的工作包括實現缺少的實用程式和選項、提高程式碼的品質和一致性、開發測試套件以及消除從GNU Coreutils 運行測試套件時發生的崩潰(到目前為止,141 個測試中有613 個測試已成功運行) )。

在創建 rust-coreutils 套件時,決定不取代 coreutils 套件,而是提供它們並行工作的能力。 Rust 語言中的實用程式選項安裝在 /usr/lib/cargo/bin/ 中,並透過將此目錄新增至 PATH 環境變數來啟動。建立 rust-coreutils 套件很複雜,因為需要將所有建置依賴項下載到儲存庫中,包括 Rust 和各種小板條箱包。

建立啟動映像不是問題,但調整軟體包以適應具有 rust-coreutils 的環境需要大量工作,因為許多安裝後腳本從 coreutils 集中呼叫實用程式。最大數量的問題是由於缺乏必要的選項引起的,例如,“cp”實用程式沒有“--archive”和“--no-dereference”選項,“ln”不支援“-相對”選項,mktemp 不支持「-t」、同步「-fs」、安裝中「--owner」和「-group」。由於行為差異而出現了其他問題,例如,安裝實用程式不支援指定 /dev/null 作為輸入文件,mkdir 有“--parents”選項而不是“-parent”等。

在測試大型程式碼庫的組裝時,沒有出現重大問題。建構 Firefox 和 LLVM/Clang 時,使用了 python 腳本和 cmake,因此替換 coreutils 不會影響它們。建立 Linux 核心的過程相對順利,只出現了兩個問題:使用帶有符號連結的 chown 時出現錯誤輸出以及 ln 實用程式中缺少「-n」選項。

來源: opennet.ru

添加評論