ニック・デサニエ(
Open Source Summit および Embedded Linux カンファレンスでの最近のディスカッションで、Linus Torvalds 氏が次のことを述べたことを思い出してください。
- 「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