Androidカーネルの断片化を解消する新たな取り組み「Generic Kernel Image」
Android部門のVPを勤めるDave Burke氏と、主任エンジニアIliyan Malchev氏のインタビュー記事がArs Technicaのサイトに公開されています。
この中で、Androidのカーネルの断片化を抑制する新たな取り組み「Generic Kernel Image(GKI)」に関して触れています。
Androidのカーネルは、ベンダごとにデバイスドライバを追加するなどのカスタマイズが行われています。この結果として、カーネルの断片化が生じています。たとえば、デバイスに搭載されるSoCごとで、カーネルが異なるということが発生します。これは、断片化だけではなく脆弱性を生む要因にもなっています。
また、Androidは、Linuxカーネルを使った派生OSの中で最も成功していますが、Linuxカーネルの開発コミュニティからは、Androidカーネルは長い期間アップストリーム(本家)にマージされておらず開発が続けられているので、パッチの数が多くレビューしきれなくなっていると指摘を受けているのも事実です。
Generic Kernel Imageとは
足元ではデバイスごとの断片化が発生し、本家とも断片化が発生している二重苦の状態ですが、まずは、足元の断片化を解消するのがGKIです。GKIカーネルは、Android Common Kernels(ACK)のブランチが使われるので、取り組みが上手く進めば本家との断片化も解決する道筋が見えるかもしれません。
GKIは、すべてのAndroidデバイスで実行可能なカーネルです。
GKIのアイデアは、カーネルのコア部分からSoCなどをサポートするような部分を切り離してロード可能なモジュールとすることで独自実装の部分をなくし、カーネルの断片化に対応しようする考えです。カーネルとモジュールのやりとりは、Kernel Module Interfaceが使われます。
GKIの考えは、マイクロカーネルの考え方にも似ています。
名前を聞くことが少なくなりましたが、マイクロカーネルといえばカーネギーメロン大学で開発されていた「Mach」が有名でNeXTSTEPが採用していました。このNeXTSTEPは後のmacOSです。余談ですが現在のmacOSは、マイクロカーネルをベースとしながらもパフォーマンス重視の実装となっています。
話を戻します。
ベンダ独自のカーネルのカスタマイズは、脆弱性を生む要因になっていると触れましたが実例があります。Googleのセキュリティチーム「Project Zero」の研究者である、Jann Horn氏がSamsung Galaxy A50のカーネルに問題を発見したことに触れた記事がZDNetに公開されています。
Android Sで本格化
GKIは、これからの実装で、2020年末にコミットされた5.xのLTSカーネルをベースに開発が進められ、AOSPにコミットの予定を2021年8月としています。このタイミングではAndroid Sが登場することになり、これではGKI 2.0を採用することが求められているので、GKIを搭載する端末が行き渡るのは2021年の秋からになるはずです。
GKI 2.0では、以下のような目標が定められています。
- GKIでパフォーマンスや電力の大幅な低下を招かないようにしてください
- OEMがカーネルのセキュリティ修正とバグ修正(LTS)をベンダの関与なしに提供できるようにします
- デバイスのカーネルのメジャーバージョンを更新するコストを削減します(たとえば、v5.xからv5.yへ)
- アップグレードの明確なプロセスでカーネルバージョンを更新することにより、アーキテクチャごとに1つのGKIカーネルバイナリのみを維持します
GKI 1.0の目標も定められていますが、2.0よりも緩い内容なので、2.0にいたるまでの成果を一部切り出して、Pixelに実装する考えなのかもしれません。
Project Trebleは、メーカーごとの実装をシステムフレームワークから切り離し、アップデートし易くする取り組みでした。この成果は、Android 11がリリース後、間を空けることなく端末メーカーが追従してくることでわかります。
GKIは、Project Trebleのようなわかりやすさはありませんが、さらに核心部分に踏み込んだ取り組みです。この成果として、セキュリティ面がより強化されるだけでなく、端末に新しい機能を取り込みやすくなり開発期間が短くなる可能性があります。開発期間の短縮は端末価格にも跳ね返るので、来年の端末は価格が下がるかもしれません。
今週は、このあたりで、また来週。