Es sieht so aus, als ob Google hart daran arbeitet, den Linux-Kernel, der das Herzstück jedes Android-Telefons ist, zu aktualisieren und zu erweitern. Das Unternehmen war ein wichtiger Teilnehmer an der diesjährigen Linux Plumbers Conference, einem jährlichen Treffen der führenden Linux-Entwickler, und Google verbrachte viel Zeit damit, darüber zu sprechen, wie man Android dazu bringen kann, mit einem generischen Linux-Kernel zu arbeiten, anstatt mit der stark angepassten Version, die jetzt verwendet wird. Es wurde sogar ein Android-Telefon gezeigt, auf dem ein Mainline-Linux-Kernel läuft.
Zunächst jedoch ein paar Hintergrundinformationen zum aktuellen Kernel-Chaos bei Android: Derzeit gibt es drei große Forks zwischen dem „Mainline“-Linux-Kernel und einem Android-Gerät, das ausgeliefert wird (beachten Sie, dass „Mainline“ hier keinen Bezug zu Googles eigenem „Project Mainline“ hat). Zuerst nimmt Google den LTS (Long Term Support)-Linux-Kernel und verwandelt ihn in den „Android Common Kernel“ – den Linux-Kernel mit allen Android-OS-spezifischen Patches. Android Common wird an den SoC-Anbieter (in der Regel Qualcomm) ausgeliefert, wo es seine erste Runde hardwarespezifischer Ergänzungen erhält, die sich zunächst auf ein bestimmtes SoC-Modell konzentrieren. Dieser „SoC-Kernel“ wird dann an einen Gerätehersteller geschickt, um noch mehr hardwarespezifischen Code zu erhalten, der alle anderen Teile der Hardware unterstützt, wie z. B. das Display, die Kamera, die Lautsprecher, die USB-Anschlüsse und jegliche zusätzliche Hardware. Dies ist der „Geräte-Kernel“, und er ist das, was tatsächlich auf einem Gerät ausgeliefert wird.
Dies ist eine extrem lange Reise, die dazu führt, dass jedes Gerät Millionen von Zeilen von Out-of-Tree-Kernel-Code ausliefert. Jeder ausgelieferte Gerätekernel ist anders und gerätespezifisch – im Grunde genommen funktioniert kein Gerätekernel von einem Telefon auf einem anderen Telefon. Die Mainline-Kernelversion für ein Gerät wird zu Beginn der Entwicklung eines SoCs festgelegt, so dass es typisch ist, dass ein brandneues Gerät mit einem zwei Jahre alten Linux-Kernel ausgeliefert wird. Selbst das neueste und beste Gerät von Google, das Pixel 4, wurde im Oktober 2019 mit Linux-Kernel 4.14 ausgeliefert, einer LTS-Version vom November 2017. Es wird auch für immer auf Kernel 4.14 sitzen bleiben. Android-Geräte erhalten in der Regel keine Kernel-Updates, wahrscheinlich wegen des unglaublichen Arbeitsaufwands, der erforderlich ist, um nur einen einzigen Gerätekernel zu erstellen, und wegen der Kette von Unternehmen, die dafür zusammenarbeiten müssten. Da es nie Kernel-Updates gibt, bedeutet dies, dass jede neue Version von Android in der Regel die LTS-Kernelversionen der letzten drei Jahre unterstützen muss (das Minimum für Android 10 ist 4.9, eine Version von 2016). Googles Verpflichtung, ältere Android-Versionen mit Sicherheits-Patches zu unterstützen, bedeutet, dass das Unternehmen immer noch den Kernel 3.18 unterstützt, der jetzt fünf Jahre alt ist. Googles Notlösung für dieses Problem bestand bisher darin, sich mit der Linux-Community zusammenzutun und Mainline-Linux-LTS-Releases länger zu unterstützen, so dass der Support nun sechs Jahre beträgt.
Im vergangenen Jahr kündigte Google auf der Linux Plumbers Conference 2018 seine ersten Untersuchungen an, um den Android-Kernel näher an Mainline-Linux heranzuführen. In diesem Jahr teilte es etwas mehr Details über die bisherigen Fortschritte mit, aber es ist definitiv immer noch eine Arbeit im Gange. „Heute wissen wir nicht, was dem Kernel hinzugefügt werden muss, um auf einem Android-Gerät zu laufen“, sagte der Leiter des Android-Kernel-Teams, Sandeep Patil, auf der LPC 2019. „Wir wissen, was nötig ist, um Android auszuführen, aber nicht unbedingt auf einer bestimmten Hardware. Unser Ziel ist es also, all das herauszufinden, es dann upzugraden und zu versuchen, so nah wie möglich an Mainline zu sein.“
Während es noch Arbeit gibt, um das breitere Android-Ökosystem und unzählige Gerätekonfigurationen an Bord zu bringen, scheinen die Dinge für bestimmte Gerätemodelle gut voranzukommen. Tom Gall, der Direktor der Linaro Consumer Group, zeigte ein Xiaomi Poco F1, auf dem der Mainline-Linux-Kernel unter dem üblichen Android-Betriebssystem läuft. Gall sagte dem Publikum: „Wir müssen dem Google-Kernel-Team ein großes Lob dafür aussprechen, dass sie ihren Code in den Upstream gebracht haben, so dass wir Geräte mit einem Mainline-Kernel booten können.“
Neben dem Plan, so viel Kernel-Code wie möglich in den Upstream zu bringen, zielt Google auch darauf ab, seine frühere Arbeit an der Modularisierung von Android, Project Treble, zu wiederholen. Genauso wie Treble eine stabile Schnittstelle zwischen dem Android-Betriebssystem und den Geräte-HALs (Hardware Abstraction Layers) geschaffen hat, beinhaltet Googles Vorschlag zur Annäherung von Android an Mainline-Linux (Warum gibt es dafür noch keinen dummen „Projekt“-Namen?) die Stabilisierung der Linux-internen ABI und eine stabile Schnittstelle für den Linux-Kernel und die Hardware-Anbieter, an die sie schreiben können. Google möchte den Linux-Kernel von seiner Hardware-Unterstützung entkoppeln.
Die Linux-Gemeinschaft hat sich schon seit einiger Zeit gegen die Idee einer stabilen Schnittstelle gewehrt, mit dem Vorschlag, dass man, wenn man die Möglichkeit haben möchte, einen Kernel schnell zu aktualisieren, seine Treiber als Open Source zur Verfügung stellen und sie in den Hauptkernel-Baum einbringen sollte, wo alle Änderungen für einen erledigt werden. Das Open-Sourcing von Treibern ist jedoch für viele Hardwarefirmen ein absolutes No-Go, und keine noch so große Lobbyarbeit oder Produktverschlechterung wird daran etwas ändern. Die Tatsache, dass Google fünf Jahre alte Versionen von Linux unterstützt, zeigt, dass dieses Modell nicht funktioniert.
Matthias Männich, ein leitender Software-Ingenieur bei Google, zeigte ein Diagramm mit der Bezeichnung „Android Next Generation“, das zeigte, wie diese vorgeschlagene Kernel-Architektur aussehen würde. Google würde ein „Generic Kernel Image (GKI)“ zusammen mit mehreren „GKI-Modulen“ ausliefern, die diese stabile API/ABI im Kernel offenlegen würden. Die hardwarespezifischen Treiber (wahrscheinlich Closed-Source-Treiber) würden als Kernel-Module geladen werden. Anstelle von Forks über Forks wird also alles in additive Pakete modularisiert.
Im Moment schlägt Google nur vor, dass die In-Kernel-ABI für eine einzige LTS-Version stabil ist. Dies würde es also nicht ermöglichen, Geräte von einer Version des Linux-Kernels auf eine andere zu aktualisieren – es würde lediglich ein einziges allgemeines Kernel-Image ermöglichen, das auf mehreren Geräten funktioniert, anstelle der gerätespezifischen Kernel-Forks, die wir heute haben. Es würde definitiv einfachere Sicherheitsupdates ermöglichen und hoffentlich neue LTS-Versionen schneller auf den Markt bringen.
Wir wären voreilig, wenn wir sagen würden, dass dies eine Änderung ist, die definitiv auf Android und den Linux-Kernel zukommt. Es gibt noch jede Menge Probleme zu lösen (sowohl technisch als auch politisch, könnte ich mir vorstellen), und einige dieser Vorträge waren eher wie öffentliche Brainstorming-Sitzungen zwischen den Google-Präsentatoren und den Linux-Ingenieuren (von denen viele auch Googler waren!) im Publikum. Dies ist das zweite Jahr in Folge, dass Google auf der LPC auftaucht und die Idee vorstellt, den Mainline-Linux-Kernel in Android zu verwenden, und da Android eine der größten Linux-Distros auf der Welt ist, macht es Sinn, dass alle zusammenarbeiten, nicht wahr?
„Wir haben noch einen weiten Weg vor uns, und das wissen wir, aber wir haben uns von unserem Ausgangspunkt aus weiterentwickelt“, sagte Patil dem Publikum. „Letztes Jahr habe ich sie ins Leben gerufen. Diesmal haben wir tatsächlich Probleme zu besprechen.“