Intelベースの会社であるJoshTriplett Crates.io開発監視委員会のメンバー、 すでに数日前にワーキンググループを発表しました オープンソーステクノロジーサミットでの彼のスピーチで これは、LinuxカーネルプログラミングでRustをCと同等にすることを目的としています。
作成中のワーキンググループでは、 Rust開発者は、Intelエンジニアと一緒に仕様を準備します これは、RustがLinuxカーネル内でプログラミングするために実装する必要のある機能を強調することができます。 システムプログラミングでは、特権プロセッサ命令の実行やプロセッサステータスに関する詳細情報の取得など、低レベルの操作が必要になることがよくあります。
Rust用にすでに開発されている同様の機能のうち、 名前のない構造のサポートがサポートされています、unions(union)、アセンブラ挿入( "asm!"マクロ)、およびBFLOAT16浮動小数点数形式。
Joshは、システムプログラミングの未来はRustにあると信じており、現代の現実におけるC言語は、過去にアセンブラーの場所であったと主張しています。 Rustは、メモリを使った低レベルの作業によって発生する特定のC言語の問題から開発者を解放するだけでなく、最新のプログラミングパラダイムの開発にも適用できます。
ジョシュのスピーチの議論の間に、考えは次のように表現されました:
LinuxカーネルにRust言語ドライバーを開発する機能を追加します。これにより、最小限の労力で、メモリ領域を解放した後のアクセス、nullポインターの参照、の制限を超えた終了などの問題を軽減する、より安全で優れたドライバーを作成できます。バッファ。
グレッグ・クロア-ハートマン、 Linuxカーネルの安定したブランチを維持する責任があり、xは、RustドライバーフレームワークがCに比べて実際の利点がある場合、カーネルに追加する意思を表明しました。 たとえば、コアAPIを介した安全なバインディングを提供します。また、Gregは、このフレームワークをデフォルトでアクティブではないオプションとしてのみ考慮し、コアアセンブリの依存関係の数にRustを含めません。
いくつかのチームがすでにこの方向に取り組んでいることが判明しました。 たとえば、Fish in a Barrelの開発者は、セキュリティを強化するためにカーネルインターフェイスと構造の上に一連の抽象レイヤーを使用して、Rust言語でLinuxカーネルのロード可能なモジュールを作成するためのツールキットを準備しました。
中間層は、bindgenユーティリティを使用して利用可能なカーネルヘッダーファイルに基づいて自動的に生成されます。 Clangは中間層を構築するために使用されます。 レイヤーに加えて、アセンブルされたモジュールはstaticlibパッケージを使用します。
同時に、組み込みシステム用のコントローラーの開発に焦点を当てた別のプロジェクトが開発されています モノのインターネットデバイス。これもbindgenを使用して、カーネルヘッダーファイルに基づいてカラーを生成します。
このフレームワークを使用すると、カーネルに変更を加えることなく、ドライバーのセキュリティを向上させることができます。 カーネル内のドライバーに追加の分離レベルを作成する代わりに、より安全なRust言語を使用して、コンパイル段階で問題をブロックすることが提案されています。
機器メーカーは、適切な監査なしにこのアプローチを急いで開発できると想定されています。
計画されているすべての機能がまだ実装されているわけではありませんが、 ただし、フレームワークはすでにこのジョブに非常に適しており、Raspberry Pi9512ボードに付属のLAN3USBイーサネットコントローラー用の動作するドライバーを作成するために使用されます。
既存のsmsc95xxドライバーが作成されました リファレンス実装として RustドライバーをC言語で書くとき。
Rustのドライバーを開発する場合、モジュールサイズとランタイムコンポーネントのオーバーヘッドは重要ではないことがわかります。これにより、リソースが限られているデバイスのフレームワークを使用できます。
ソースにsmsc95xxドライバーの情報が見つからないか、Linux上のRustに何かが実装される予定です。