ChromiumプロジェクトはビルドシステムにRustツールチェーンを追加し、Rustで書かれたサードパーティライブラリの統合を可能にすることで、セキュリティや安全性の向上、開発スピードの向上を目指している。
RustはMozillaがブラウザのために特別に開発した言語なので、Chromiumがこれに依存することになったのは必然だ。Mozillaのシステムソフトウェア業界への多大な貢献には感謝しきれない。Rust は、パフォーマンスと安全性の両立する言語であることを見事に証明した。
ChromiumセキュリティチームのメンバーであるDana Jansens氏によると、RustがChromiumプロジェクトにインターネットからの信頼できない入力を安全に解析、評価、処理するコードの書き方を規定するChromiumのRule of 2をよりシンプルかつ安全に満たしてくれることを期待している、という。
このルールは、以下の条件のうち2つだけが同時に成立することを定めている。
- 信頼できない入力
- 安全でない言語の使用
- 高い実行権限
例えば、C/C++プログラムは本質的に安全ではないので、信頼できない入力は非常に低い権限のプロセス、つまりサンドボックスの中でしか処理できない。もしC/C++のコードが信頼できる入力の処理にしか使われないのであれば、サンドボックスは必要ない。
Rustの導入によってチームが得られるメリットはたくさんある - IPCよりもシンプルな機構を利用できる、言語レベルの複雑さが軽減される、記述やレビューに要するコードが減る、コードのバグ密度が減るなどなど。これらはChromium全体の安全性、セキュリティ、開発速度に貢献するはずだ。
重要なのは、ChromiumプロジェクトはRustライブラリの統合を検討しているだけであり、開発言語としてRustを広く採用することを検討しているわけではない、という点である。
当面はサードパーティのライブラリのみをサポートする予定だ。サードパーティのライブラリはスタンドアロンなコンポーネントとして書かれており、Chromiumの実装に関する暗黙の情報を持っていない。つまり、よりシンプルで単一のタスクに集中できるAPIを持っている。別の言い方をすれば、複雑なポインタグラフや共有権限を持たせない、限られたスコープのインターフェイスである。
さらにRustライブラリの統合を検討するケースは限られている。特に、速度、メモリ、バグの点でRust実装が最適であること、IPCやC++のメモリ安全性緩和のコストを削減するためにタスクを高権限のプロセスに移動できること、代替品と比較してバグリスクの点で優位性があること、などが挙げられる。
RustとC++のコード共存を推進するアプローチとは対称的に、ChromiumチームはC++からRustへの運用のみを許可するように制限している。RustからC++への呼び出しが許可された場合、安全なRustコードが本質的に安全でないC++コードになる可能性や、C++開発者がRustルールを理解した上で違反するのを避ける必要性など、踏み入った相互運用が難しいことを、Jansens氏は合理的に説明している。
将来的に相互運用が完全な無くなるわけではないが、すべてがスムーズに機能するためには、相互運用ツールへの多大な投資と進化が必要になるだろう。一方Chromiumチームの決定は大きなペナルティを負うことなく、Rustエコシステムが提供する豊富なクレート(訳注:Rust言語のパッケージ単位)にアクセスできるようにすることを目的としているのだ。