- Androidプラットフォームで Rust導入後、メモリ安全性の脆弱性比率が全体の20%未満に低下 し、セキュリティと開発効率が同時に向上
- RustコードはC/C++と比べて メモリ安全性脆弱性密度が1000分の1 で、ロールバック率が4分の1, コードレビュー時間が25%短縮
- Rustの利用拡大は カーネル、ファームウェア、1st-partyアプリ にまで広がり、システム全体の ベースラインセキュリティ向上 に貢献
- CrabbyAVIFで見つかった Rustベース初のメモリ安全性脆弱性の「発生寸前」事例 を通じて、Scudoアロケータと安全なunsafeコード教育の重要性を確認
- Rustへの移行は、セキュリティ強化と開発速度向上を同時に実現する 新しいソフトウェア開発パラダイム と評価される
Rust導入の効果と2025年のデータ
- 2025年、Androidの メモリ安全性脆弱性比率が20%未満に低下 し、Rust中心のセキュリティ戦略の有効性を実証
- RustはC/C++と比べて メモリ安全性脆弱性密度が1000分の1, ロールバック率が4分の1, コードレビュー時間が25%短縮
- Rust導入は単なるセキュリティ改善にとどまらず、ソフトウェア提供速度の向上 にもつながる
- データには、Androidプラットフォーム内の C, C++, Java, Kotlin, Rust 全般にわたる1st-partyおよび3rd-partyコード変更が含まれる
システム言語の移行と開発生産性
- Androidはシステムプログラミング言語として RustをC/C++の代替 に採用し、同等の制御レベルを提供しつつリスクを低減
- 1st-partyコード基準で Rustコードの増加ペースがC++を上回り、両言語間の開発指標比較が可能になった
- DORAフレームワークを活用して Throughput(提供速度) と Stability(安定性) を測定
- RustとC++のコード規模、開発者プール、時間傾向を統制して比較を実施
Throughput: コードレビュー効率の向上
- RustコードはC++と比べて 20%少ない修正(revision) で済み、コードレビュー時間が25%短縮
- 2023〜2024年の間にRustの専門性向上により、レビュー効率が大きく改善
- レビューや手戻りの減少は生産性向上につながり、安定性改善が最大の効果要因 として作用
Stability: ロールバック率の低下と品質向上
- DORA基準で Rustのロールバック率はC++比で約4分の1 となり、特に中〜大規模変更で顕著
- 低いロールバック率は生産性向上に直接寄与し、ビルドのやり直し・ポストモーテム・チームのブロックなど付随コストを削減
- 2022年のGoogleエンジニア調査でも、Rustは レビューしやすく精度が高い と評価された
- データはこうした認識を実証的に裏づけている
セキュリティと生産性の同時向上
- 過去にはセキュリティ強化が性能低下や開発遅延を招いていたが、Rustへの移行はセキュリティと効率を同時に改善
- Rust導入により セキュリティ、開発効率、製品安定性 のすべてが向上する構造が形成された
Rustの拡大領域
- カーネル: Android 6.12 LinuxカーネルでRustサポートと最初のRustドライバを導入
- Arm・Collaboraと協力して RustベースのGPUドライバ を開発中
- ファームウェア: Rust導入により 高権限・制約環境のセキュリティを強化 し、関連する チュートリアル・教育・コード公開 も実施
- Armと協力した Rusted Firmware-A プロジェクトを進行中
- 1st-partyアプリ:
- Nearby Presence: Bluetoothベースのデバイス探索プロトコルをRustで実装し、Google Play Servicesで稼働
- MLS: RCSメッセージング向けセキュアプロトコルをRustで実装し、今後Google Messagesアプリに含まれる予定
- Chromium: PNG、JSON、WebフォントパーサをRustに置き換え、Rule of 2 の順守を容易に
Rustベース初のメモリ安全性脆弱性「発生寸前」事例
- CrabbyAVIF で出荷直前に バッファオーバーフロー脆弱性(CVE-2025-48530) を発見し、公開前に修正を完了
- Scudo hardened allocator がガードページにより、この脆弱性を 悪用不可能(non-exploitable) な状態にした
- ScudoはPixelなどでデフォルト使用されており、パートナー企業にも 義務化を推進中
- クラッシュレポート改善により オーバーフロー検知シグナルを明確化
unsafeコード管理と教育強化
- OS開発には不可避的に unsafeコード(C/C++またはunsafe Rust) が必要
- Googleは Comprehensive Rust教育課程にunsafeコードの高度モジュールを追加
- unsafeコードの健全性(soundness)、未定義動作、安全注釈、安全な抽象化手法などを扱う
- unsafe Rustへの理解向上は Androidおよびオープンソースエコシステム全体のコード品質向上 につながる
脆弱性密度の比較
- AndroidのRustコード約500万行から1件の潜在的脆弱性を発見 → Rustの脆弱性密度は0.2/MLOC
- C/C++の過去平均は 1,000/MLOC で、つまり 1000倍以上の低減
- メモリ安全性脆弱性密度の低下は セキュリティアーキテクチャ全体の有効性強化 につながる
- Rustコードの約4%は
unsafe{} ブロックだが、データ上 C/C++よりバグ可能性が低い
- 理由として 安全チェックの維持、カプセル化、追加レビュー強化 などがある
結論
- 過去にはセキュリティ確保のために 静的解析・サンドボックス化・パッチ適用など高コストな対応 が必要だった
- Rustへの移行は セキュリティと効率性を同時に確保 する新しいアプローチ
- もはや「素早く開発して後で直す」のではなく、「素早く開発しながら同時に直す」 段階に入った
- セキュリティが強化されるほど 性能と生産性を回復できる可能性 も高まる
謝辞
- CVE-2025-48530の分析、Scudo改善、unsafe Rust教育開発、Rust活用情報提供など、多くの貢献者に言及
- Android RustチームとAndroid組織全体の 継続的な品質改善の取り組み に感謝を表明
3件のコメント
Rust万歳!
Embassyでファームウェア開発を少し触ってみると、
言語的な安全性も良いですが……ツーリングがとても優れているので、C/C++を使っていた頃に比べて生産性が圧倒的です。
Hacker Newsの意見
500万行のRustコードから見つかったメモリ安全性の脆弱性は、たった1件 בלבדだった
つまり Rust は100万行あたり0.2件の脆弱性率ということになる
一方で C/C++ は100万行あたり1,000件水準で、その差は圧倒的だ
しかし、こうした明確なデータを前にして、なぜいまだに無視できるのか理解しがたい
自分はまだ Rust を使ったことがないが、いつか必ず学んでみようと思う
セキュリティも重要だが、ロールバックなしのデプロイこそ開発者が本当に望むものだ
Rust で書けば、そうした安定感がある
コンピュータサイエンスでこういう革新が出てくるのは本当にまれだ
2025年に C++ を使う理由は、既存コードベースの維持以外ほとんどない
新しく作るものは全部 Rust に向かうべきだ
新規プロジェクトは最新のテスト体制と明確な目標を持って始まるのだから
それでも Rust が C++ より精神衛生上健全な言語であることは否定できない
Rust を学ぶのは本当につらかったし、他の言語よりずっと複雑だった
だがコンパイラと何度か格闘すると、コードが動くときにはほとんど問題がないという確信が得られる
Ruby、JS/TS、Python を使っていて Rust に来ると、「コンパイルが通れば80〜90%完成」という感覚になる
しかも速い
コンパイラと戦う過程は、実は隠れていたバグを先回りして直す過程でもある
Rust の考え方が頭の中を支配するようになる
それだけ忘れやすく、また学びやすい言語だという冗談だ
Ruby、JS、Python については同意するが、TS は少し違うと思う
Google はまだ Android userspace で Rust を公式サポートしていない
NDK と Android Studio は今も C/C++ しかサポートしていない
Rust を使うなら、コミュニティが自分たちでツールを作る必要がある
JVM 側のコードなしではアプリを作りにくい
Android の ABI は、言語に関係なくルールさえ守ればよい
これはC++ を沈めた爆弾のような出来事だ
もう「Rust だって unsafe だ」とか「C++ も正しく使えば安全だ」といった言い訳は苦しくなる
安全なコードを書くのは面倒だが、いったん通ればマルチスレッド環境でも自信が持てる
Android アプリも Rust で作りたい
ただ、安全なシステムツールを作れる選択肢が増えたのがうれしい
業界標準は依然として C/C++ 中心なので、Rust が完全に置き換えるのは難しい
ロールバック率が4倍違うというのは衝撃的だ
ほとんどの数値はすでに予想されていた現実だが、これは新鮮だ
Rust が特別に完璧だというより、既存コードのバグがそれだけ多いという意味だ
大規模コードベースでこうしたデータが出たのは印象的だ
最初からモジュール単位の受け入れテストシステムを作れば、Rust が行う検証をテストで代替できる
メモリリークだけでなく性能劣化まで監視できる
単に古いコードのリスクの違いかもしれない
友人が Rust リライトプロジェクトを任されることになって、
「これで3年分の給料は保証された」と冗談を言っていた
リライト → メモリ安全の確保 → 安定した給与ループという、冗談まじりの戦略だ
Rust コンパイラがゆっくりコンパイルしている間、古いコードを読みながらのんびり働ける
このデータは交絡変数をコントロールしていない
ふつうリライト対象はすでによく理解されたコードなので、レビューは速く、ロールバックも少ない
それに対して複雑なレガシーコードはレビューが長く、ロールバックも多い
簡単なコードだけをリライトしたなら、メモリ安全性脆弱性率は違ったはずだ
実際には問題の多いコードほど Rust で書き直される傾向がある
完璧な実験ではないが、実際の効果と見るほうが妥当だ
行削除量を基準にリライト規模を分析すると、もっと興味深そうだ
むしろリライトしやすい環境になる
Rust の利点は信じているが、これは科学的証拠というより強力な経験的根拠として見る
今後 Rust 導入が非メモリ安全性バグにもどんな影響を与えるのか気になる
自分はゲーム開発に Rust を使っている(Bevy ではない)
安定性とスループットのおかげで、他の言語に戻るつもりはない
どんなcrate の組み合わせとアーキテクチャを使っているのか気になる
自分も趣味でゲームを作っているが、Bevy は少し大げさだと感じた
もう Rust は中核システムコードにも十分に定着したと感じる
もはや uphill battle ではない
「Rust で書き直せ」がミームではなく、実際の根拠を積み上げつつある
コメントの80%はいまだにRust 嫌いだ
「C++ も正しく使えば安全だ」「Rust にもバグはある」といった、繰り返された主張ばかりだ
無知な批判だが、今ではおかしいというより悲しくなる
だが、どこにでも適用しようというのはやりすぎだ
Rust の所有権モデルは開発速度を遅くし、言語自体もまだ進化の途中にある
ネットワーク遅延の大きいサービスなら Python や Node のほうが効率的だ
つまり、Rust は素晴らしいが、あらゆる問題の答えではない