Úgy tűnik, hogy a Google keményen dolgozik a Linux kernel frissítésén és upstream frissítésén, amely minden Android telefon szívében ül. A vállalat nagy résztvevője volt az idei Linux Plumbers Conference-nek, a legjobb Linux-fejlesztők éves találkozójának, és a Google sok időt töltött azzal, hogy az Androidot egy általános Linux kernellel működtesse a most használt, erősen testreszabott verzió helyett. Még egy Android telefont is bemutatott, amelyen a fővonalbeli Linux kernel fut.
De először is, némi háttérinformáció az Android jelenlegi kernel zűrzavaráról: Jelenleg három nagyobb elágazás történik a “fővonalbeli” Linux kernel és egy szállított Android eszköz között (megjegyzendő, hogy a “fővonalbeli” itt nem kapcsolódik a Google saját “Project Mainline”-jához). Először is, a Google az LTS (Long Term Support) Linux kernelt az “Android Common kernellé” alakítja át – a Linux kernel az összes Android OS-specifikus javítással. Az Android Common-t elszállítják a SoC-szállítónak (általában a Qualcommnak), ahol megkapja a hardver-specifikus kiegészítések első körét, először egy adott SoC-modellre összpontosítva. Ezt az “SoC Kernelt” ezután elküldik az eszközgyártónak, hogy még több hardver-specifikus kódot kapjon, amely minden más hardvert támogat, például a kijelzőt, a kamerát, a hangszórókat, az USB-portokat és minden további hardvert. Ez az “eszközkernel”, és ez az, amit ténylegesen szállítanak az eszközön.
Ez egy rendkívül hosszú út, amelynek eredményeképpen minden eszköz több millió sornyi fán kívüli kernelkódot szállít. Minden szállított eszközkernel más és más és eszközspecifikus – alapvetően egyik telefonról származó eszközkernel sem fog működni egy másik telefonon. Az eszköz fővonalbeli kernelváltozatát a SoC kezdeti fejlesztésének kezdetén rögzítik, így jellemző, hogy egy vadonatúj készüléket kétéves Linux kernellel szállítanak. Még a Google legújabb és legnagyszerűbb készüléke, a Pixel 4 is 2019 októberében került forgalomba a Linux kernel 4.14-es verziójával, amely egy 2017 novemberi LTS kiadás. Ez is örökre a 4.14-es kernelen ragadt. Az androidos eszközök általában nem kapnak kernelfrissítéseket, valószínűleg annak a hihetetlen mennyiségű munkának köszönhetően, ami egyetlen eszköz kernelének elkészítéséhez szükséges, és a cégek láncolatának köszönhetően, amelyeknek együtt kellene működniük ehhez. A soha meg nem történt kernelfrissítéseknek köszönhetően ez azt jelenti, hogy az Android minden új kiadásának általában az utolsó három év LTS kernelkiadásait kell támogatnia (az Android 10 esetében a minimum a 4.9, egy 2016-os kiadás). A Google vállalása, hogy biztonsági javításokkal támogatja az Android régebbi verzióit, azt jelenti, hogy a vállalat még mindig támogatja a 3.18-as kernelt, amely már öt éves. A Google eddigi sebtapaszos megoldása erre az volt, hogy összefogott a Linux közösséggel, és hosszabb ideig támogatta a mainline Linux LTS kiadásokat, és most már hat évnél tartanak.”
Múlt évben, a Linux Plumbers Conference 2018-on a Google bejelentette, hogy megkezdte a kezdeti vizsgálatokat az Android kernel közelítésére a mainline Linuxhoz. Idén kicsit több részletet osztott meg az eddigi előrehaladásról, de ez határozottan még mindig folyamatban lévő munka. “Ma még nem tudjuk, mit kell hozzáadni a kernelhez ahhoz, hogy egy Android-eszközön fusson” – mondta Sandeep Patil, az Android Kernel Team vezetője az LPC 2019-en a csoportnak. “Tudjuk, mi kell az Android futtatásához, de nem feltétlenül egy adott hardveren. Tehát a célunk alapvetően az, hogy mindezt kiderítsük, majd upstreameljük, és megpróbálunk minél közelebb kerülni a mainline-hoz.”
Míg a szélesebb Android-ökoszisztéma és a számtalan eszközkonfiguráció bekapcsolása terén még van tennivaló, addig az egyes készülékmodellek esetében úgy tűnik, jól haladnak a dolgok. Tom Gall, a Linaro Consumer Group igazgatója bemutatott egy Xiaomi Poco F1-et, amelyen valóban a mainline Linux kernel fut a szokásos Android operációs rendszer alatt. Gall elmondta a közönségnek: “Különösen a Google Kernel Team-nek kell nagy-nagy dicséretet adni, amiért a kódjukat upstreamre juttatták, így az eszközöket fővonalú kernellel indíthatjuk.”
A minél több kernel kód upstreamre juttatásának terve mellett a Google célja az is, hogy megismételje az Android modularizálásán végzett korábbi munkáját, a Project Treble-t is. Ahogy a Treble stabil interfészt hozott létre az Android operációs rendszer és az eszköz HAL-ok (Hardware Abstraction Layers) között, a Google javaslata, hogy az Androidot közelebb hozza a mainline Linuxhoz (Hogyhogy még nincs erre egy buta “projekt” név?), a Linux kernelen belüli ABI-jének stabilizálását és egy stabil interfész létrehozását foglalja magában, amelyre a Linux kernel és a hardvergyártók írhatnak. A Google szét akarja választani a Linux kernelt a hardvertámogatástól.
A Linux közösség már jó ideje ellenzi a stabil interfész ötletét, azzal a javaslattal, hogy ha gyorsan frissíteni akarod a kernelt, akkor nyisd meg a forráskódot a meghajtóidra, és helyezd őket a fő kernel fába, ahol minden változásról gondoskodnak helyetted. Az illesztőprogramok nyílt forráskódúvá tétele azonban sok hardvercég számára abszolút üzletet bont, és ezen nem fog változtatni semmilyen érdekérvényesítés vagy termékromlás. Az a tény, hogy a Google megrekedt a Linux ötéves verzióinak támogatásánál, azt mutatja, hogy ez a modell nem működik.
Matthias Männich, a Google vezető szoftvermérnöke egy “Android Next Generation” feliratú ábrát mutatott, amely megmutatta, hogyan nézne ki ez a javasolt kernelarchitektúra. A Google egy “Generic Kernel Image (GKI)”-t és számos “GKI Modult” szállítana, amelyek ezt a stabil API/ABI-t tennék közzé a kernelben. A hardver-specifikus illesztőprogramok (valószínűleg zárt forráskódúak) kernelmodulként töltődnének be. Így az egymásra épülő forksok helyett minden additív csomagokká modulálódik.
Egyelőre a Google csak azt javasolja, hogy a kernelen belüli ABI egyetlen LTS-verzióig legyen stabil. Ez tehát nem tenné lehetővé, hogy az eszközök a Linux kernel egyik verziójáról a másikra frissítsenek – ez csak azt tenné lehetővé, hogy egyetlen általánosított kernelkép működjön több eszközön, a mai eszközspecifikus kernel-elágazások helyett. Ez mindenképpen könnyebb biztonsági frissítéseket tenne lehetővé, és remélhetőleg az új LTS-kiadások gyorsabban kerülnének piacra.
Elhamarkodott lenne, ha azt mondanánk, hogy ez egy olyan változás, ami biztosan jön az Androidra és a Linux kernelre. Még rengeteg megoldandó probléma van (mind technikailag, mind politikailag, gondolom), és az előadások némelyike inkább olyan volt, mint egy nyilvános brainstorming a Google előadók és a közönségben lévő Linux mérnökök (akik közül sokan szintén Googlerek voltak!) között. Ez már a második egymást követő év, hogy a Google megjelent az LPC-n, és felvetette a fővonalbeli Linux kernel Androidban való használatának ötletét, és mivel az Android az egyik legnagyobb Linux-szerű disztró a Földön, van értelme, hogy mindenki együtt dolgozzon, nem?
“Mérföldeket kell még tennünk, és ezt tudjuk, de már messzire jutottunk onnan, ahonnan elindultunk” – mondta Patil a tömegnek. “Tavaly én beszéltem rá a létezésre. Ezúttal tényleg vannak problémáink, amiket meg kell vitatnunk.”