coreutils の Rust 実装を使用するように Debian を適応させる

Clang コンパイラを使用して Debian GNU/Linux を構築したことで知られる Sylvestre Ledru 氏は、Rust 言語で書き直された代替ユーティリティ セット coreutils を使用した実験の成功を報告しました。 Coreutils には、sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln、ls などのユーティリティが含まれています。 coreutils の Rust バージョンを 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 やさまざまな小さなクレート パッケージを含むすべてのビルド依存関係をリポジトリにダウンロードする必要があるため、複雑でした。

ブート イメージの作成は問題ありませんでしたが、インストール後のスクリプトの多くが coreutils セットからユーティリティを呼び出すため、rust-coreutils を使用する環境にパッケージを適応させるには多大な作業が必要でした。 最も多くの問題は、必要なオプションの欠如によって引き起こされました。たとえば、「cp」ユーティリティには「--archive」および「--no-dereference」オプションがなく、「ln」は「-」をサポートしていませんでした。 「相対」オプションでは、mktemp は「-t」、同期「-fs」、インストール - 「--owner」および「-group」をサポートしていませんでした。 その他の問題は、動作の違いによって発生しました。たとえば、インストール ユーティリティは入力ファイルとして /dev/null の指定をサポートしていなかった、mkdir には「-parent」の代わりに「--parents」オプションがあったなどです。

大規模なコード ベースのアセンブリをテストする場合、大きな問題は発生しませんでした。 Firefox と LLVM/Clang をビルドする場合、Python スクリプトと cmake が使用されるため、coreutils を置き換えても影響を受けませんでした。 Linux カーネルの構築は比較的スムーズに進みましたが、発生した問題は XNUMX つだけでした。シンボリック リンクで chown を使用したときのエラー出力と、ln ユーティリティに「-n」オプションがないことです。

出所: オープンネット.ru

コメントを追加します