Google outlines plans for mainline Linux kernel support in Android

Googleは、すべてのAndroid携帯の中心にあるLinuxカーネルの更新とアップストリームに熱心に取り組んでいるように思われます。 Google は今年の Linux Plumbers Conference に大きく参加し、Android が現在使用している高度にカスタマイズされたバージョンではなく、一般的な Linux カーネルで動作するようになることについて多くの時間を費やしました。 現在、「メインライン」の Linux カーネルと出荷される Android デバイスの間には、3 つの主要なフォークが発生しています (ここでいう「メインライン」は、Google 自身の「プロジェクト メインライン」とは関係ないことに注意してください)。 まず、GoogleはLTS(Long Term Support)Linuxカーネルを取り出し、それを「Android Commonカーネル」(LinuxカーネルにAndroid OS固有のパッチをすべて適用したもの)に変えます。 Android Commonは、SoCベンダー(通常はクアルコム)に出荷され、そこでまず特定のモデルのSoCに焦点を当てたハードウェア固有の追加を受けます。 この「SoCカーネル」は、次にデバイスメーカーに送られ、ディスプレイ、カメラ、スピーカー、USBポート、その他のハードウェアなど、あらゆるハードウェアをサポートする、よりハードウェア固有のコードが追加されます。 これが「デバイス カーネル」であり、実際にデバイスに搭載されるものです。

View more

これは非常に長い旅で、すべてのデバイスは何百万行ものアウトオブツリーのカーネル コードを出荷することになります。 基本的に、ある電話機のデバイス カーネルが別の電話機で動作することはありません。 デバイスのメインラインカーネルバージョンは、SoCの初期開発時に固定されるため、真新しいデバイスが2年前のLinuxカーネルで出荷されることはよくあることです。 Googleの最新かつ、えー、最高のデバイスであるPixel 4でさえ、2017年11月のLTSリリースであるLinuxカーネル4.14で2019年10月に出荷されました。 これも永遠にカーネル4.14から抜け出せないだろう。 Androidデバイスは通常、カーネルアップデートが行われませんが、これはおそらく、たった1つのデバイスカーネルを作るために必要な信じられないほどの作業量と、それを行うために協力する必要がある企業のチェーンのおかげでしょう。 カーネルアップデートが行われないおかげで、Androidのすべての新しいリリースは通常、過去3年間のLTSカーネルリリース(Android 10の最小値は4.9、2016年リリース)をサポートしなければならないことを意味します。 Googleがセキュリティパッチで古いバージョンのAndroidをサポートすることを約束していることは、同社が現在5年前のカーネル3.18をまだサポートしていることを意味します。 これに対する Google のこれまでの応急処置的な解決策は、Linux コミュニティと提携し、メインライン Linux LTS リリースをより長くサポートすることであり、現在、サポート期間は 6 年までとなっています

昨年、Linux Plumbers Conference 2018 で、Google は Android カーネルをメインライン Linux に近づけるための初期調査について発表しました。 今年は、これまでの進捗状況についてもう少し詳しく共有しましたが、まだ進行中であることは間違いありません。 “今日、我々は、Androidデバイス上で実行するためにカーネルに追加される必要があるものを知りません。” Android Kernel TeamのリードSandeep Patilは、LPC 2019でグループに語った。 “我々は、Androidを実行するために必要なものを知っていますが、必ずしも任意のハードウェア上で実行できるわけではありません。 ですから、私たちの目標は、基本的にそのすべてを見つけ出し、それをアップストリームして、できるだけメインラインに近づけるようにすることです。”

Google は、「LTS (4.14.0) と比較して、Android 共通カーネルには 355 の変更と 32,266 の挿入と 1,546 の削除 (2018 年 2 月現在) があります。”」と述べています。 ここでは毎年進歩が見られますが、この後まだ 2 つのフォークがあることを念頭に置いてください。

より広い Android エコシステムと無数のデバイス構成を搭載するためにはまだやるべきことがありますが、特定のモデルのデバイスについては、順調に進んでいるようです。 Linaro Consumer Group のディレクターである Tom Gall 氏は、通常の Android OS の下でメインライン Linux カーネルを実際に動かしている Xiaomi Poco F1 を披露してくれました。 Gall 氏は聴衆に対して、「特に Google カーネル チームが、メインライン カーネルでデバイスを起動できるようにコードをアップストリームにしたことには、大きな、大きな賛辞が贈られます」と語りました。 Treble が Android OS とデバイス HAL (Hardware Abstraction Layers) の間に安定したインターフェイスを作成したように、Android をメインライン Linux に近づけるための Google の提案 (このための馬鹿げた「プロジェクト」名はまだないのでしょうか) には、Linux のインカーネル ABI を安定させ、Linux カーネルとハードウェア ベンダーが書き込むための安定したインターフェイスを持たせることが含まれています。 Google は Linux カーネルをハードウェア サポートから切り離したいと考えています。

広告

Linux コミュニティは、カーネルを迅速にアップデートする能力が必要なら、ドライバーをオープン ソースにして、変更があれば対処してくれるメイン カーネル ツリーに取り込もう、という提案により、しばらくのあいだ安定したインターフェースのアイデアに反対してきました。 しかし、ドライバのオープンソース化は、多くのハードウェア企業にとって絶対的な契約違反であり、いくら支持や製品の劣化があっても、それを変えることはできません。 Google が 5 年前のバージョンの Linux をサポートすることに固執している事実は、このモデルが機能していないことを示しています。

拡大 / 多数のフォークの代わりに、Google は一連のモジュールとしての新しいカーネルを想像しています。 Google は、「Generic Kernel Image (GKI)」を、カーネル内でこの安定した API/ABI を公開するいくつかの「GKI モジュール」とともに出荷する予定です。 ハードウェア固有のドライバ(おそらくクローズドソースドライバ)は、カーネルモジュールとしてロードされることになる。 そのため、フォークの上にフォークを重ねるのではなく、すべてが追加パッケージにモジュール化されます。

今のところ、Google はカーネル内の ABI が単一の LTS バージョンで安定することだけを提案しています。 つまり、これは、デバイスが Linux カーネルのあるバージョンから別のバージョンにアップグレードできるようにするものではなく、現在のようなデバイス固有のカーネル フォークの代わりに、複数のデバイスにわたって動作する単一の汎用カーネル イメージを可能にするだけです。 これは間違いなく、より簡単なセキュリティ アップデートを可能にし、できれば新しい LTS リリースをより早く市場に送り出すことができるようになるでしょう。 解決すべき問題はまだ山積みで (技術的にも政治的にも)、これらの講演のいくつかは、Google のプレゼンターと聴衆の Linux エンジニア (その多くは Googler でもあります!) との公開ブレインストーミング セッションのようなものでした。 Android は地球上で最大の Linux の一種のディストロであるため、みんなで協力することは理にかなっていますね。 「昨年は、私はそれを実現するために話をしました。 今回は、実際に議論すべき問題があるのです」

コメントを残す

メールアドレスが公開されることはありません。