Windowsドライバー開発といえばC/C++言語が定番でしたが、MicrosoftはここにRustを導入しようとしています。Microsoftはブログ記事「Towards Rust in Windows Drivers」を公開し、Windowsドライバー向けのRustの現状および将来のビジョンについて説明しています。
MicrosoftはRust導入の目的として、メモリ安全性の向上、バグの削減、そしてより保守しやすいコードベースの実現をあげています。Rustは、コンパイル時にメモリ安全性を保証するため、システムレベルのプログラミングに適した言語だとされています。
Microsoftは、Surfaceチームの先行事例を活かしながら、RustをWindowsドライバー開発の「第一級言語」にする取り組みを始めています。
windows-drivers-rs:Rustでドライバーを書くためのツール群
MicrosoftはGitHub上で windows-drivers-rs を公開し、以下のようなクレートを提供しています:
-
wdk-build
:WDKとのリンクとRustバインディング生成 -
wdk-sys
:FFIバインディング(自動生成+手動マクロ) -
wdk
:安全で慣用的なAPIバインディング -
wdk-panic
,wdk-alloc
,wdk-macros
:ドライバー向け補助機能 -
cargo-wdk
:Rustでのドライバー開発を簡素化するCargo拡張
これらを使えば、WDM、KMDF、UMDFといった形式のドライバーをRustで書き、Windows 11上で動作させることが可能になります。
cargo-wdk:Rust版Visual Studioテンプレート
従来のCドライバー開発ではVisual Studioのテンプレートが活用されていました。Rustでもcargo-wdk
が同様の機能を提供し、コマンド一発でテンプレート作成からビルド、検証までが可能となります:
cargo wdk new --kmdf cargo wdk build
unsafeからsafe Rustへ:安全性のさらなる追求
現時点では、Windowsカーネルとのやり取りにはunsafe Rust
が必要ですが、Microsoftはsafe Rust
による抽象化を進めています。
WDFWindows Driver Framework)向けに安全なRustバインディングを設計中で、LookasideList
のような構造体に対する安全なラッパーも開発中です。
最終的には、これらのラッパーを crates.io
に公開し、Rustエコシステムの一部として提供する予定です。
今後の展望
Microsoftは、Rustを使ったドライバー開発をセキュアで信頼性の高い標準手法にすることを目指しています。
今後はWHCPの提出方法や、CodeQLによる静的解析の方法、ベストプラクティス集などの情報を提供する予定です。
Rustによるドライバー開発は、セキュリティと保守性の両面で大きな進化をもたらす事が期待されます。