Linux カーネルに Rust 開発ツールを追加する問題について議論するための提案

ニック・デサニエ(ニック・デサウルニエ)、Google で働いており、 サポート Clang コンパイラを使用して Linux カーネルを構築し、 助ける Rustコンパイラのバグを修正し、 предложил 会議で開催する Linux 配管工カンファレンス 2020 Rustでカーネルコンポーネントを開発できるようにすることについて議論するセッション。 Nick は LLVM 専用のマイクロカンファレンスを主催しており、Rust サポートをカーネルに統合する可能性についての技術的側面について議論し (彼はすでに KBuild 用の実用的なプロトタイプを準備しています)、そのようなサポートが必要かどうかを理解するのがよいと考えています。そもそも追加する必要があるのか​​、Rust の使用に関してどのような制限を受け入れる必要があるのか​​。

Open Source Summit および Embedded Linux カンファレンスでの最近のディスカッションで、Linus Torvalds 氏が次のことを述べたことを思い出してください。 除外しなかった Rust などの言語で非コア カーネル サブシステム (ドライバーなど) を開発するためのバインディングの出現。 Rust でドライバを開発できるため、解放後のメモリ アクセス、null ポインタの逆参照、バッファ オーバーランなどの問題がなく、最小限の労力でより安全で優れたドライバを作成できるようになります。 この機能を実装するサードパーティ プロジェクトがすでにいくつかあります。

  • 「Fish in a Barrel」社の開発者 подготовили Linux カーネル用のロード可能なモジュールを Rust 言語で作成するためのツールキット。インターフェイスとカーネル構造上の一連の抽象レイヤーを使用してセキュリティを強化します。 ユーティリティを使用して、既存のカーネル ヘッダー ファイルに基づいてレイヤーが自動的に生成されます。 結合元。 Clang はレイヤーの構築に使用されます。 中間層に加えて、アセンブルされたモジュールは staticlib パッケージを使用します。
  • 香港中文大学の研究者 開発する Rust で組み込みシステムおよびモノのインターネット デバイス用のドライバーを開発するプロジェクト。また、bindgen を使用してカーネル ヘッダー ファイルに基づいてレイヤーを生成します。 このフレームワークを使用すると、カーネルに変更を加えずにドライバーのセキュリティを向上させることができます。カーネル内でドライバーの追加の分離レベルを作成する代わりに、より安全な Rust 言語を使用してコンパイル段階で問題をブロックすることが提案されています。 このようなアプローチは、適切な監査を実施せずに急いで独自のドライバーを開発する機器メーカーからの需要があると想定されます。
  • フレームワーク開発者 C2錆 CコードをRustにブロードキャストするため、 行動 最小限の手動編集でカーネル モジュールを変換する実験。 指摘されている問題の 2 つは、C2Rust でまだサポートされていない GCC 拡張機能を使用するコードがカーネルの多くの部分で使用されていることです。 この問題を解決するために、C2Rust は GCC 属性の inline、cold、alias、used、section のサポートを追加するとともに、インライン アセンブラの機能を拡張して、アライメントとパックの両方の構造 (xregs_state など) に関する問題を解決する予定です。 。 手動作業を必要とする重大な問題には、重要な C マクロを Rust マクロに変換できないこと、および CXNUMXRust は C 型を libc パッケージ内の定義に変換するため、型を再定義する必要があることが含まれますが、このパッケージはカーネル モジュールでは使用できません。

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

コメントを追加します