- VolvoにおけるRust導入事例:非常に大きな企業で静かにRustが使われている
- Julius Gustavssonは2019年から、Volvoの低消費電力プロセッサECU(電子制御ユニット)の主要ソフトウェアアーキテクトを務めている
- このECUは車両の(低電力側の)電力管理を担当しており、EVには大容量の高電圧バッテリーがある一方で、従来の12Vラインも依然として存在する
- ECUは必要なときに電気システムを起動する役割を担う。たとえば車両に近づいたときにシステムをオンにする必要がある
- Juliusは2017年にVolvoへ入社した時点ですでにRustを知っており、既存のCやC++コードを置き換えられる可能性を見ていた
- 低消費電力プロセッサはRustの利用に非常に適していた。安全上重要なコンポーネントには分類されず、ARM Cortex-Mプロセッサだったため、Rust利用における技術的・官僚的な障壁がなかった
- 現在、EX90とPolestar 3は、Rustなしでは動かない組立ラインで生産されている
Rustを選んだ理由
- Juliusの最初の仕事は、Adaを多用する航空交通管制ソフトウェアを構築することだった。当時の会社のコンセンサスは、Adaは難解すぎて独占的だというものだった
- その後およそ15年間、CとC++の混在環境を使ってきたが、どの会社でもメモリ関連のバグは常に問題だった
- 不変条件や前提は明文化されていないものの、全員が守らなければならないコードベースが大半だった。プロジェクトの複雑さやチーム規模が大きくなるにつれて、どこかの時点で破綻せざるを得なかった
- Rustは1.0リリース前の2015年に知り、リリース後にさらに関心を持つようになった。Volvoに入社した時点では、趣味として多少の経験があった
- ECUプロジェクトでRustを選んだのは突然の決断ではなかった。プロトタイプ作成時にRustでAndroidと相互運用するHALを作ってシステムを制御してみたところ、コンパイルが通った直後にファンが動き始め、とても印象的だった
進捗状況
- 安全上重要ではなく、一般的なハードウェアで動作するためRustに適していただけでなく、機能セットが限定されていたことから、プロジェクト自体も非常に分かりやすかった
- 2020年にはCで最初の概念実証を作成した後、Rustでプロジェクトを継続した。CANを通じて車両のほかのシステムと通信する必要があり、すべての診断システムを実装し、標準のVolvoプロトコルを移植しなければならなかった
- 多くを再実装する必要はあったが、CやC++と比べてはるかに少ないバグしか書いていないことに気づいた
- 他チームとの定例会議で、Juliusが問題を持ち出すことはほとんどなく、成果を見せると同僚たちはしばしば感銘を受けていた
他の人にもRustを勧めますか?
- 非常に厳格な信頼性と可用性の要件があり、実際にそれをリリースして正しいと確信したいあらゆるプロジェクトにおいて、Rustは優れた選択肢である
- Cargoやその他の利用可能なツールのおかげで、高品質なソフトウェア開発ライフサイクル全体が本当に良い体験になる
- コンパイルできたときはほぼ確実に動作するため、他の人がコードを引き継いで安全に修正でき、離職率の高いチームでもうまく機能する
- プロトタイピングに関しては、コンパイラがエッジケースや細部をより多く詰めることを強いるため、最良の選択ではないかもしれない
- 「これにRustを使えるか?」と問うのではなく、「なぜこれにRustを使えないのか?」と問い、議論すべき段階に来ている
妨げになった不足点は何ですか?
- 要件に適切に合致するソフトウェアを作るのは簡単ではなかったが、その主因はツールの問題だった
- たとえば組み込みターゲットでユニットテストを実行するのは難しかった。コードカバレッジ、ランタイムプロファイリング、ソフトウェアBOM、ライセンス追跡などにも難しさがあった
- Knurlingプロジェクトのようなツールは大いに役立ったが、それでも自分たちでやらなければならないことは多い
今後もRustを使いますか?
- はい。Juliusは他のプロジェクトでもRustを選ぶよう積極的に後押ししている
- 社内の複数の階層で、全体的にRustへの熱意があるようだ
- 最終プロジェクト発表では、経営陣の間で、より多くの領域でRustの活用を模索すべきだという共通認識があった
結論
- これまでのところ、VolvoにおけるRustの利用は大きな成功を収めているように見える。人々は満足しており、製品品質も高く、会社は今後さらに多くのRustを使う準備ができているようだ
- まだやるべきことは多いが、Ferroceneのような安全重視のツールが利用可能になってきたことで、Rustは自動車産業で使う準備がこれまで以上に整っている
GN⁺の見解
- Rustを使った組み込みソフトウェア開発は、メモリ安全性と信頼性の面で大きな利点がある。特に安全が重要な自動車産業では、Rust導入が加速していくとみられる
- ただし、既存のC/C++エコシステムの膨大なレガシーと開発者層を考慮すると、完全移行よりも段階的な導入が現実的だろう。RustとC/C++の相互運用性改善が重要な課題になりそうだ
- 組み込み開発向けのRustツールチェーンはまだ完全ではない。コミュニティ主導で急速に進化しているが、商用レベルの安定性と支援のためには企業の投資と参加が必要に見える
- C++と比べると、依然として学習曲線はあるが、Rustの強力な型システムと所有権の概念は、長期的には開発生産性とコード品質の向上に寄与するだろう。教育とオンボーディングへの投資も伴う必要がある
- Volvoの事例のように、新しいプロジェクトから段階的にRustを適用するのが良い戦略である。既存コードベースの部分的な書き換えとRustコンポーネントの統合が現実的なアプローチになるだろう
4件のコメント
「Adaは難解すぎて独占的」という意見は、ちょっと意外ですね。どちらも仕事で使った立場からすると、AdaよりC++のほうがずっと難解に感じますが……
ともかく、Safety-Criticalにも使える「認証済み」のRust開発環境が早く出てきてほしいです。AdaCoreが取り組んでいるので、いつかは使えるようになるでしょうか?
GNAT Pro for Rust: 組み込み向けRust開発環境
認証が問題ですね……。解決すれば、だんだんとより多くの場所で使おうとするような気はします。
一方、UberはZigをかなり広く使っています。Zig財団の収益の半分弱をUberに依存しています。
2024 Financial Report and Fundraiser
組み込み分野ではありませんが、うちの会社内でも社内で検討するチームが増えているようです。
特に、Airflow の Python コード向けの interop ライブラリを Rust で開発してかなり大きな効果が出たという話が広まっていて、関心を持つ人が多いです。