Il kernel Linux è una parte estremamente importante del software su quasi ogni dispositivo Android. Questa sezione descrive lo sviluppo del kernel Linux e i modelli di rilascio (di seguito), i kernel stabili e quelli supportati a lungo termine (LTS) (compreso il motivo per cui tutti i dispositivi Android dovrebbero usare le versioni stabili invece di scegliere le patch), la configurazione del kernel e l’indurimento, i requisiti per le interfacce e i kernel modulari (introdotti in Android O), il kerneldebugging e i test di rete e SquashFS.
Sviluppo del kernel Linux
Il kernel Linux è il più grande progetto software collaborativo di sempre. Nel 2016, più di 4.000 sviluppatori diversi da oltre 450 aziende diverse hanno contribuito al progetto e ci sono stati 6 rilasci, ognuno contenente tra 12.000 e 16.000 cambiamenti diversi. Alla fine del 2016 la dimensione del kernel Linux era di poco più di 56 mila file, consistenti in 22 milioni di linee di codice, script di compilazione e documentazione (kernel release 4.9). (Per le statistiche complete sullo sviluppo di Linux, fare riferimento a https://kernelnewbies.org/DevelopmentStatistics.)
Mentre il kernel Linux contiene codice per tutte le diverse architetture di chip e driver hardware che supporta, un sistema individuale esegue solo una frazione del codice. Un portatile medio usa circa 2 milioni di linee di codice del kernel da 5 mila file per funzionare correttamente, mentre il telefono Pixel usa 3,2 milioni di linee di codice del kernel da 6 mila file (a causa della maggiore complessità di un SoC).
Il kernel Linux usa un modello di rilascio che differisce sostanzialmente dai rilasci standard AOSP. Con il rilascio del kernel 2.6 nel dicembre del 2003, la comunità di sviluppatori del kernel è passata dal precedente modello di avere un ramo di sviluppo separato e un ramo stabile del kernel, ed è passata ad un modello di solo ramo stabile. In questo modello, un nuovo rilascio avveniva ogni 2 o 3 mesi, e quel rilascio veniva dichiarato stabile e raccomandato a tutti gli utenti. Questo cambiamento nel modello di sviluppo era dovuto al ciclo di rilascio molto lungo prima del kernel 2.6 (quasi 3 anni), e alla lotta per mantenere due rami diversi del codice allo stesso tempo.
La numerazione dei rilasci del kernel iniziò con 2.6.x, dove x era un numero crescente che cambiava ad ogni rilascio (il valore del numero non ha significato, se non che è più nuovo del precedente rilascio del kernel). La versione del kernel da allora si è spostata a 4.x che rappresenta 2 cambiamenti di versione maggiori.Questi numeri di versione sono scelti dai manutentori solo per evitare confusione tra gli utenti causata da numeri di release minori più alti.