Android verso il supporto per il Kernel Linux mainline

3

Google è a lavoro da oltre un anno per aggiornare il Kernel usato sui dispositivi Android e renderlo il più aderente possibile al Kernel Linux mainline (la versione “curata” da Linus Torvalds nella quale confluiscono le feature più recenti) e all’ultima edizione della Linux Plumbers Conference (LPC) ha mostrato un dispositivo Android che esegue tale versione del Kernel.

Andando al sodo, sono necessari tre grandi “salti” per portare il Kernel Linux sui nostri smartphone, che possiamo schematizzare così:

  1. Modifica con tutte le patch di Google necessarie al sistema Android per “girare”;
  2. Applicazione da parte dei vari produttori (Samsung, Xiaomi, etc…) delle patch per il corretto funzionamento dei SoC (system-on-a-chip, i “circuiti integrati” dei vendor, Qualcomm in primis);
  3. Modifica e sistemazione per assicurare la compatibilità dell’hardware vario (per esempio la fotocamera, la porta usb, etc). Da notare come queste modifiche spesso siano composte da driver proprietari.

Questi tre grandi “salti” rendono praticamente impossibile la portabilità di una versione del Kernel da un dispositivo ad un altro. Sono circa 32000 le righe aggiunte (un anno fa erano 60000) e in media 1500 quelle eliminate.

I vantaggi dell’utilizzo di un Kernel in comune? L’ effort in termini di tempo per il mantenimento del codice, ma anche (e forse più importante) build Android più aggiornate, performanti e sicure: il Kernel LTS è datato novembre 2017.

Durante la conferenza, il capo progetto dello sviluppo del Kernel Android, Sandeep Patil, ha affermato:

“We know what it takes to run Android but not necessarily on any given hardware. So our goal is to basically find all of that out, then upstream it and try to be as close to mainline as possible.”

“Sappiamo bene cosa è necessario per far girare Android, ma non necessariamente come farlo su un determinato dispositivo. Il nostro obiettivo è sostanzialmente quello di scoprirlo per poi eseguire le opportune modifiche e avvicinarci il più possibile alla versione attuale del Kernel [Linux]”

Gli sforzi in questa direzione dovrebbero confluire in un altro progetto della grande G, il Project Treble: una versione del Kernel già “comune” (in un numero limitato di dispositivi) che permette ai manufacturer di inoltrare gli aggiornamenti software senza realizzare una nuova build.

In un anno gli ingegneri di Google sono passati da un’ipotesi a fatti concreti (e a discuterne i relativi problemi). La decisione è stata presa e la direzione stabilita: il 2020 e la prossima LPC faranno da palco ad una nuova versione del Kernel Android? Non lo sappiamo ancora e non possiamo fare altro che attendere i nuovi sviluppi.

Amministratore di sistema “umile ma onesto”. Inciampato in Linux per caso, è stato l’inizio di una storia d’amore bellissima.

3 risposte a “Android verso il supporto per il Kernel Linux mainline”

  1. Avatar xan
    xan

    non ho capito una cosa, i moduli del kernel già esistono, quale è il problema della soluzione attuale ?
    parlo del sistema usato dai driver NVIDIA proprietari

  2. Avatar Marco Bonfiglio
    Marco Bonfiglio

    Effettivamente non siamo entrati molto nel dettaglio nell’articolo, eccedendo forse in semplificazione. Provo a spiegarlo ora.
    Il problema è nell’evoluzione veloce del Kernel Linux che modifica l’ABI, ovvero le chiamate del kernel disponibili a livello binario (da non confondere con le API, che sono le chiamate disponibili a livello codice sorgente): la mancanza di stabilità nelle ABI porta a dover aggiornare (o almeno ricompilare) i moduli Kernel ad ogni rilascio.
    In una distribuzione normalmente il codice sorgente dei moduli è disponibile, quindi la ricompilazione non è un problema né se fatta dal vendor (rilasciando un pacchetto col modulo già compilato) né se fatta sul pc dell’utente (magari con script automatici che usano dkms).
    Come accennato, molte modifiche dei produttori sono codice proprietario, che si traducono in un modulo per il kernel già compilato; quando cambia l’ABI, quel modulo non è più usabile. Hai citato il driver grafico NVIDIA, e il caso è simile: all’uscita di un nuovo Kernel (spesso) bisogna aspettare che NVIDIA pubblichi un aggiornamento del driver per avere un modulo compatibile. Cosa che però i produttori dei componenti aggiuntivi di un telefono spesso non fanno, e in particolare si dimenticano dei prodotti rilasciati qualche anno prima, rendendo impossibile l’aggiornamento del software. Ovvero Android.
    Google sta lavorando per offrire una interfaccia ABI stabile per questi moduli, indipendentemente dai cambiamenti fatti dal kernel, in modo da poter usare direttamente il kernel ufficiale, con tutti gli aggiornamenti.

  3. Avatar xan
    xan

    perfetto, tutto piu chiaro.

    rispetto alla parte :”all’uscita di un nuovo Kernel (spesso) bisogna aspettare che NVIDIA pubblichi un aggiornamento del driver per avere un modulo compatibile”
    negli ultimi anni la cosa non mi sembra cosi, forse perchè la parte ABI usata da nvidia è rimasta gia stabile si suo.

    Google comunque avrebbe la forza commerciale di poter forzare i vari produttori a garantire gli aggiornamenti di questi moduli per X anni, o comunque dare accesso al sorgente a google stessa.

    richiedere delle modifiche ad altri per un problema tuo non è proprio questa genialata secondo me.

    rimane il fatto che modificare l’interfaccia magari solo nelle LTS sembra una cosa sensata

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *