Rust in Android: move fast and fix things
出典: Google Security Blog (2025年11月)
概要
AndroidにおけるRust採用の成果を2025年データで分析
メモリ安全性の向上だけでなく、開発速度と品質の劇的な改善を実証
セキュリティと生産性のトレードオフという従来の常識を覆す結果
主要な成果データ
メモリ安全性脆弱性
2025年初めて全体の20%以下に低下
Rustコードの脆弱性密度: 0.2件/100万行
C/C++コードの脆弱性密度: 約1,000件/100万行
→ **1000倍以上の改善**
開発効率の向上
ロールバック率: C++比で**4分の1**
コードレビュー時間: **25%短縮**
コード修正回数: 同規模の変更で**20%減**
コード量の推移
新規Rustコード量がC++に匹敵
C++は緩やかに減少傾向
※システムプログラミング言語(C/C++/Rust)のみの比較
なぜRustが効率的なのか
ロールバックの低さが鍵
ロールバックは組織全体に影響
ビルドの再実行
ポストモーテムの実施
他チームのブロック
新たな安全対策の追加
Rustの安定性がこれらのコストを削減
コードレビューの効率化
2022年のエンジニア調査結果
Rustはレビューが容易
正しいコードである可能性が高い
DORA指標での評価
4つの主要指標を使用
デプロイ頻度
変更のリードタイム
変更失敗率
復旧時間
重要な事例: 初のRust脆弱性(未出荷)
CrabbyAVIFでの線形バッファオーバーフロー
CVE-2025-48530として追跡
リリース前に発見・修正(near-miss)
防御層が機能
ガードページにより脆弱性を非悪用可能に
静かなメモリ破壊→明確なクラッシュに変換
クラッシュレポートのギャップを発見・改善
学びと改善
OSレベルではunsafeコードが必要
unsafe Rustの安全な使い方
soundnessと未定義動作の理解
安全コメントとカプセル化のベストプラクティス
unsafe Rustに関する誤解
「unsafeがあるなら意味がないのでは?」への回答
データが示す真実
Android Rustコードの約4%がunsafe{}
それでも脆弱性密度は圧倒的に低い
unsafeなRustがC/C++と同じバグ率という保守的な仮定すら実態を過大評価
unsafeが安全な理由の仮説
Rustの安全抽象化への明確な境界
unsafeコードのスコープが限定的
unsafeブロックへの注意深い scrutiny
型システムと借用チェッカーの恩恵
コンパイラによる未定義動作の検出
従来のアプローチとの違い
旧: Move fast, then fix the mess
静的解析、ランタイム保護、サンドボックス、パッチ対応に多大な投資
パフォーマンスと生産性のコスト大
それでも不十分な保証
新: Move faster while fixing things
より安全な道がより効率的
セキュリティのためのトレードオフが不要に
将来的にはパフォーマンスの取り戻しも可能
今後の展開
セキュリティと生産性の利点を他領域にも展開
メモリ安全言語は包括的戦略の一部
多層防御アプローチを継続
技術的示唆
メモリ安全性脆弱性の密度低減がもたらす効果
単なるバグ数削減ではない
セキュリティアーキテクチャ全体の有効性向上
脆弱性チェーンによる防御回避を困難に
言語選択の考え方
Java/Kotlinは補完的な役割
Rustはシステムプログラミング言語としてC/C++の代替
低レベル制御と予測可能性を維持しながらリスク削減
関連概念
考察
「セキュリティvs生産性」の二項対立を超えた事例
1000倍の脆弱性密度改善
4倍低いロールバック率
25%短縮されたレビュー時間
これらが同時に達成されている
unsafe Rustの実態
理論的リスク ≠ 実際のリスク
言語設計による安全性の境界明確化が効果的
4%のunsafeコードが全体の安全性を損なわない
組織的な学習と改善
2023→2024のレビュー時間改善は習熟度向上
初の脆弱性からの学び→トレーニング強化
継続的な改善サイクルの実践
他の開発組織への示唆
メモリ安全言語への移行は投資対効果が高い
初期の学習コストを超えると生産性が向上
セキュリティ改善と効率化は両立可能
データ分析期間
2025年のデータ(年末の2ヶ月前に公開)
Android標準の90日パッチウィンドウにより最終値に近い
ファーストパーティ+サードパーティコードを含む