Rust言語をサポートするLinuxカーネル用パッチの第XNUMX版

Rust-for-Linux プロジェクトの作者である Miguel Ojeda は、Linux カーネル開発者による検討のために、Rust 言語でデバイス ドライバーを開発するためのコンポーネントの更新バージョンを提案しました。 Rust のサポートは実験的であると考えられていますが、linux-next ブランチに含めることがすでに合意されています。 新しいバージョンでは、パッチの最初のバージョンの議論中に作成されたコメントが削除されています。 Linus Torvalds はすでに議論に参加し、いくつかのビット操作を処理するロジックの変更を提案しています。

提案されている変更により、ドライバーとカーネル モジュールを開発するための第 XNUMX 言語として Rust を使用できるようになるということを思い出してください。 Rust サポートは、デフォルトでは有効になっていないオプションとして提供されており、カーネルの必須ビルド依存関係として Rust が含まれることはありません。 ドライバー開発に Rust を使用すると、解放後のメモリ アクセス、null ポインターの逆参照、バッファ オーバーランなどの問題がなく、最小限の労力でより安全で優れたドライバーを作成できます。

Rustのメモリ安全性は、参照チェック、オブジェクトの所有権とオブジェクトの有効期間(スコープ)の追跡、およびコード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時に提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。

新しいバージョンのパッチで最も顕著な変更点は次のとおりです。

  • メモリ割り当てコードは、メモリ不足などのエラーが発生したときに「パニック」状態を生成する可能性から解放されます。 Rust alloc ライブラリのバリアントが含まれており、障害を処理するためにコードを再加工しますが、最終的な目標は、カーネルに必要なすべての機能を alloc のメイン エディションに転送することです (変更はすでに準備され、標準バージョンに転送されています) Rust ライブラリ)。
  • 夜間ビルドの代わりに、rustc コンパイラのベータ リリースと安定版リリースを使用して、Rust をサポートするカーネルをコンパイルできるようになりました。 現在、rustc 1.54-beta1 がリファレンス コンパイラとして使用されていますが、今月末の 1.54 リリース以降はリファレンス コンパイラとしてサポートされる予定です。
  • Rust の標準の「#[test]」属性を使用したテストの作成のサポートと、doctest を使用してテストを文書化する機能が追加されました。
  • 以前にサポートされていた x32_86 および ARM64 に加えて、ARM64 および RISCV アーキテクチャのサポートが追加されました。
  • GCC Rust (Rust の GCC フロントエンド) と Rustc_codegen_gcc (GCC の Rustc バックエンド) の実装が改善され、すべての基本テストに合格するようになりました。
  • 赤黒ツリー、参照カウントされるオブジェクト、ファイル記述子の作成、タスク、ファイル、I/O ベクトルなど、C で書かれたカーネル メカニズムの Rust プログラムで使用するための新しいレベルの抽象化が提案されています。
  • ドライバー開発コンポーネントでは、file_operations モジュール、module! マクロ、マクロ登録、および基本的なドライバー (プローブと削除) のサポートが向上しました。
  • Binder は、ファイル記述子と LSM フックの受け渡しをサポートするようになりました。
  • Rust ドライバーのより機能的な例として、Raspberry Pi ボードのハードウェア乱数発生器用の bcm2835-rng が提案されています。

さらに、カーネルでの Rust の使用に関連するいくつかの企業のプロジェクトについても言及されています。

  • Microsoft は、Rust サポートを Linux カーネルに統合する作業に参加することに関心を示しており、今後数か月以内に Rust 上で Hyper-V 用のドライバー実装を提供する準備ができています。
  • ARM は、ARM ベースのシステムに対する Rust サポートの改善に取り組んでいます。 Rust プロジェクトは、64 ビット ARM システムを Tier 1 プラットフォームにする変更をすでに提案しています。
  • Google は、Rust for Linux プロジェクトを直接サポートしており、Rust での Binder プロセス間通信メカニズムの新しい実装を開発しており、Rust でさまざまなドライバーを作り直す可能性を検討しています。 Google は、ISRG (Internet Security Research Group) を通じて、Rust サポートを Linux カーネルに統合する作業に資金を提供しました。
  • IBM は、PowerPC システム用の Rust のカーネル サポートを実装しました。
  • LSE (Systems Research Laboratory) の研究室は、Rust で SPI ドライバーを開発しました。

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

コメントを追加します