Rust-for-Linux プロジェクトの作者である Miguel Ojeda は、Linux カーネル開発者による検討のために、Rust 言語でデバイス ドライバーを開発するためのコンポーネントの XNUMX 番目のバージョンを提案しました。 Rust のサポートは実験的であると考えられていますが、すでに linux-next ブランチに含まれており、カーネル サブシステム上に抽象化レイヤーを作成したり、ドライバーやモジュールを作成したりする作業を開始できるほど十分に開発されています。 この開発には、Google と、Let's Encrypt プロジェクトの創設者であり、HTTPS とインターネット セキュリティを向上させる技術の開発を推進する ISRG (Internet Security Research Group) が資金提供しています。
提案されている変更により、ドライバーとカーネル モジュールを開発するための第 XNUMX 言語として Rust を使用できるようになるということを思い出してください。 Rust サポートは、デフォルトでは有効になっていないオプションとして提供されており、カーネルの必須ビルド依存関係として Rust が含まれることはありません。 ドライバー開発に Rust を使用すると、解放後のメモリ アクセス、null ポインターの逆参照、バッファ オーバーランなどの問題がなく、最小限の労力でより安全で優れたドライバーを作成できます。
Rustのメモリ安全性は、参照チェック、オブジェクトの所有権とオブジェクトの有効期間(スコープ)の追跡、およびコード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時に提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。
新しいバージョンのパッチでは、パッチの第 XNUMX 版、第 XNUMX 版、第 XNUMX 版、および第 XNUMX 版の議論中に作成されたコメントが引き続き削除されています。 新しいバージョンでは:
- Intel がサポートする 0DAY/LKP ボットをベースとした継続的インテグレーション システムに、Rust サポートのためのコンポーネント テストが追加され、テスト レポートの公開が開始されました。 私たちは、Rust サポートを KernelCI 自動テスト システムに統合する準備をしています。 GitHub CI に基づくテストは、コンテナーの使用に移行されました。
- Rust カーネル モジュールは、クレート属性「#![no_std]」および「#![feature(…)]」を定義する必要がなくなります。
- 単一のアセンブリ ターゲット (.o、.s、.ll、および .i) のサポートが追加されました。
- コード ガイドラインでは、コメント (「//」) とコードの文書化 (「///」) を区切るルールを定義します。
- is_rust_module.sh スクリプトが作り直されました。
- 「CONFIG_CONSTRUCTORS」実装に基づいた静的 (グローバル共有変数) 同期プリミティブのサポートが追加されました。
- ロック管理が簡素化されます。Guard と GuardMut が結合され、XNUMX つのパラメータ化されたタイプになります。
- デバイスを登録するときに追加のパラメータを定義することができます。
- rw_semaphore C 構造体のラッパーとして機能する「RwSemaphore」抽象化が追加されました。
- mmap を使用するために、新しい mm モジュールと VMA 抽象化が追加されました (vm_area_struct 構造のラッパー)。
- GPIO PL061 ドライバーは、「dev_*!」マクロを使用するように切り替えられました。
- コードの一般的なクリーンアップが実行されました。
出所: オープンネット.ru