operativsystemer og programvare

Google vil gjøre dramatiske endringer i Android, men utfordringene står i kø

Avhenger av støtte fra Linux-fellesskapet.

Google ønsker at alle Android-enheter skal baseres på samme kjerne. I dag er det nesten slik at hver produktmodell har sin egen kjerne.
Google ønsker at alle Android-enheter skal baseres på samme kjerne. I dag er det nesten slik at hver produktmodell har sin egen kjerne.

Selv om Android er Linux-basert, så er det ikke slik at de versjonene av Linux-kjernen som brukes i Android-enhetene er basert på den nyeste kildekode hos Linux Kernel Organization, for så å bli kompilert og rullet ut til enhetene gjennom jevnlige oppdateringer.

Tvert imot er Linux-kjernene i de enkelte enhetene ganske annerledes enn de opprinnelige Linux-kjernene, kalt «mainline». Dette er en temmelig omfattende prosess som i seg selv kan hindre at Android-enheter blir oppdatert til nyere Android-versjoner. Dette ønsker Google å gjøre noe med.

Project Treble var bare begynnelsen

Allerede har Google gjort store endringer i Android for å gjøre det enklere for leverandørene å tilby nyere Android-versjoner til hver enhet. Dette inkluderer først og fremst Project Treble, som er tilgjengelig på alle Android-enheter som har blitt lansert med Android 8.0 eller nyere. Med Project Treble har det blitt skapt et skarpt skille mellom den delen av operativsystemet som i utgangspunktet er felles for alle, og den delen som er mer lavnivå og enhetsspesifikk.

Grensesnittet mellom disse to delene nå er standardisert og kan verifiseres ved hjelp av en testpakke kalt Vendor Test Suite.

I utgangspunktet betyr dette at den øverste delen, som kalles for Android OS Framework, kan oppgraderes uten at det må gjøres endringer i den leverandørspesifikke delen av operativsystemet.

Tall som Google offentliggjorde tidligere i høst, viser at andelen av enheter som har blitt oppdatert til den nyeste Android-versjonen et knapt år etter lanseringen, har blitt mer enn doblet fra Oreo- til Pie-versjonen.

Project Mainline

Project Treble bidrar derimot ikke med noe som kan gjøre det enklere for enhetsleverandørene å oppgradere Linux-kjernen. Med tanke på at deler av den nye funksjonaliteten i Android 10 ifølge Ars Technica krever at enheten har versjon 4.9 eller nyere av Linux-kjernen, blir dette et problem.

Ett eksempel på dette er Android 10-teknologien Project Mainline, som til tross for navnet ikke har noen med «mainline» Linux-kjernene å gjøre. I stedet åpner denne teknologien for at sentrale deler av Android OS Framework kan oppdateres helt uavhengig av enhetsleverandøren, via Google Play, på omtrent samme måte som mobilappene blir oppdatert.

Men for svært mange eksisterende enheter er situasjonen den at Linux-kjernen de benytter, aldri vil bli oppdatert til Linux 4.9 eller nyere. Årsaken kommer vi snart tilbake til.

Delvis på grunn av dette, er ikke Project Mainline tilgjengelig på enheter hvor Android 10 er forhåndsinstallert. En oppdatering fra Android 9 til Android 10 inneholder ikke Project Mainline.

Den fragmenterte kjernen

Som nevnt er det en omstendelig prosess som må gjøres for å komme fra den originale Linux-kjernen og fram til den versjonen som benyttes i det enkelte produktet.

Under Linux Plumbers Conference som ble arrangert i Lisboa, Portugal, i fjor høst, beskrev Sandeep Patil, som i dag er leder for Googles Android Kernel Team, denne prosessen.

Det hele tar utgangspunkt i en stabil «mainline»-utgave (LTS –Long-Term Support) av Linux-kjernen. Til denne koden legger Android-prosjektet til en Android-spesifikk kode, noe som gjør Linux-kjernen om til det som kalles for Android Common Kernel. Dette inkluderer skreddersydd funksjonalitet som Android har behov for, funksjonalitet som av ulike årsaker har blitt avvist av Linux-prosjektet, funksjonalitet som ennå ikke er ferdigutviklet oppstrøms, samt leverandørspesifikk funksjonalitet som er nyttig også for andre.

Denne prosessen tar bare noen uker, så hadde dette vært alt som må gjøres, hadde ikke problemet vært særlig stort. Da kunne trolig kjernen blitt oppdatert sammen med Android OS Framework.

SoC- og Device-kjernene

Alle mobilenheter inneholder en systembrikke (SoC – System on Chip), som består av en rekke komponenter for blant annet grafikk, input/output, kommunikasjon og selvfølgelig selve CPU-en.

Når en leverandør av systembrikker utvikler en ny brikke, er testing mot den til enhver tid nye utgaven av Android Common Kernel en del av designprosessen, også før systembrikken i det hele tatt har blitt laget. Under denne prosessen gjør systembrikkeleverandøren ofte endringer i kjernen, inkludert å lage til maskinvaredrivere for komponentene som er integrert i systembrikken. Den ferdige kjernen kalles da gjerne for SoC-kjernen.

Diagram som viser de fire ulike utviklingsstadiene Linux-kjernen i Android er gjennom før den brukes i en gitt enhet. Illustrasjon: Sandeep Sandeep/Google
Diagram som viser de fire ulike utviklingsstadiene Linux-kjernen i Android er gjennom før den brukes i en gitt enhet.

Brikken er altså i stor grad designet for å fungere med denne ene utgaven av Android Common Kernel. Det anses ifølge Patil som en betydelig risiko å så oppdatere hele programvarestakken, fra kjernen og helt opp til Android, på et senere tidspunkt. Så i praksis er det ofte slik at det kun er den ene, utvalgte LTS-utgaven av Linux-kjernen som støttes.

Når systembrikkene er klare for lansering, gjøres disse og SoC-utgaven av Linux-kjernen til produsenten av mobilenheten. Mobilprodusenten har kanskje behov for å gjøre egne endringer i Linux-kjernen, for eksempel å legge til drivere for enda mer maskinvare.

I praksis betyr dette at hvert eneste Android-produkt har sin egen versjon av Linux-kjernen.

Gammel allerede ved lansering

Ifølge Patil kan det typisk ta halvannet år fra den nye systembrikken først testes mot en gitt LTS-versjon av Linux-kjernen til mobilenheten kommer på markedet.

I seg selv var dette også problematisk, siden supporttiden for LTS-utgavene av Linux-kjernen opprinnelig var på to år. Den samme systembrikken kan også bli brukt i nye produkter som lanseres et år eller to etter at systembrikken kom på markedet. Dermed kan alderen på Linux-kjernen være kanskje tre til fire år gammel når enheten blir lansert.

Dette ble trolig løst i fjor, ved at supportperioden for en del av LTS-utgavene av Linux-kjernen ble forlenget til seks år.

Uansett bidrar alt dette til en gitt Android-enhet er temmelig låst til den versjonen av kjernen som den i utgangspunktet leveres med.

Vil bruke «mainline» direkte

Ett problem er at selv helt nye Android-enheter er basert på gamle Linux-kjerner som i beste fall mottar feilfikser på et senere tidspunkt enn «mainline»-versjonene, hvis de i det hele tatt mottar disse. Android må også ta hensyn til at ulike enheter, selv om de er helt nye, har ulike versjonen av «mainline»-kjernen. Det kompliserer ting.

Det er heller ikke mulig å teste direkte om nye «mainline»-kjerner faktisk fungerer sammen med Android, og alle endringene som gjøres, innebærer millioner av nye linjer med kode.

Dette ønsker Google å endre på. Ifølge Patil er målet derfor at Linux-kjernen skal bli en del av Android OS Framework, eller i alle fall være i den øverste delen i Project Treble-arkitekturen, altså helt uavhengig av den underliggende maskinvaren. Håpet er å kunne basere den helt på «mainline».

Dette innebærer at maskinvareleverandørene ikke vil kunne endre selve kjernen. Den leverandørspesifikke koden vil i stedet måtte leveres som moduler som kjernen kan laste via det normale modulgrensesnittet.

Dette var statusen i fjor, og i den grad nyheten i noen særlig grad ble omtalt, så var det ikke uten en viss optimisme. Selve arbeidet hadde da ennå ikke startet.

Ett år senere

I september i år ble Linux Plumbers Conference arrangert på nytt, og på nytt kom Patil og andre med oppdatert informasjon om dette prosjektet. Videoen nedenfor ble publisert denne uken.

Selv om prosjektet går framover, er det nå helt klart at dette vil ta tid.

– Vi vet i dag ikke hva som kreves at blir lagt til kjernen for å kjøre en gitt Android-enhet. Vi vet hva som kreves for å kjøre Android, men ikke nødvendigvis på enhver gitt maskinvare. Så målet vårt er i grunnen å finne ut alt dette, sende det oppstrøms og forsøke å komme så nær «mainline» som mulig, sa Patil.

I første omgang er målet å få det hele til å kjøre på en virtuell Android-enhet, Cuttlefish.

– x86-utgaven vil være vår første lakmustest, sa Patil. Dette er ventet å skje innen en måneds tid. Deretter er det ARM64-utgaven som står for tur, før turen kommer til faktiske mobiltelefoner og andre enheter.

Senere i videoen over forteller derimot Tom Gall i Linaro at de har fått startet opp Android på en Xiaomi Poco F1-mobil basert på en «mainline» Linux-kjerne med bare noen få patcher.

Skissen viser hvordan maskinvarespesifikke kjernemoduler kan tas i bruk i dagens Project Treble-arkitektur. Illustrasjon: Matthias Männich/Google
Skissen viser hvordan maskinvarespesifikke kjernemoduler kan tas i bruk i dagens Project Treble-arkitektur.

Selv om programvareingeniøren Matthias Männich hos Google presenterte den nye tilnærmingen som Android Next Generation (se bildet over), så er det på ingen måte gitt at dette kommer Android 11, og kanskje heller ikke i Android 20 eller senere.

Det er nok av tekniske problemer som må løses, men verre er muligens de politiske. Ifølge Ars Technica er det motstand mot dette i Linux-fellesskapet, som heller vil at maskinvareleverandørene gjør driverne sine til åpen kildekode. Da kan driverne inkluderes rett i «mainline»-kjernen. Sannsynligheten for at dette skjer med det første, er nok dessverre ganske liten.

Powered by Labrador CMS