Quanto Linux c’è in Android? La risposta da uno sviluppatore Google

Fonte: Chimerarevo.com

Avete mai detto ad un possessore di un device Android Sai che stai usando Linux sul tuo smartphone/tablet? E se lo avete fatto, la persona in questione non ha assunto un’espressione di estrema sorpresa? In effetti la realtà è questa: a meno che non stiate parlando con un appassionato del settore, nessuno direbbe mai che in Android batte cuore Linux.

Il perchè è presto detto: l’interfaccia grafica e l’esperienza utente di Android sono completamente diverse da quelle offerte da qualsiasi sistema operativo Linux-based, nonostante il kernel di Android sia totalmente basato sul kernel Linux. Ed ora la domanda sorge spontanea: quanto kernel Linux è rimasto nel kernel Android? Quante modifiche e riadattamenti vi sono state? Utilizzando Android abbiamo ancora a che fare con un sistema operativo Linux-based?

Questo è un interrogativo che ci si pone piuttosto spesso, al quale Robert Love - web engineer in Google ed ex sviluppatore Android – ha dato una risposta su Quora. Leggendo quanto segue troverete una risposta chiara ed esauriente a questa domanda.

La cosa interessante del design di Android è quanto poco abbiamo modificato il kernel. La maggior parte dei sistemi embedded sui quali ho lavorato ha apportato modifiche drastiche nel kernel, soltanto per isolare l’user-space – ad esempio, un kernel “realtime” fortemente modificato ma X11 per l’interfaccia grafica.

Android è il contrario: soltanto modifiche minime al kernel, ma un user-space totalmente diverso da quello di qualsiasi altro sistema Unix. Infatti, l’user-space di Android è completamente differente da quello stock di Linux tanto che si potrebbe affermare che Android non sia un sistema Linux fatta eccezione per il kernel.

Ecco una lista concreta dei cambiamenti che abbiamo apportato al kernel Linux:

  • ashmem (Android Shared Memory), un sistema di memoria condivisa basato su file;
  • Binder, un sistema di comunicazione interprocesso (IPC) e di chiamata a procedura remota (RPC);
  • logger, un rapido meccanismo di logging in-kernel ottimizzato per le scritture;
  • Paranoid Networking, un meccanismo per limitare l’I/O di rete a determinati processi;
  • pmem (Physical Memory), un driver per mappare ampie zone di memoria fisica nell’user-space;
  • Viking Killer, un sostituto di OOM killer che implementa la logica di Android “uccidi il processo utilizzato meno di recente” in condizioni di memoria libera carente;
  • wawelocks, la soluzione unica di gestione energetica di Android, nella quale lo stato predefinito del device è “sleep” ed è necessaria un’azione esplicita (tramite un wakelock) per evitarlo.

E ovviamente il solito assortimento di drivers, i porting per l’architettura ARM ed altro codice a basso livello necessario per supportare Android su qualsiasi device preposto. 

Quasi tutti i punti di questa lista sono stati implementati come driver di periferica, con modifiche al codice core del kernel minime o inesistenti. L’unico cambiamento relativo al sottosistema riguarda i wakelocks.

(Per i curiosi, dalla lista qui sopra ho gestito ashmem, logger e Paranoid Networking.)

Nonostante le evidenti differenze grafico/funzionali, in Android c’è molto più Linux di quanto ci si aspetti a prima vista. E voi siete sorpresi?

Stampa solo il testo dell'articolo Stampa l'articolo con le immagini

Articolo pubblicato il 03/06/2013