GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催

2023年2月8日(水)
松下 康之 - Yasuyuki Matsushita
Googleは2022年8月に「Google Open Source Live」でRustに特化したオンラインセミナーを開催。

Googleが2022年8月9日に「Rust Day on Open Source Live」と呼ばれるオンラインイベントを開催した。今回はRustに特化した1時間半のセミナーの動画からエッセンスを紹介する。

●Google Open Source live動画:https://www.youtube.com/watch?v=SU8clrSVWtI

このセッションではAndroidの開発チームのエンジニアによるプレゼンテーションとして、Androidのコードベースの一部をRustで書き直した事例、ビルドプロセスにおけるRust採用のポイント、Linux KernelにおけるRust採用について、最後にWOFF2というフォントの圧縮/非圧縮を行うプログラムをC++から書き直した事例の概要という内容を1時間半にわたって紹介するものだ。

最初に登場したのはLars Bergstrom氏、Android Plarformのプログラミング言語担当のディレクターという肩書のエンジニアだ。

プレゼンテーションを行うLars Bergstrom氏。後半はJeffrey Vander Stoep氏が担当

プレゼンテーションを行うLars Bergstrom氏。後半はJeffrey Vander Stoep氏が担当

Bergstrom氏はRustの特長の紹介に合わせて、Androidには並列処理が高速に行えることが重要だとして、その上に安全性、つまりメモリーセーフ関連のバグを起こさないことが必要だと語り、Rustがその要求を満たしていることを説明した。

Rustは高速性と安全性を兼ね備えたプログラミング言語と紹介

Rustは高速性と安全性を兼ね備えたプログラミング言語と紹介

スマートフォンのOSには高速性とスレッドとメモリーにおける安全性が必要なことに加えて様々なCPUが使われること、並列処理が必須となると説明。その上でAndroidがどうしてRustを使うようになったのか? という点においては何よりもセキュリティが重要だったとして、Androidにおけるセキュリティに関わるバグのうち、約60%がメモリーセーフ関連だったことを紹介。これにはアナライザーやハードウェアによる保護だけでは補うことができなかったと解説した。

Androidにおいてセキュリティバグの約60%がメモリーセーフ関連

Androidにおいてセキュリティバグの約60%がメモリーセーフ関連

その上でAndroidのBluetooth関連のソフトウェアを開発しているチームのテクニカルリードを務めるエンジニアの証言として「Rustに移行した後は、コンパイルさえ終ってしまえば、意図しない処理によってシステムが暴走しないことから本来のBluetoothの処理に専念できる」というコメントを紹介した。

Bluetoothのテクニカルリードの証言を紹介

Bluetoothのテクニカルリードの証言を紹介

この部分を更に強調するためにC++で書かれたコードとRustで書かれたコードを比較し、非同期のループ処理がシンプルに記述できることを紹介した。

シンプルなループ処理で記述できるのがRustの強味

シンプルなループ処理で記述できるのがRustの強味

また20年以上におよ及ぶC++の経験を持つセキュリティチームのテクニカルリードからは「Rustを1年以上書いた経験から、C++のコンパイラーが意図しない動作をすることを認めているということに我慢するのは馬鹿らしい」というコメントを紹介した。このコメントはAndroidの開発チームの中でRustに移行する価値をベテラン程認めていることを強調していると言える。

ただし技術的に優れているからと言ってビジネスの根幹となるAndroidの開発に使うという決断は行えなかったとして、ここからはビジネスサイドのニーズにも注目して評価を行ったことを説明した。

AndroidをRustに移行するための評価ポイントを解説

AndroidをRustに移行するための評価ポイントを解説

特に、すでに何百万行もC++のソースコードが存在するのに、それを新しい言語で置き換える価値はあるのか? という問いには、メモリーセーフ関連のバグが何年間コードの中に存在していたのか? を検証した結果、新しいコードに顕著に現われていることを解説。つまりツールが追加され機能が高くなったとしてもバグは最新のコードから発生していることを表している。結論としてバグを出さないためにはこれ以上CやC++で新しい機能を実装することを止めることが必要、Rustがバグの発生を抑える最大の抑止力になると語った。

メモリーセーフ関連のバグを減らすにはC/C++でコードを書かないこと

メモリーセーフ関連のバグを減らすにはC/C++でコードを書かないこと

また既存のコードベースとの共存、ビルドシステムとの連携、どのプロジェクトから始めるのか? といった部分にも注意が必要だと解説。プロジェクトの選択にはいつでも元の言語に戻れるという選択肢があることが大事だったと説明した。またRustを知らないエンジニアが大多数の場合、コアとなる小さなグループを作り、そこから徐々に増やす方法を採用したと説明。ソフトウェアエンジニアが潤沢に存在するGoogleのAndroidチームでも慎重にRust化が行われたことを示している。

コードベースの移行に関するセッションで紹介された戦略

コードベースの移行に関するセッションで紹介された戦略

このスライドはコードベースを管理する立場から、Rustに移行する際の戦略を解説。いつでもロールバックできること、ゴールはRustに書き換えることではなくより良いビジネス面での目標を達成すること、実験的に行っていることを意識すること、振り返りを常に行うこと、小さなチームで始めることなどが挙げられている。

Rustを採用する場所は、新規に開発されるコードと既存コードベースがある場合で違う

Rustを採用する場所は、新規に開発されるコードと既存コードベースがある場合で違う

このスライドでは、新規に開発されるコードベースと既に存在するコードベースにそれぞれRustを適用するとしたらどのような部分が適しているのか? を解説している。FFI(Foreign Function Interface)によって外部のコードとしてRustを呼び出す場合と、新たにコードをRustで書き下ろす場合で違うことを解説している。より具体的には、新規に書く場合にはデータベースやファイルシステムへの入出力処理、プロセス間の通信などが発生する部分に採用するべきだと説明。これはパラメータなどによってデータの受け渡しが発生する部分にメモリーセーフバグが発生しがちであることの予防という意味があるのかもしれない。

それを図で示したものが次のスライドだ。

新規に開発するコードベースでRustを使うならここという例

新規に開発するコードベースでRustを使うならここという例

また従来のコードの一部を書き直す場合、Rustが持つUnsafeの機能を使ってデータの受け渡しを行うことが必要になることがあるが、その際にもなるべくUnsafeを使わないで呼び出しを行うべきと説明。RustでUnsafeを使うとC++よりもエラーを起こす可能性が高まることを指摘した。

既存のコードから呼び出される場合もなるべくUnsafeは使わない

既存のコードから呼び出される場合もなるべくUnsafeは使わない

ビルドシステムにおいても既に存在するコードリポジトリ、crates.ioを使うこと、標準となっているCargoをツールチェーンの中に連携させることを推奨している。

Rustのデフォルトのビルドシステムを使うことを推奨

Rustのデフォルトのビルドシステムを使うことを推奨

Cargoが優れたビルドシステムであることを紹介しながら、他にもBazelのCrate UniverseやFacebookが開発、公開しているReindeerなども紹介した。ちなみにCrate UniverseもReindeerもリポジトリーとしてはcrates.ioを使っている。

この部分の最後として、大きなプロジェクトであっても小さな部分から書き直し始めること、書き直すことを目的にしないこと、戦略を立てること、Unsafeな使い方をしないことなどを挙げて締めくくった。

ビルドシステムと組織の中での進め方についての考察

ビルドシステムと組織の中での進め方についての考察

次は、RustをLinux Kernelに採用するという内容に関するセッションだ。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

OSSイベント

Open Source Summit Japan 2022開催。車載からストレージ、Kubernetesまで幅広いトピックをカバー

2023/4/26
2022年12月、横浜でOpen Source Summit Japanが開催された。リアルでは約500名が参加し、車載システムからSBoM、AIまで広範なセッションが行われた。
開発言語イベント

WASM Meetup@ByteDanceで垣間見たWebAssemblyの静かな広がり

2023/4/11
ByteDanceのシリコンバレーオフィスで開催されたWebAssemblyのミートアップを紹介。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています