Google skitserer planer for mainline Linux-kernelunderstøttelse i Android

Det ser ud til, at Google arbejder hårdt på at opdatere og upstreame Linux-kernen, der ligger i hjertet af alle Android-telefoner. Virksomheden var en stor deltager i dette års Linux Plumbers Conference, et årligt møde for de bedste Linux-udviklere, og Google brugte meget tid på at tale om at få Android til at fungere med en generisk Linux-kernel i stedet for den stærkt tilpassede version, som den bruger nu. Der blev endda vist en Android-telefon, der kører en mainline Linux-kernel.

Men først lidt baggrundsinformation om Androids nuværende kernel-rod: I øjeblikket sker der tre store forks mellem den “mainline” Linux-kernel og en Android-enhed, der leveres (bemærk, at “mainline” her ikke har noget at gøre med Googles eget “Project Mainline”). For det første tager Google Linux-kernen LTS (Long Term Support) og omdanner den til “Android Common kernel” – Linux-kernen med alle de Android OS-specifikke patches påført. Android Common sendes til SoC-leverandøren (normalt Qualcomm), hvor den får sin første runde af hardwarespecifikke tilføjelser, der først fokuserer på en bestemt model af SoC. Denne “SoC-kernel” sendes derefter til en enhedsproducent for at få endnu mere hardwarespecifik kode, der understøtter alle andre dele af hardwaren, f.eks. skærmen, kameraet, højttalerne, usb-portene og eventuel ekstra hardware. Dette er “Device Kernel”, og det er det, der rent faktisk leveres på en enhed.

Se mere

Dette er en ekstremt lang rejse, der resulterer i, at hver enhed sender millioner af linjer af kernekode uden for træet. Hver enkelt enhedskerne, der leveres, er forskellig og enhedsspecifik – grundlæggende vil ingen enhedskerne fra én telefon fungere på en anden telefon. Mainline-kernelversionen for en enhed er låst fast i begyndelsen af en SoC’s indledende udvikling, så det er typisk for en helt ny enhed at blive leveret med en Linux-kernel, der er to år gammel. Selv Googles nyeste og, øh, bedste enhed, Pixel 4, blev leveret i oktober 2019 med Linux-kernel 4.14, en LTS-udgave fra november 2017. Den vil også være fastlåst på kerne 4.14 for evigt. Android-enheder får normalt ikke kerneopdateringer, sandsynligvis takket være den utrolige mængde arbejde, der er nødvendigt for at producere bare en enkelt enhedskerne, og den kæde af virksomheder, der skulle samarbejde om at gøre det. Takket være at kerneopdateringer aldrig finder sted, betyder det, at hver ny udgave af Android normalt skal understøtte de sidste tre års LTS-kerneludgivelser (minimum for Android 10 er 4.9, en 2016-udgave). Googles forpligtelser til at understøtte ældre versioner af Android med sikkerhedsrettelser betyder, at virksomheden stadig understøtter kernel 3.18, som nu er fem år gammel. Googles løsning på dette problem har hidtil været at samarbejde med Linux-fællesskabet og støtte mainline Linux LTS-udgivelser i længere tid, og de er nu oppe på seks års støtte.

På Linux Plumbers Conference 2018 sidste år annoncerede Google sin første undersøgelse af at bringe Android-kernen tættere på mainline Linux. I år delte de lidt flere detaljer om deres fremskridt indtil videre, men der er bestemt stadig et stykke arbejde i gang. “I dag ved vi ikke, hvad der skal tilføjes til kernen for at kunne køre på en Android-enhed,” sagde lederen af Android Kernel Team Sandeep Patil til gruppen på LPC 2019. “Vi ved, hvad der skal til for at køre Android, men ikke nødvendigvis på en given hardware. Så vores mål er dybest set at finde ud af alt det, så opstrøms det og forsøge at være så tæt på mainline som muligt.”

Google siger, at “i forhold til LTS (4.14.0) har Android common kernel 355 ændringer, 32.266 indsættelser og 1.546 sletninger (pr. februar 2018).” Her sker der fremskridt hvert år, men husk på, at der stadig er to gafler mere efter dette.

Mens der stadig er arbejde at gøre for at få det bredere Android-økosystem og et utal af enhedskonfigurationer med om bord, ser det ud til at gå godt fremad for specifikke enhedsmodeller. Tom Gall, der er direktør for Linaro Consumer Group, viste en Xiaomi Poco F1 frem, som faktisk kører mainline Linux-kernen under det sædvanlige Android OS. Gall fortalte publikum: “Der skal gives store, store roser til især Google Kernel Team for at få deres kode opstrøms, så vi kan starte enheder op med en mainline-kerne.”

Sammen med planen om at opstrøme så meget kernekode som muligt, sigter Google også mod at gentage sit tidligere arbejde med at modularisere Android, Project Treble. Ligesom Treble skabte en stabil grænseflade mellem Android OS og enhedens HAL’er (Hardware Abstraction Layers), indebærer Googles forslag om at bringe Android tættere på mainline Linux (hvorfor er der ikke et fjollet “projekt”-navn til dette endnu?) at stabilisere Linux’ ABI i kernen og have en stabil grænseflade, som Linux-kernen og hardwareleverandørerne kan skrive til. Google ønsker at afkoble Linux-kernen fra dens hardwareunderstøttelse.

Annonce

Linux-fællesskabet har i nogen tid været imod ideen om en stabil grænseflade og har foreslået, at hvis man ønsker mulighed for hurtigt at opdatere en kerne, skal man open source sine drivere og få dem ind i hovedkernetræet, hvor eventuelle ændringer vil blive taget hånd om for en. Open sourcing af drivere er dog en absolut deal breaker for mange hardwarefirmaer, og det vil ingen fortalervirksomhed eller produktforringelse ændre på. Det faktum, at Google sidder fast i at understøtte fem år gamle versioner af Linux, viser, at denne model ikke fungerer.

Forstør / I stedet for en masse forks forestiller Google sig den nye kerne som en række moduler.

Matthias Männich, en senior softwareingeniør hos Google, viste et diagram med titlen “Android Next Generation”, der viste, hvordan denne foreslåede kernearkitektur ville se ud. Google ville levere et “Generic Kernel Image (GKI)” sammen med flere “GKI-moduler”, som ville eksponere denne stabile API/ABI i kernen. De hardwarespecifikke drivere (sandsynligvis drivere med lukket kildekode) ville blive indlæst som kernemoduler. Så i stedet for gaffler oven på gaffler bliver alting moduliseret i additive pakker.

For nu foreslår Google kun, at ABI’et i kernen skal være stabilt i en enkelt LTS-version. Så det ville ikke gøre det muligt for enheder at opgradere fra en version af Linux-kernen til en anden – det ville blot gøre det muligt for et enkelt generaliseret kerneaftryk at fungere på tværs af flere enheder, i stedet for de enhedsspecifikke kerneforks, vi har i dag. Det ville helt sikkert give mulighed for nemmere sikkerhedsopdateringer, og forhåbentlig ville det få nye LTS-udgivelser hurtigere på markedet.

Annonce

Vi ville være for tidligt ude, hvis vi sagde, at dette er en ændring, der helt sikkert er på vej til Android og Linux-kernen. Der er stadig tonsvis af problemer, der skal løses (både teknisk og politisk, vil jeg tro), og nogle af disse foredrag var mere som offentlige brainstorming-sessioner mellem Google-præsentanterne og Linux-ingeniørerne (hvoraf mange også var Googlers!) i salen. Det er dog andet år i træk, at Google er mødt op til LPC og har præsenteret ideen om at bruge Linux-kernen i Android, og da Android er en af de største Linux-distroer på jorden, giver det mening for alle at arbejde sammen, ikke sandt?

“Vi har lang vej endnu, og det ved vi godt, men vi er kommet langt fra det sted, hvor vi startede,” sagde Patil til publikum. “Sidste år talte jeg det til eksistens. Denne gang har vi faktisk problemer at diskutere.”

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.