Microsoftは現在、ソフトウェアの安全性改善を目的としたRustの導入試験を行っている。RustFest Barcelonaでは同社エンジニアのRyan Levick氏とSebastian Fernandez氏が、MicrosoftがRustを使用する上で直面している課題について講演した。また、Adam Burch氏の説明によれば、同社は現在、低レベルのWindowsコンポーネントの書き直しなどでRustを試験的に使用しているという。
Fernandez、Levick両氏によると、現在のソフトウェア産業は安全性の低い技術基盤の上にあり、それが多くの費用の原因となっている。Microsoftの極めて控えめな試算によると、フィールドで発見されるイシュー毎に15万ドルが費やされているという。セキュリティ脆弱性のエクスプロイトによる犠牲者となった企業においては、コストはそれ以上に甚大なものになる可能性がある。ランサム攻撃の標的となり、40億ドルと推定される損害を被った英国国民保険サービス(British national health care system)は、まさにこの例だ。
これらの多くは、CとC++言語の使用に関連すると言われている。
CとC++は、マシンリソースの消費が極めて少ないため、低レベルシステムの記述に非常に適した言語です。実際にこの2つの言語は、今日私たちがシステムを構築するための基盤となっています。しかし問題は、広く周知されているとおり、安全性が極めて低いことと、開発時において安全性に対する意識が十分ではないことです。
MicrosoftがRustを試す理由はここにある。すなわち、ソフトウェアのバグ、特にセキュリティ上の脆弱性につながるバグの発生を不可能にすることを、同社は望んでいるのだ。
Rustを使用すれば、高パフォーマンスでセキュリティを重視したコンポーネントを安全に記述することが可能になります。
この主張について両氏は、証明を待つ必要があるとしながらも、それが事実であることを期待している、と述べている。
この目標に対して大きな障害となるのは、すべてをRustでスクラッチから書き直すのは不可能である、という事実だ。従って、他のテクノロジと共存せざるを得ないのだが、それは必ずしも簡単なことではない。Windowを例に取るならば、最初のハードルとなるのは、RustのコンパイラであるLLVMのWindowsサポートが不十分であることだ。同じくRustのビルドツールであるCargoも、Microsoftのビルドシステム全体を管理することができないため、既存のビルドシステムと統合する必要がある。
この一連の理由はRustツール全般のみではなく、DLLにカプセル化された共有実行ファイルにも当てはまる。これらはおもにCまたはC++で記述されており、COM、WinRT、Win32をサポートしている。
加えてMicrosoftのような企業では、人的要因など、他にも克服すべき課題がある。長年CとC++を書いてきたような人たちもRustの便利さを理解させて、開発に採用してもらう必要がある。
これに関しては、よいニュースとして、以前に私たちが経験豊かなC++プログラマにRustを紹介した時、全般的に比較的短期間でこれをものにできたという事実があります。Rustは基本的に、彼らがすでに頭の中に持っていたものを形にした言語だからです。違うバックグラウンドを持つ人たちの場合は、これよりも少々難しいかも知れませんが、学習曲線の勾配は非常に高く、習得は総じて容易であるといえます。しかも、一度習得してしまえば、高い生産性が期待できるのです。
MicrosoftでHyper-Vチームに所属するソフトウェアエンジニアのAdam Burch氏は、MicrosoftがどのようなプロジェクトでRustを使用しているかを紹介している。氏は自身が低レベルのシステムコンポーネントをリライトした経験から、Rustコンパイラによる保証は新鮮な空気を深呼吸するようだった、と説明している。
コンパイラがメモリとデータの安全性を保証してくれるおかげで、メモリの安全性に関する脆弱性を気にすることなく、コンパイルされたコードが正しいという確信を持つことができるのです。
Burch氏は、C/C++開発者が遠からずRustを採用するようになるだろうという、Fernandez氏とLevick氏の楽観論を支持すると同時に、C言語データを表現するRustデータ構造の生成や、COM APIに関わる処理など、RustをC/C++コードとインターフェースさせる場合の安全性を確保するための実践的な提案をいくつか行っている。