Androidの開発へ「Rust」を導入、なぜなのか:メモリ安全ではないバグを予防
GoogleはAndroidオープンソースプロジェクト(AOSP)が、「Android」の開発へ「Rust」導入を進めている。従来のようなC/C++とJavaを組み合わせた開発にはどのような問題があるのだろうか。
2021年4月6日(米国時間)、Googleは公式ブログでAndroidオープンソースプロジェクト(AOSP)がモバイルデバイス向けオープンソースOS「Android」の開発において、オープンソースのシステムプログラミング言語「Rust」の導入を進めていることを明らかにした。Googleは2021年2月に設立された独立非営利団体「Rust Foundation」にも加盟している。
Androidはこれまで、「C」や「C++」といったシステムプログラミング言語を用いて開発されてきた。Android開発にRustを導入した目的は、メモリ安全性のバグを予防することにある。
メモリ安全性のバグを生み出す危険なコードとは 信頼できない入力を処理する(緑色)、安全性の低いC/C++で記述する(オレンジ色)、サンドボックスを使った分離を実行していない(青色)(出典:Google)
AOSPはこれまでもメモリ安全性のバグの検出や修正、軽減に注力してきたが、さらに予防を強化しようとしている。メモリ安全性を特徴とした言語の採用が、最も費用対効果の高い予防方法だとの認識から、Rustの導入に至った。
Android開発に新しい言語を取り入れるのは大掛かりな取り組みであり、ツールチェーンや依存関係のメンテナンス、インフラやツールのアップデート、開発者のトレーニングが必要になる。
AOSPは過去18カ月にわたってRust導入に取り組んできた。現在、幾つかの早期導入プロジェクトを進めており、数カ月後に成果を発表する計画だ。この取り組みを発展させ、Android開発にRustを本格的に活用するのは、数年がかりのプロジェクトになるとしている。
GoogleはRustを導入した背景としてメモリ安全性バグの脅威が最大であることや、これまでのシステム開発言語では開発者にメモリのライフサイクルが任されていること、サンドボックス化ではメモリ安全性バグを除去できないことを挙げている。
厄介なメモリ安全性のバグ問題
CやC++プログラムのメモリ安全性のバグは以前から、最も対処が困難な動作異常の原因だった。AOSPはメモリ安全性を原因とするバグの検出や修正、軽減に多大な労力やリソースを注ぎ、Androidへのバグの混入を数多く防いできた。それでも、メモリ安全性のバグは、システムの安定性を損なう最大の原因であり続けており、Androidにおける深刻度の高いセキュリティ脆弱(ぜいじゃく)性の最大70%を占めている。
システムプログラミング言語とRustの特徴
Androidアプリケーションの開発では、「Java」や「Kotlin」のようなメモリ安全性を備えたマネージド言語が最適な選択肢となっている。これらの言語は使いやすさやポータビリティー、安全性を考慮して設計されており、Androidランタイム(ART)が開発者に代わってメモリを管理するからだ。
OSとしてのAndroidはJavaを幅広く利用し、Androidプラットフォームの大部分をメモリバグから効果的に保護している。だが、JavaとKotlinは、Android自体の低レベルな開発には適さない。
OSの低レベルの開発には、C、C++といったシステムプログラミング言語が必要になる。これらの言語は、低レベルのシステムリソースとハードウェアへのアクセスを可能にする。加えてリソース消費が少なく、パフォーマンスも予測しやすい。ただし、CとC++には課題もある。開発者自身がメモリのライフサイクルを管理しなければならないということだ。しかも管理は容易ではなく、ミスも発生しやすい。複雑なマルチスレッドのコードでは特にそうだ。
Rustは、コンパイル時のチェックによるオブジェクトライフサイクル/所有権の強制や、ランタイムチェックによるメモリアクセスの有効性の確保を通じて、メモリ安全性を保証する。さらに、CやC++と同等のパフォーマンスも実現する。
サンドボックス化の限界
CやC++では、Rustのような安全性を保証できないため、「強い分離」を必要とする。Androidの開発においては次のような制限がある。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「Rust」が開発者に最も愛される言語であり続ける理由――Rustを取り巻く状況はここ1年でどう変わったのか
人気記事を電子書籍化して無料ダウンロード提供する@IT eBookシリーズ。第69弾は、プログラミング言語「Rust」のニュース記事をeBookにまとめてお送りする。 - Rustの利用状況調査、ビジネス利用が進む一方で習得の難しさなどが依然課題
Rust Survey Teamはプログラミング言語「Rust」の利用状況に関する年次調査結果を発表した。Rustの安定性に対する評価が高い一方で、C++との相互運用性の向上や学習のしやすさを改善してほしいという回答が多かった。 - Rustを支援する独立非営利団体「Rust Foundation」が発足
プログラミング言語「Rust」とそのエコシステムを支援する独立非営利団体「Rust Foundation」の設立が発表された。巨大IT企業の金銭的な支援を受けており、「本番環境に対応できるエンタープライズ技術としてのRustの進化」を表しているという。