Il kernel di Linux ha quasi 25 anni . Se dovessi inventare la versione breve sulla storia dello sviluppo del kernel Linux dal 1991 (la sua data di inizio), e in particolare dal 1994 (1.0.0) fino ad oggi, non potrei. Il meglio che potrei fare a meno di leggere ogni singola nota di rilascio del kernel sarebbe quello di fornire quanto segue che sono le caratteristiche generali di rilascio aggiunte al kernel fino alla versione 3.11 (note e collegamenti omessi):
- La versione 1.0 del kernel Linux è stata rilasciata il 14 marzo 1994. Questa versione del kernel Linux supportava solo computer basati su i386 a processore singolo. La portabilità è diventata una preoccupazione, quindi la versione 1.2 (rilasciata il 7 marzo 1995) ha ottenuto il supporto per i sistemi informatici che utilizzano processori basati sulle architetture Alpha, SPARC e MIPS.
- La versione 2.0 è stata rilasciata il 9 giugno 1996. Nella serie c'erano 41 versioni. La caratteristica principale di 2.0 era il supporto SMP (ovvero il supporto per più processori in un singolo sistema) e il supporto per più tipi di processori.
- La versione 2.2 (rilasciata il 26 gennaio 1999) ha rimosso lo spinlock globale e fornito un supporto SMP migliorato e aggiunto il supporto per le architetture m68k e PowerPC nonché i nuovi file system (incluso il supporto di sola lettura per NTFS di Microsoft).
- La versione 2.4.0 , rilasciata il 4 gennaio 2001, conteneva il supporto per ISA Plug and Play, USB e PC Card. Comprendeva anche il supporto per il processore PA-RISC di Hewlett-Packard. Lo sviluppo per 2.4.x è cambiato un po 'in quanto sono state rese disponibili più funzionalità per tutta la durata della serie, tra cui: supporto per Bluetooth, Logical Volume Manager (LVM) versione 1, supporto RAID, file system InterMezzo ed ext3.
- La versione 2.6.0 è stata rilasciata il 18 dicembre 2003. Lo sviluppo di 2.6.x è cambiato ulteriormente includendo nuove funzionalità per tutta la durata della serie. Tra le modifiche apportate alla serie 2.6 vi sono: integrazione di µClinux nelle fonti del kernel mainline, supporto PAE, supporto per diverse nuove linee di CPU, integrazione di ALSA nelle fonti del kernel mainline, supporto per un massimo di 2 32 utenti ( da 2 a 16 ), supporto per un massimo di 2 29 ID di processo (solo 64 bit, archi a 32 bit ancora limitati a 2 15), ha aumentato sostanzialmente il numero di tipi di dispositivi e il numero di dispositivi di ciascun tipo, migliorato il supporto a 64 bit, supporto per file system che supportano file di dimensioni fino a 16 terabyte, prelazione nel kernel, supporto per la libreria thread POSIX nativa (NPTL), integrazione Linux in modalità utente nei sorgenti del kernel mainline, integrazione SELinux nei sorgenti del kernel mainline, supporto InfiniBand e molto altro. Notevoli anche l'aggiunta di numerosi file system nelle versioni 2.6.x: FUSE, JFS, XFS, ext4 e altro. I dettagli sulla storia delle serie del kernel 2.6 sono disponibili nei file ChangeLog nell'area di rilascio del codice sorgente della serie del kernel 2.6 di kernel.org.
- La versione 3.0 è stata rilasciata il 22 luglio 2011. Torvalds ha annunciato che il grande cambiamento è stato: "NIENTE. Assolutamente nulla". Il 30 maggio 2011 ha visto Torvalds annunciare "... assicuriamoci di fare davvero la prossima versione non solo di un numero tutto nuovo, ma anche di un buon kernel". Dopo il previsto processo di sviluppo di 6-7 settimane, verrà rilasciato in prossimità del 20 ° anniversario di Linux.
- Nel dicembre 2012, Torvalds ha deciso di ridurre la complessità del kernel rimuovendo il supporto per i processori i386, rendendo la serie 3.7 del kernel l'ultima a supportare ancora il processore originale. La stessa serie di supporto unificato per il processore ARM.
- La versione 3.11 , rilasciata il 2 settembre 2013, aggiunge molte nuove funzionalità come il nuovo flag O_TMPFILE per open (2) per ridurre le vulnerabilità temporanee dei file, la gestione sperimentale dell'energia dinamica di AMD Radeon, il polling di rete a bassa latenza e zswap (cache di swap compressa).
Potrei anche aggiungere che ormai da molti anni la Linux Foundation ha riferito sullo sviluppo del kernel. Questi sono i punti salienti dello sviluppo del kernel 2012-2013:
- Quasi 92.000 changeset sono stati fusi da 3.738 singoli sviluppatori che rappresentano 536 società (di cui siamo a conoscenza).
- Una vasta gamma di importanti nuove funzionalità è stata unita alla linea principale. Questi includono operazioni senza tick, spazi dei nomi utente, virtualizzazione KVM e Xen per ARM, tracciamento del carico per entità nello scheduler, checkpoint / riavvio dello spazio utente, supporto dell'architettura ARM a 64 bit, filesystem orientato al flash F2FS, molti miglioramenti di rete mirati ai problemi di latenza e bufferbloat, due sottosistemi indipendenti che forniscono una cache veloce per i dispositivi di archiviazione a blocchi e molto altro.
- Il battibecco di lunga data sulle funzionalità del kernel specifiche per Android è completamente scomparso in background. La tanto discussa funzione "wakelocks" è stata tranquillamente sostituita da una diversa soluzione mainline che viene utilizzata negli ultimi dispositivi Android.
- L'uso di strumenti automatizzati per trovare bug nei kernel di sviluppo è aumentato significativamente durante questo periodo. Strumenti come il tester fuzz "trinity" e il sistema build-and-boot zero-day stanno trovando un gran numero di bug nei kernel pre-release, accorciando il ciclo di sviluppo e consentendo alla community di fornire release di qualità superiore.
- I contributi delle industrie mobili e integrate continuano ad aumentare. Linaro, Samsung e TI, per esempio, hanno contribuito insieme al 4,4% delle modifiche nella versione precedente di questo documento; per il periodo fino al 3,10, hanno contribuito quasi all'11% di tutte le modifiche.
- Il progetto del kernel ha partecipato per la prima volta al Programma di sensibilizzazione femminile, portando a 41 candidature per 7 posizioni disponibili. Durante il processo applicativo, 374 patch sono state inviate al kernel e oltre 1/3 di quelle patch sono state accettate nella versione 3.10 del kernel. Il processo di intern è ora in corso, ma i risultati non inizieranno fino alle future versioni del kernel.
Inoltre, quantificare ciò che sta accadendo al kernel non è molto difficile poiché abbiamo metriche al di là dei singoli commit . Ad esempio, sappiamo che il kernel 1.0.0 nel 1994 aveva 176 250 righe di codice; e sappiamo che un kernel contemporaneo come 3.10 ha 15 803 499 righe di codice. Molto di più. La frequenza di rilascio del kernel è aumentata (63 giorni per 3.10), così come il tasso di variazione (9 commit all'ora o più mentre parliamo). Per citare la Linux Foundation:
La capacità di sostenere questo tasso di cambiamento per anni non ha precedenti in nessun precedente progetto di software pubblico.
Ma tutto ciò porta poca comprensione a mio avviso. Pertanto, vorrei chiedere:
- L'evoluzione di questo quarto di secolo può essere sommariamente qualificata oltre l'aggiunta lineare di tutte le funzionalità elencate che compongono questo kernel nel tempo?
- E questo porta qualche idea su cosa sia il kernel Linux o dove sta andando? Dopo 25 anni di sviluppo si possono certamente trarre alcune conclusioni al riguardo?
Alla ricerca di una risposta astratta nei termini del laico che dice tutto senza ricorrere a dire tutto.