Linux (kernel) e Vesubia: differenze tra le pagine

(Differenze fra le pagine)
Contenuto cancellato Contenuto aggiunto
GPL versione 3: soltanto???
 
FrescoBot (discussione | contributi)
 
Riga 1:
{{Fiume
{{Nota disambigua|la famiglia di sistemi operativi basati su questo [[kernel]]|Linux}}
|nome = Vesubia
{{Sistema operativo
|immagine = Vesubie.JPG
|nome = Linux
|didascalia = L'alto corso del fiume
|logo = Tux.svg
|nazione = FRA
|screenshot = KNOPPIX booting.png
|attraversa ={{simbolo|Flag of Provence Alpes Cote d Azur.png}} [[Provenza-Alpi-Costa Azzurra]]
|didascalia = Caricamento del kernel Linux 2.6.24.4, [[Knoppix]] 5.3.1
|attraversa_2 ={{simbolo|Arms of Nice.svg}} [[Alpi Marittime (dipartimento)|Alpi Marittime]]
|sviluppatore = [[Linus Torvalds]] e altri
|attraversa_3 =[[Arrondissement di Nizza|Nizza]]
|famiglia = [[POSIX]]
|note_portata =
|prima_versione_pubblicata = 1.0
|bacino = 348
|data_prima_pubblicazione = 13 marzo [[1994]]<ref>{{Cita web|http://www.kerneltrap.com/node/14002|Linux: The 0.01 Release|9 gennaio 2011|lingua=en}}</ref>
|note_bacino =
|tipo_kernel = [[Kernel#Kernel monolitici|Monolitico]]
|altitudine_sorgente = 2665
|piattaforme_supportate = [[Alpha AXP]], Sun SPARC, [[Motorola 68000]], [[PowerPC]], [[Architettura ARM|ARM]], Hitachi SuperH, [[IBM]] S/390, [[Architettura MIPS|MIPS]], [[Hewlett Packard|HP]] PA-RISC, [[Intel]] IA-64, [[AMD]] x86-64, AXIS CRIS, Renesas M32R, Atmel AVR32, Renesas H8/300, NEC V850,Intel Quarz, Tensilica Xtensa, Analog Devices Blackfin<ref>{{cita web |titolo=Piattaforme supportate dal kernel Linux |url=https://www.kernel.org/ |accesso=23 luglio 2010 |lingua=en}}</ref>
|note_altitudine_sorgente =
|interfaccia_utente = Svariati [[Ambiente desktop|Ambienti Desktop]] operanti su [[X Window]], [[Command line interface|CLI]] o [[Sistema embedded|sistemi embedded]]
|nasce = [[Lago Bianco (Francia)|Lago Bianco]] nel [[massiccio del Mercantour]]
|tipologia_licenza = libero
|nasce_lat =
|licenza = [[GNU General Public License|GNU GPLv2]]
|nasce_long =
|stadio_sviluppo = In corso (sviluppo continuo)
|affluenti =
|sfocia = nel [[Varo (fiume)|Varo]] a [[Levens]]
|sfocia_lat =
|sfocia_long =
|mappa =AlpesMaritimes027B.jpg
}}
'''Linux''' è un [[kernel]] creato nel [[1991]] da [[Linus Torvalds]] e derivato da [[UNIX]]. Distribuito sotto [[licenza di software libero]] [[GNU General Public License|GNU GPLv2]], anziché [[software proprietario]], comprende diversi [[firmware]] sotto licenze non-libere<ref>{{Cita web|https://kernel.org/pub/linux/kernel/COPYING|COPYING|24 marzo 2016|lingua=en}}</ref><ref>{{Cita web|url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/firmware/WHENCE?id=HEAD|titolo=index : kernel/git/stable/linux-stable.git|3=24 marzo 2016|lingua=en|urlmorto=sì|urlarchivio=https://web.archive.org/web/20161208072928/http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/firmware/WHENCE?id=HEAD|dataarchivio=8 dicembre 2016}}</ref> che, utilizzato congiuntamente al [[sistema operativo]] [[GNU]], ideato da [[Richard Stallman]], ha dato vita al [[sistema operativo]] [[Linux]], diffusosi nelle sue varie [[Distribuzione (Linux)|distribuzioni]]. L'attività di sviluppo è promossa dalla [[Linux Foundation]] che ha portato ad una [[standard|standardizzazione]] nota come [[Linux Standard Base]], mentre un tentativo di implementazione di un kernel completamente [[software libero|libero]] è [[Linux-libre]]. L'accesso diretto al kernel da parte dell'utente/[[sistemista|amministratore]] in modalità [[user mode]]/[[kernel mode]] si ha attraverso la [[Linux console]].
 
La '''Vesubia''' (in [[lingua francese|francese]]: ''Vésubie'', in [[lingua occitana|occitano]] ''Vesúbia'') è un [[fiume]] della [[Francia]], [[affluente]] di sinistra del [[Varo (fiume)|Varo]]. Il fiume scorre interamente (45&nbsp;km) nell'ex [[contea di Nizza]] e nell'attuale dipartimento francese delle [[Alpi Marittime (dipartimento)|Alpi Marittime]].
== Storia ==
Nell'aprile del [[1991]] [[Linus Torvalds]], uno studente finlandese di [[informatica]] presso l'[[Università di Helsinki]], all'età di 21 anni iniziò a lavorare su alcune semplici idee per un sistema operativo. Iniziò con un ''[[context switch]]'' programmato in [[assembly]] su [[processore]] [[Intel]] 80386 e un [[driver]] da [[terminale (informatica)|terminale]]. A questo punto, il 25 agosto 1991, Torvalds scrisse un post<ref>{{Cita web|lingua=en|titolo=What would you like to see most in minix?|autore=[[Linus Torvalds]]|data=26 agosto 1991|sito=comp.os.minix|url=https://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b|accesso=25 dicembre 2008}}</ref>, di cui è riportata una traduzione:
 
Le sorgenti della Vesubia sono ubicate nel [[Parco nazionale del Mercantour]], e precisamente presso [[Saint-Martin-Vésubie]], presso il lago Bianco (2 665 m), dopodiché giunge alla confluenza dei torrenti di Ciriegia (Le Boréon) e della Finestra e continua verso valle.
{{Citazione|Sto [[programmazione (informatica)|programmando]] un sistema operativo (gratuito e solo per hobby, non vuole essere grande e professionale come GNU) per cloni di AT 386(486). È in preparazione da aprile, e sta iniziando a funzionare. Mi piacerebbe sapere cosa vi piace e non vi piace in Minix, siccome il mio Sistema Operativo gli assomiglia in parte (fra le altre cose, lo stesso layout fisico del filesystem, per ragioni pratiche).
 
Il fiume percorre poi l'intera valle omonima ed attraversa i borghi di [[Roquebillière|Roccabigliera]] e [[Lantosque|Lantosca]], fino confluire nel Varo a valle di [[Levens|Levenzo]], appena dopo aver passato le gole della Vesubia.
Ho convertito la shell bash (v.1.08) e GCC (v.1.40), e sembrano funzionare. Ciò denota che otterrò qualcosa di funzionante in pochi mesi e mi piacerebbe sapere quali funzionalità vuole la maggior parte della gente. Ogni suggerimento è ben accetto, anche se non posso promettervi che lo implementerò.}}
 
Le alte valli della Vesubia hanno fatto parte dell'[[Italia]] dal [[1861]] al [[1947]], anno in cui per via del [[Trattato di Parigi (1947)|Trattato di pace di Parigi]] sono state cedute alla Francia dal comune di [[Entracque]] (CN) al comune di [[Saint-Martin-Vésubie]].
Linus aveva iniziato a programmare il kernel su un'architettura [[MINIX]], un sistema operativo libero programmato dal professore universitario [[Andrew Stuart Tanenbaum|Andrew S. Tanenbaum]], che poi però criticò molto il lavoro dello studente finlandese.
 
Dopo la pubblicazione di questo post, molte persone collaborarono allo sviluppo del progetto, e il 5 ottobre 1991 Linus rilascia la versione 0.02 del kernel, circa un mese dopo del rilascio della versione 0.01, che però non ebbe grande successo. Egli scrisse, in occasione del rilascio, il seguente post<ref>{{Cita web|lingua=en|titolo=Free minix-like kernel sources for 386-AT|autore=[[Linus Torvalds]]|data=5 ottobre 1991|sito=comp.os.minix|url=https://groups.google.com/group/comp.os.minix/browse_thread/thread/e3df794a2bce97da|accesso=25 dicembre 2008}}</ref>:
 
{{Citazione|Rimpiangete i bei giorni di Minix 1.1, quando gli uomini erano uomini e scrivevano da soli i driver?
Vi manca un bel progetto e morite dalla voglia di spezzarvi le ossa con un Sistema Operativo che potete provare a modificare secondo le vostre necessità?
Trovate frustrante che su Minix funzioni tutto? Non passate più intere notti per ottenere un programma che lavora meravigliosamente?
Allora questo post dovrebbe essere fatto apposta per voi
 
Come ho detto un mese fa, sto lavorando su una versione libera di un clone di Minix per computer AT-386. Ha finalmente raggiunto uno stadio in cui è usabile (sebbene non possa dipendere da ciò che volete), e sono favorevole a rendere pubblici i sorgenti per la grande massa. È solo la versione 0.02 (è già pronta una patch molto piccola), ma ho avviato con successo la shell bash/GCC/GNU-make/GNU-sed/compress eccetera.
 
I sorgenti di questo mio progetto possono essere scaricati nic.funet.fi nella cartella ''/pub/Linux''. La cartella contiene anche qualche file README e un paio di binari da eseguire con Linux (bash, update and gcc.)
È fornito il sorgente completo del kernel dato che non è stato utilizzato codice proveniente da Minix.
Il sorgente delle librerie è solo parzialmente libero e non è quindi al momento distribuibile.
È possibile compilare il sistema così com'è ed è stato riconosciuto funzionante. Heh.
I sorgenti dei binari (bash e gcc) possono essere trovati nello stesso posto in /pub/gnu.
 
ATTENZIONE! NOTA! Questi sorgenti necessitano di minix-386 per essere compilati
(e gcc-1.40, o, non è stato testato, 1.37.1), e impostati correttamente per il
funzionamento, quindi non è ancora un sistema indipendente per chi non avesse
Minix. Ci sto lavorando. Devi anche essere parecchio esperto per impostarlo
correttamente, quindi per quelli che speravano in un'alternativa a minix-386,
per favore ignoratemi. Al momento è indirizzata ad esperti interessati ai
sistemi operativi e 386 con accesso a Minix.
 
Il sistema necessita di un disco rigido AT-compatibile (IDE va bene) ed EGA/VGA.
Se siete interessati vi prego di scaricare il README e le note di rilascio,
e/o spedirmi un'email per ulteriori informazioni.
 
Riesco (più o meno) a sentirvi mentre vi chiedete "perché?". Hurd uscirà
tra un anno (o 2, o il prossimo mese, chi lo sa), e ho già Minix.
Questo è un programma per programmatori scritto da un programmatore. Mi
è piaciuto scriverlo, e a qualcuno potrebbe piacere darci un'occhiata
e anche modificarlo per le proprie esigenze. È abbastanza piccolo da capire,
usare e modificare, e sono curioso dei vostri commenti.
 
Mi piacerebbe anche sentirli da chiunque abbia scritto qualsiasi utility o funzione
di libreria per Minix. Se i vostri sforzi sono liberamente distribuibili (sotto
copyright o anche di pubblico dominio), mi piacerebbe sentirvi, in modo che
possa aggiungerli al sistema. Sto usando Earl Chews estdio al momento (grazie
per un sistema carino e funzionante Earl), e lavori simili saranno molto ben accetti.
Il vostro C sarà ovviamente lasciato intatto. Scrivetemi due righe se volete lasciarmi usare il vostro codice.}}
 
Fu dato inizio ad un newsgroup ''alt.os.linux'' e il 19 gennaio 1992 fu inserito il primo post.<ref>{{Cita web|lingua=en|titolo=Troubles with Partitions|autore=David W Summers|data=19 gennaio 1992|sito=alt.os.linux / comp.os.minix|url=news://1992Jan19.085628.18752@cseg01.uark.edu|urlarchivio=https://groups.google.com/group/alt.os.linux/msg/c638df159fa15159|accesso=24 dicembre 2008|dataarchivio=24 dicembre 2008|urlmorto=no}}</ref> Nel 31 marzo 1992, alt.os.linux divenne ''comp.os.linux''.<ref>{{Cita web|lingua=en|titolo=It's here!|autore=Alan B Clegg|data=31 marzo 1992|sito=comp.os.linux|url=news://1992Mar31.131811.19832@rock.concert.net|urlarchivio=https://groups.google.com/group/comp.os.linux/msg/81fe3618c4803d1e|accesso=24 dicembre 2008|dataarchivio=24 dicembre 2008|urlmorto=no}}</ref>
 
Presto fu effettuato il porting di [[X Window System]] su Linux. La prima versione di Linux ad essere capace di eseguire X fu la 0.95 nel marzo del 1992. Questo grande salto di numerazione nella versione (da 0.1x a 0.9x) fu dovuto al fatto che si sentiva molto vicina una versione 1.0 senza nessun pezzo mancante. Tuttavia questa sensazione era troppo ottimista e dal 1993 fino agli inizi del 1994 furono rilasciate 15 versioni della versione 0.99.
 
Il 14 marzo 1994 fu rilasciato Linux 1.0.0, con 176.250 linee di codice. A marzo del 1995, fu rilasciato Linux 1.2.0 ({{formatnum:310950}} linee di codice).
 
La versione 2 di Linux, pubblicata il 9 giugno 1996, fu seguita da altre versioni maggiori sotto il prefisso della versione 2:
* 25 gennaio 1999 - Rilascio di Linux 2.2.0 ({{formatnum:1800847}} linee di codice).
* 18 dicembre 1999 - Furono pubblicate le patch per [[mainframe IBM]] 2.2.13, che permisero a Linux di essere installato su macchine di livello enterprise.
* 4 gennaio 2001 - Rilascio di Linux 2.4.0 ({{formatnum:3377902}} linee di codice).
* 17 dicembre 2003 - Rilascio di Linux 2.6.0 ({{formatnum:5929913}} linee di codice).
* 9 ottobre 2008 - Rilascio di Linux 2.6.27 ({{formatnum:9709868}} linee di codice)<ref name="Linux Kernel Data">"[http://www.heise-online.co.uk/open/Kernel-Log-Linux-2-6-27-Released--/features/111671/6#trends Linux Kernel Data]."</ref>.
* 24 dicembre 2008 - Rilascio di Linux 2.6.28 ({{formatnum:10195402}} linee di codice).
* 20 ottobre 2010 - Rilascio di Linux 2.6.36 ({{formatnum:13499457}} linee di codice).<ref name="autogenerato1">"[http://www.h-online.com/open/features/What-s-new-in-Linux-2-6-36-1103009.html?page=6 Linux Kernel Data]."</ref><br />
* luglio 2011, per festeggiare il 20º anniversario della nascita di Linux, Torvalds ha deciso di passare ad un sistema di numerazione a 2 cifre, rilasciando la versione 3.0 del kernel. L'ultima release della serie 2.6 è stata la 2.6.39.<br />La prima release del nuovo sistema di numerazione adottato - la 3.0 - pubblicata contiene {{formatnum:14646952}} righe di codice.
* 8 marzo 2015 - Viene rilasciata la prima beta della nuova versione 4.0 del kernel.
* 12 marzo 2015 - Viene rilasciata la release stabile di Linux 4.0 e da ora la numerazione prevederà solo un numero decimale.
 
=== Il dibattito Tanenbaum-Torvalds ===
Il fatto che Linux sia un [[Kernel#Kernel monolitici|kernel monolitico]] piuttosto che un [[Kernel#Microkernel|microkernel]] è stato l'argomento del dibattito [[Andrew Stuart Tanenbaum|Tanenbaum]]-[[Linus Torvalds|Torvalds]]. Il dibattito iniziò nel 1992 riguardo Linux e l'architettura del kernel in generale sul gruppo di discussione [[Usenet]] <code>comp.os.minix</code>.<ref>{{Cita web|lingua=en|titolo=LINUX is obsolete|autore=Andrew Stuart Tanenbaum|data=29 gennaio 1992|sito=comp.os.minix|url=news://12595@star.cs.vu.nl|urlarchivio=https://groups.google.com/group/comp.os.minix/msg/f447530d082cd95d|accesso=25 dicembre 2008|dataarchivio=25 dicembre 2008}}</ref>
 
Tanenbaum sosteneva che i microkernel fossero superiori ai kernel monolitici e che perciò [[Linux]] fosse obsoleto. A differenza dei kernel monolitici tradizionali, i driver sono facilmente configurati come [[Loadable Kernel Module|moduli del kernel]] e caricati o meno mentre il sistema è in esecuzione. Questo argomento è stato riproposto il 9 maggio 2006<ref>{{Cita web | data=9 maggio 2006 | titolo = Hybrid kernel, not NT | url = http://www.realworldtech.com/forums/index.cfm?action=detail&id=66630&threadid=66595&roomid=11 | nome = Linus | cognome = Torvalds | accesso=6 gennaio 2007 }}</ref> e il 12 maggio 2006.<ref>{{Cita web | data=12 maggio 2006 | url = http://www.cs.vu.nl/~ast/reliable-os/ | titolo = Tanenbaum-Torvalds Debate: Part II | cognome = Tanenbaum | nome = Andy | accesso=6 gennaio 2007 }}</ref>
 
== Descrizione ==
{{Vedi anche|Kernel}}
[[File:KNOPPIX booting.png|thumb|upright=1.4|Caricamento del kernel Linux 2.6.24.4 su [[Knoppix]] 5.3.1]]
Il [[kernel]] Linux, uno dei più riusciti esempi di software [[open source]],<ref>
{{Cita web
|url=https://lkml.org/lkml/2006/9/25/161
|autore=Linus Torvalds
|data=25 settembre 2006
|titolo=Re: GPLv3 Position Statement
|lingua=en
}}</ref> costituisce il nucleo dei sistemi operativi della famiglia di Linux ovvero le [[distribuzione Linux]].<ref>
{{Cita web
|url = https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=README;h=90a07658ede14840346eee6610648bcf4ec79997;hb=f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b
|titolo = File README
|editore = git.kernel.org
|accesso = 12 novembre 2010
|lingua = en
|urlmorto = sì
}}</ref> Fu inizialmente creato nel [[1991]] da alcuni studenti di informatica [[Finlandia|finlandesi]]<ref>
{{Cita web
|autore=Marjorie Richardso
|titolo=Intervista: Linus Torvalds
|url=https://www.linuxjournal.com/article/3655
|data=1º novembre 1999
|editore=Linux Journal
|lingua=en
|accesso=20 agosto 2009
}}</ref> tra cui [[Linus Torvalds]], il capogruppo. Successivamente aumentarono in modo repentino i suoi sviluppatori ed utilizzatori che aderivano al progetto del [[software libero]] e contribuivano allo sviluppo del nuovo sistema operativo.<ref>{{Cita web
|url=https://www.oreilly.com/openbook/freedom/ch09.html|titolo=Chapter 9: The GNU General Public License
|autore=Sam Williams
|sito=Free as in Freedom
|editore=O'Reilly Media
|lingua=en
|accesso=16 febbraio 2011
}}</ref>
 
Rilasciato, liberamente [[download|scaricabile]] [https://www.kernel.org/] e modificabile/[[customizzazione|personalizzabile]] sotto la [[licenza libera]] [[GNU General Public License|GNU GPL]]<ref name="COPYING">
{{cita web
|url = https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=COPYING
|titolo = File COPYING
|editore = git.kernel.org
|lingua = en
|accesso = 16 febbraio 2011
|urlmorto = sì
|urlarchivio = https://archive.is/20121221041715/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=COPYING
|dataarchivio = 21 dicembre 2012
}}<!-- questo viene aggiornato col kernel, la citazione originale era ;h=ca442d313d86dc67e0a2e5d584b465bd382cbf5c;hb=f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b --></ref> (insieme ad alcuni [[firmware]] con varie licenze), è continuamente e liberamente sviluppato da collaboratori di tutto il mondo attraverso la relativa [[community]], con lo sviluppo che ogni giorno avviene sfruttando la relativa [[mailing list]], in modo del tutto analogo in cui sono sviluppati i [[suite di protocolli Internet|protocolli di Internet]]. Il [[codice sorgente]] di Linux è dunque disponibile a tutti ed è ampiamente personalizzabile, al punto da rendere possibile, in fase di compilazione, l'esclusione di codice non strettamente indispensabile.
 
Come ogni progetto che sia [[software libero]], anche il kernel Linux è dunque in continua evoluzione<ref>Le nuove release sono reperibili sul sito [https://www.kernel.org/ kernel.org]</ref> con la dimensione del kernel che cresce in maniera esponenziale, aggiungendo nuovi moduli, nuovo [[hardware]] supportato e così via. Il ramo di sviluppo principale del kernel Linux prevede che esso contenga anche alcune parti non-libere, offuscate od oscurate come ad esempio alcuni [[driver]]. Il progetto [[Linux-libre]] si propone invece come variante completamente libera di Linux, da cui sono nate diverse [[Linux#Distribuzioni completamente libere|distribuzioni completamente libere]].<ref name="linux-libre">
{{Cita web
|url=https://www.fsfla.org/ikiwiki/selibre/linux-libre/index.en.html
|titolo=GNU Linux-libre, Free as in Freedo
|sito=Free Software Foundation Latin America
|citazione=Linux, the kernel developed and distributed by Linus Torvalds et al, contains non-Free Software, i.e., software that does not respect your essential freedoms, and it induces you to install additional non-Free Software that it doesn't contain.
|lingua=en
|accesso=21 gennaio 2015
}}
</ref>
 
In quanto "cuore" di un [[sistema operativo]] (nucleo) fornisce tutte le funzioni essenziali per il sistema, in particolare la gestione della [[memoria primaria]], delle risorse [[hardware]] del sistema e delle [[periferica|periferiche]], assegnandole di volta in volta ai [[processo (informatica)|processi]] in esecuzione. La controparte del kernel è la [[Shell (informatica)|shell]], ovvero l'interfaccia utente del sistema, la parte più esterna. I programmi chiedono le risorse al kernel attraverso delle chiamate ([[chiamata di sistema|system call]]) e non possono accedere direttamente all'hardware.
 
Si occupa quindi di gestire il tempo [[processore]], le comunicazioni e la memoria distribuendole ai processi in corso a seconda delle priorità ([[Scheduler|scheduling]]) realizzando così il [[multitasking]].
Supporta dunque il [[multitasking]] ed è [[multiutenza|multiutente]]: ciò permette che diversi utenti (con privilegi differenziati) possano eseguire sullo stesso sistema diversi processi [[software]] in simultanea. Attualmente Linux supporta gran parte dell'[[hardware]] disponibile per [[Personal computer|PC]] e supporta un numero enorme di architetture (tra cui [[SPARC]], [[PowerPC]], [[Architettura ARM|ARM]] e le più moderne [[CPU]] a [[64 bit]]).
 
Linux supporta il [[Pre-rilascio|multitasking con pre-rilascio]] (sia in [[user mode]] che in [[kernel mode]]), [[memoria virtuale]], [[Library (computer science)|librerie condivise]], [[Demand paging|caricamento a richiesta]], eseguibili [[copy-on-write]] condivisi, [[gestione della memoria]], la [[suite di protocolli Internet]], e il [[Thread (informatica)|threading]]. La flessibilità di questo [[kernel]] lo rende adatto a tutte quelle tecnologie [[Sistema embedded|embedded]] emergenti e anche nei centri di [[calcolo distribuito]] (come il cluster [[Beowulf (computer)|Beowulf]]) fino ad essere incorporato in alcuni videoregistratori digitali e nei [[telefono cellulare|telefoni cellulari]].
 
[[File:Linux kernel interfaces.svg|thumb|upright=1.4|System Call Interface e [[Linux Standard Base]]]]
 
=== Architettura ===
[[File:Linux kernel map.png|thumb|Mappa del kernel di Linux e la sua versione interattiva.]]
Linux è un [[kernel monolitico]]. Sebbene oggi il [[kernel]] possa essere compilato in modo da avere un'immagine binaria ridotta al minimo e i driver caricabili da moduli esterni, l'architettura originaria è chiaramente visibile: tutti i driver infatti devono avere una parte eseguita in [[kernel mode]], anche quelli per cui ciò non sarebbe affatto necessario (ad esempio i driver dei [[file system]]).
 
I [[driver]] e le estensioni del kernel lavorano nel [[kernel space]] ([[Ring (computer security)|ring 0]] nella maggior parte delle [[CPU]]), con pieno accesso all'hardware, sebbene alcune eccezioni lavorino in [[user space]]. Il [[X Window System|sistema grafico]] che la maggior parte delle persone utilizza con Linux non lavora nel kernel space. [[Kernel mode]] [[preemption (computing)|Preallocazione]] consente ai driver dei dispositivi di essere preallocati sotto determinate condizioni. Questa caratteristica è stata introdotta per gestire correttamente gli [[Interrupt|interrupt dell'hardware]] e migliorare il supporto al [[sistema multiprocessore simmetrico]] (SMP). La preallocazione inoltre migliora la [[latenza]], incrementano la reattività e rendono Linux più adatto ad applicazioni in tempo reale.
 
=== Portabilità ===
[[File:Ipod linux booting kernel.jpg|thumb|[[iPodLinux]] mentre effettua il [[boot]] del Kernel.]]
 
Sebbene inizialmente non progettato per essere [[Portabilità|portabile]], Linux è uno dei kernel di sistema operativo maggiormente portabile, in grado di funzionare su un'ampia gamma di sistemi dall'[[iPAQ]] (un computer palmare) all'IBM [[System z9]] (un server [[mainframe]] in grado di eseguire centinaia o migliaia di istanze Linux contemporanee). Linux è il sistema operativo principale dei [[supercomputer]] [[Blue Gene]] di IBM. Linux è il sistema operativo di più del 97% dei sistemi nella classifica [[TOP500|Top 500]] dei supercomputer.<ref>{{Cita web|url=https://www.top500.org/statistics/details/osfam/1|editore=Top 500 Supercomputer Sites|mese=novembre|anno=2014}}</ref> Inoltre, Linux è stato compilato in numerosi dispositivi portatili come [[TuxPhone]] e l'iPod di Apple.
 
=== Linguaggi di programmazione ===
Linux è scritto nella versione del [[C (linguaggio)|linguaggio di programmazione C]] supportata dal compilatore [[GNU Compiler Collection|GCC]] (che ha introdotto numerose estensioni e cambiamenti al C standard), insieme a un certo numero di brevi sezioni di codice scritte in linguaggio [[Assembly]] (sintassi GCC con stile "AT&T"). Grazie alle estensioni di C che supporta, GCC per lungo tempo è stato il solo compilatore in grado di compilare correttamente Linux. Nel 2004, [[Intel]] asserì di aver modificato il kernel in modo tale che anche il suo compilatore C fosse in grado di compilare Linux.<ref>[http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html Linux kernel patch for Intel Compiler] {{webarchive|url=https://web.archive.org/web/20110722090031/http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |data=22 luglio 2011 }}</ref>
 
In qualche modo vengono utilizzati molti altri linguaggi, soprattutto nel processo di [[Compilatore|compilazione]] del kernel (metodi in cui a partire dal codice sorgente viene creata un'immagine avviabile). Questi includono [[Perl]], [[Python]] e diversi linguaggi [[Shell (informatica)|shell]]. Alcuni driver possono anche essere scritti in [[C++]], [[Fortran]] o altri linguaggi, ma questa pratica è fortemente scoraggiata. Il sistema di compilazione di Linux supporta ufficialmente solo GCC come compilatore sia del kernel sia dei driver.
 
=== Opzioni di Compilazione ===
Il kernel Linux ha delle [[Linux build options|opzioni di compilazione]] configurabili che consentono di aggiungere o rimuovere specifiche caratteristiche dal kernel durante la compilazione iniziale. Durante quest'ultima fase possono inoltre essere configurati alcuni parametri di default personalizzati.
 
=== Oggetti Kernel ===
Gli oggetti kernel (kernel items) sono funzioni, variabili, file header e macro.<ref>[https://www.xml.com/ldd/chapter/book/ch02.html Linux Device Drivers, 2nd Edition: Chapter 2: Building and Running Modules]</ref>
 
=== Header kernel ===
Gli header del kernel sono [[Header file|file header C]] che forniscono la condivisione di alcune definizioni del kernel di basso livello [[Application binary interface|ABI]] tra kernel e applicazioni dello [[spazio utente]]. La maggior parte delle applicazioni non necessita di questi header: essi servono soltanto per l'uso diretto da parte delle librerie di sistema, utilità e daemon di basso livello.<ref>{{collegamento interrotto|1=[http://news.gmane.org/find-root.php?message_id=%3cPine.LNX.4.64.0604271656390.3701%40g5.osdl.org%3e Gmane Loom] |date=marzo 2018 |bot=InternetArchiveBot }}</ref>
 
Il comando "<code>make headers_install</code>", quando eseguito sull'albero dei sorgenti del kernel, esporta i file header del kernel in una forma adatta all'uso dei programmi nello spazio utente.<ref>[http://www.mjmwired.net/kernel/Documentation/make/headers_install.txt Linux Kernel Documentation :: make : headers_install.txt]</ref>
Quando esportati, la maggior parte degli header del kernel si trovano nelle cartelle <code>/usr/include/asm</code> e <code>/usr/include/linux</code>
 
=== Kernel panic ===
[[File:Kernel-panic.jpg|thumb|Kernel Panic]]
{{Vedi anche|Kernel panic}}
 
In Linux, un "panic" è un errore di sistema irrecuperabile individuato dal kernel al contrario di errori simili individuati in modalità [[user space]]. Il codice in kernel mode ha la possibilità di indicare una condizione di questo tipo chiamando la funzione <code>panic</code> dichiarata nell'header del file sys/system.h. Comunque la maggior parte dei kernel panic sono il risultato di [[Gestione delle eccezioni|eccezioni]] nel codice del kernel, come per esempio riferimenti a [[Indirizzo di memoria]] non validi. Questo è tipicamente indice di
* un [[bug]] da qualche parte nella call chain che conduce al kernel panic;
* un danno a livello hardware, come una cella di RAM danneggiata o errori nelle funzioni aritmetiche nel processore provocati da un [[Pentium FDIV bug|bug del processore]], un processore surriscaldato, danneggiato;
* un [[Linux kernel oops|errore]] a livello software;
* un errore nei parametri forniti dal [[boot loader]], ad esempio l'immagine [[initrd]].
 
=== Formati binari supportati ===
Linux 1.0 supportava il formato binario [[a.out]] e l'[[Executable and linkable format|ELF]], che semplifica la creazione di [[Dynamic-link library|librerie condivise]] (usate tantissimo dai moderni [[desktop environment]] come [[KDE]] e [[GNOME]]<ref><code>ldd /usr/bin/kwin</code> lists 40 shared libraries (kwin 3.5.5a); <code>ldd /usr/bin/gnome-panel</code> lists 68 (gnome-panel 2.14.3).</ref>). ELF è il formato standard usato da [[GNU Compiler Collection|GCC]] fin dalla versione 2.7.0<ref>{{Cita web |url=http://www.ibiblio.org/pub/historic-linux/distributions/slackware/3.1/docs/ELF-HOWTO |titolo=The Linux ELF HOWTO |nome=Daniel |cognome=Barlow |data=13 settembre 1995 |accesso=19 luglio 2007 |urlmorto=sì |urlarchivio=https://web.archive.org/web/20071012180722/http://ibiblio.org/pub/historic-linux/distributions/slackware/3.1/docs/ELF-HOWTO |dataarchivio=12 ottobre 2007 }}</ref> perciò oggigiorno a.out viene usato molto raramente.
 
Linux supporta molti altri formati binari, inclusi [[binfmt misc]] per associare un file a un programma (come un [[Interprete (informatica)|interprete]]) per eseguire o mostrare quel file.
 
=== Architetture delle macchine virtuali ===
Il kernel Linux ha un supporto estensivo e funziona su numerose architetture di [[macchina virtuale|macchine virtuali]] sia come sistema operativo "server" che "client". Le [[Macchina virtuale|macchine virtuali]] solitamente emulano la famiglia di processori con [[architettura x86]], sebbene in alcuni casi siano emulati anche i processori [[PowerPC]] o [[AMD64]].
 
== Versioni ==
Mentre sviluppa il proprio codice e integra le modifiche create da altri programmatori, Linus Torvalds continua a rilasciare nuove versioni del kernel di Linux. Queste sono chiamate versioni "vanilla", ad indicare che non sono state modificate da nessun altro. Molte distribuzioni Linux modificano il kernel per il proprio sistema, principalmente allo scopo di aggiungere il supporto per driver o caratteristiche che non sono state ufficialmente rilasciate come stabili, mentre altre distribuzioni usano un kernel vanilla.
 
=== Modello di sviluppo ===
Il modello di sviluppo per Linux 2.6 differisce molto da quello di Linux 2.5. Precedentemente esisteva un ramo stabile (2.4), dove solo i cambiamenti relativamente piccoli e quelli ritenuti sicuri venivano attuati, e un ramo instabile (2.5), dove invece cambiamenti più consistenti erano permessi. Questo significava che gli utenti avevano sempre una versione con le correzioni più recenti, ma dovevano aspettare per le nuove aggiunte provenienti dal ramo 2.5. L'aspetto negativo di questo procedimento, era dato dal fatto che la versione stabile del kernel, col passare del tempo, non supportava più l'hardware recente, e mancava delle caratteristiche che a mano a mano risultavano necessarie.
 
Verso la fine della serie 2.5.x, alcuni sviluppatori hanno deciso di apportare alcune modifiche nel ramo stabile, ma questo ha provocato un aumento dei problemi nella serie 2.4.x del kernel. Il ramo 2.5 venne allora dichiarato stabile e rinominato 2.6. Invece di aprire un ramo 2.7 instabile, gli sviluppatori continuarono a inserire modifiche d'una certa importanza nel ramo stabile. In questa maniera si sono tenuti sotto controllo con maggior precisione i cambiamenti, dividendoli in parti più piccole, rendendo disponibili le nuove caratteristiche velocemente, e ampliando il numero di persone che testano il codice più recente.
 
Il nuovo modello di sviluppo che caratterizza il 2.6, fa sì inoltre che non esista un ramo stabile per le persone che cercano solo correzioni di bug o inerenti alla sicurezza, ma non necessitano delle ultime caratteristiche. Le correzioni vengono applicate solo nella versione più recente, così se un utente vuole una versione con tutti i bug noti corretti, ottiene nel contempo tutte le ultime caratteristiche, ma rischia (in alcuni casi) di non far funzionare più alcune cose che nella versione precedente funzionavano. Una correzione parziale di questo problema è stata prima menzionata (vedasi la quarta cifra del numero della versione): essa caratterizza i nuovi kernel, ma non risolve completamente alcune necessità che non si avrebbero usando un ramo stabile. Le distribuzioni, come [[Red Hat]] e [[Debian]], allegano già un certo tipo di kernel nei loro rilasci: alla maggior parte delle persone conviene usare le versioni predefinite.
 
In risposta alla mancanza di un ramo stabile del kernel (inteso come ramo dove non vengono apportati nuovi cambiamenti, ma solo correzioni), [[Adrian Bunk]], nel dicembre 2005, ha annunciato che avrebbe continuato a rilasciare kernel 2.6.16.y anche quando fosse stata rilasciata la versione 2.6.17.<ref>[https://web.archive.org/web/20120724093633/http://kerneltrap.org/node/6930 Linux: 2.6.16.y Lives On | KernelTrap<!-- Titolo generato automaticamente -->]</ref> Inoltre ha progettato di includere aggiornamenti relativi ai driver, rendendo così lo sviluppo della serie 2.6.16 molto simile a quello della vecchia 2.4.<ref>[https://web.archive.org/web/20120709101718/http://kerneltrap.org/node/6386 Linux: Maintaining A 2.6.16.y Tree | KernelTrap<!-- Titolo generato automaticamente -->]</ref>
 
Il 10 ottobre 2008, è stata rilasciata la versione stabile 2.6.27.<ref>[https://kernel.org/ The Linux Kernel Archives<!-- Titolo generato automaticamente -->]</ref>. Nel febbraio dello stesso anno, gli sviluppatori hanno poi ideato un ramo del kernel ''instabile'', denominato ''linux-next'': un posto dove ospitare le modifiche, con l'intento di includerle nel ciclo di sviluppo successivo.<ref>[https://lwn.net/Articles/269120/ linux-next and patch management process [LWN.net&#93;<!-- Titolo generato automaticamente -->]</ref>
 
Nel luglio del [[2011]], per festeggiare il 20º anniversario della nascita di Linux, Torvalds ha deciso di rilasciare la versione 3.0 del kernel, passando ad un sistema di numerazione a 2 cifre. L'ultima release della serie 2.6 è stata la 2.6.39.
 
=== Controllo versione ===
In passato il codice sorgente del kernel Linux era gestito senza l'impiego di un sistema automatico di [[controllo versione]] (in inglese ''source code management'', SCM), principalmente a causa del fatto che a Torvalds non piacciono gli SCM centralizzati.
 
Nel 2002 lo sviluppo del kernel passò a [[BitKeeper]], un SCM che soddisfaceva i requisiti tecnici richiesti da Torvalds e che era interoperabile, a certi livelli, con altri sistemi come [[Concurrent Versions System|CVS]] e [[Subversion]]. Sebbene Torvalds e altri sviluppatori ottenessero BitKeeper gratuitamente, il fatto che non fosse [[software libero]] causò delle controversie.
 
Dei tentativi di ''reverse-engineering'' di [[Andrew Tridgell]] su BitKeeper convinsero BitMover, la compagnia che gestiva BitKeeper, a terminare il suo sostegno alla comunità di sviluppo di Linux. Di conseguenza, Torvalds e altri scrissero un nuovo sistema di controllo di versione, chiamato [[git (software)|git]]; il nuovo software fu scritto in poche settimane, e due mesi dopo si ebbe la prima versione ufficiale del kernel Linux rilasciata con git.<ref>{{Cita web |autore=Linux Kernel Mailing List |url=https://marc.info/?l=git-commits-head&m=111904216911731 |titolo=Linux 2.6.12 | data=17 giugno 2005}}</ref> Poco dopo git è diventato un progetto indipendente, guadagnandosi un'ampia diffusione nella comunità del software libero.
 
=== Manutenzione ===
Linus Torvalds è il supervisore dei cambiamenti e del rilascio delle ultime versioni del kernel: ha delegato la manutenzione delle versioni più datate ad altri programmatori. Alcune versioni vecchie come la 2.0 (ufficialmente resa obsoleta dal kernel 2.2.0 pubblicato nel gennaio 1999) sono aggiornate solo quando questo viene reputato necessario e i cambiamenti sono molto rari.
 
{| class="wikitable"
! Serie del kernel
! Versione corrente
! Supervisore
|-
| 2.0 || 2.0.40 || [[David Weinehall]]<ref>{{Cita web |autore=David Weinehall |url=http://kerneltrap.org/node/2279 |titolo=&#91;ANNOUNCE&#93; Linux-kernel 2.0.40 aka ``The Moss-covered Tortoise'' |data=8 febbraio 2004 |urlarchivio=https://archive.is/20120530045533/http://kerneltrap.org/node/2279 |dataarchivio=30 maggio 2012 |urlmorto=sì }}</ref>
|-
| 2.2 || 2.2.27-rc2 || [[Marc-Christian Petersen]]<ref>{{Cita web |autore=Marc-Christian Petersen |url=http://kerneltrap.org/node/2279 |titolo=Linux 2.2.27-rc2 |data=13 gennaio 2005 |urlarchivio=https://archive.is/20120530045533/http://kerneltrap.org/node/2279 |dataarchivio=30 maggio 2012 |urlmorto=sì }}</ref> (ex supervisore [[Alan Cox]])
|-
| 2.4 || 2.4.37-rc2 || [[Willy Tarreau]]<ref>{{Cita web|autore=Willy Tarreau |url=https://marc.info/?l=linux-kernel&m=122080661925779 |titolo=Linux 2.4.37-rc1 |data=7 settembre 2008}}</ref> (ex supervisore [[Marcelo Tosatti]])
|-
| 2.6.16 || 2.6.16.62 || [[Adrian Bunk]]<ref>{{Cita web |autore=Adrian Bunk |url=https://marc.info/?l=linux-kernel&m=121667337007967 |capitolo=Linux 2.6.16.62 |titolo=linux-kernel |data=21 luglio 2008}}</ref>
|-
| 2.6.17+ || (cambiamenti frequenti) || [[Linus Torvalds]]
|-
| 2.6.x-mm || (cambia rapidamente) || [[Andrew Morton]]
|}
 
Altri programmatori del kernel di Linux particolarmente conosciuti sono [[Robert Love]] e [[Ingo Molnar|Ingo Molnár]].<ref>Per l'elenco completo vedi [http://lxr.linux.no/source/MAINTAINERS Linux MAINTAINERS file].</ref>
 
{{Calendario Kernel Linux}}
 
=== Numerazione delle versioni ===
Per lungo tempo la versione del kernel di Linux era composta da tre numeri, ma recentemente questo sistema è stato modificato e ora la versione consiste di quattro cifre, nella forma "A.B.C[.D]", per esempio 2.2.1, 2.4.13, oppure 2.6.12.3;
* la 'A' indica la versione del kernel, che viene modificata molto raramente e solo quando avvengono mutamenti radicali del codice (fino al 2008 questo è avvenuto solo due volte, nel 1994, con l'introduzione della versione 1.0, e nel 1996 con la versione 2.0) o per ragioni commemorative (versione 3, nel 2011, per i 20 anni del kernel linux);
* la 'B' indica la revisione "maggiore" del kernel:
** prima della serie 2.6.x, i numeri pari (come 1.2, 2.4, oppure 2.6) indicavano un ramo stabile e i numeri dispari (come 1.1 oppure 2.5) indicavano rami di sviluppo, dove erano sperimentate nuove caratteristiche e driver finché queste non erano reputate adatte ad essere incluse nel ramo stabile;
** a partire dalla serie 2.6.x, la differenziazione tra numeri pari e dispari perde di significato, in quanto lo sviluppo di nuove caratteristiche avviene all'interno dello stesso ramo, allo scopo di ottenere uno sviluppo più lineare;
* la 'C' indica la revisione "minore" del kernel: nel vecchio schema di numerazione, questo numero aumentava quando venivano implementati nel kernel aggiornamenti riguardanti la sicurezza, correzioni di alcuni errori, nuove caratteristiche, o nuovi driver; secondo il modello attuale questo numero viene cambiato solo quando nuovi driver o caratteristiche diverse sono introdotte, in quanto le correzioni minori sono conteggiate dal numero contrassegnato con 'D';
* l'uso della 'D'è iniziato quando un grave problema, che richiedeva una correzione immediata, è stato riscontrato nel codice [[Network File System|NFS]] del 2.6.8. Non esisteva l'esigenza di cambiamenti tali da giustificare il rilascio di una revisione minore (che sarebbe diventata la versione 2.6.9), così, il 2.6.8.1 venne rilasciato, con la sola correzione di questo errore. Dal 2.6.11, questo modello venne adottato come nuovo paradigma ufficiale. Correzioni e patch di sicurezza adesso sono conteggiate così, con la quarta cifra, mentre se ci sono cambiamenti più consistenti, si usa la terza cifra. La cifra 'D'è inoltre associata col numero delle volte che il compilatore ha costruito il kernel, ed è denominata "build number".
 
Inoltre, alle volte si possono trovare altre lettere dopo la versione, come 'rc1' o 'mm2'; 'rc' è una versione candidata ad essere adottata come stabile, e indica una release non ufficiale. Altre lettere, invece, sono spesso (ma non sempre) le iniziali di una persona: questo segnala un [[Fork (sviluppo software)|fork]] del kernel da parte di questa persona. Per esempio, la dicitura 'ck' sta per [[Con Kolivas]], 'ac' per [[Alan Cox]], mentre 'mm' indica [[Andrew Morton]]. Certe volte, le lettere sono collegate alla caratteristica principale del kernel. Per esempio, 'wl'indica una versione di test per le reti wireless.
 
==== Versioni storiche ====
La prima versione del kernel è stata la 0.01. Questa venne seguita dalla 0.02, 0.03, 0.10, 0.11, 0.12 (la prima versione rilasciata sotto licenza [[GNU General Public License]]), 0.95, 0.96, 0.97, 0.98, 0.99, e dalla 1.0.<ref>[http://ftp.cdut.edu.cn/pub/linux/kernel/history/lka-001.html Linux Kernel Archives - Volume 1] {{webarchive|url=https://archive.is/20050511062834/http://ftp.cdut.edu.cn/pub/linux/kernel/history/lka-001.html |data=11 maggio 2005 }} (Riley Williams)</ref> Dalla versione 0.95 a queste, sono state rilasciate numerose patch tra le versioni.
 
==== Cronologia della versione stabile ====
Ci sono state due versioni maggiori stabili del kernel Linux 1.''x'': la 1.0 e la 1.2. La versione 1.0 fu pubblicata il 14 marzo 1994<ref name="kern1p0-release">{{Cita web|url=https://www.kernel.org/pub/linux/kernel/v1.0/|titolo=Kernel 1.0 Source Code Release|accesso=27 ottobre 2008|lingua=en}}</ref> Questa versione del kernel Linux era compatibile esclusivamente coi sistemi a singolo processore [[IA-32|i386]]. In seguito ci si iniziò a preoccupare anche della portabilità, e così la versione 1.2 (pubblicata il 7 marzo 1995<ref name="kern1p2-release">{{Cita web|url=https://www.kernel.org/pub/linux/kernel/v1.2/|titolo=Kernel 1.2 Source Code Release|accesso=27 ottobre 2008|lingua=en}}</ref>) incorporò il supporto per i sistemi basati su architetture [[DEC Alpha]], [[SPARC]], e [[Architettura MIPS|MIPS]]. Questa fu l'ultima versione stabile rilasciata nella serie 1.''x'' del kernel Linux.
 
La versione 2.''x'' del kernel Linux ha visto un gran numero di cambiamenti, in particolare nella serie 2.6 e sul come viene sviluppata, mantenuta e rilasciata. Le versioni 2.0, 2.2, e 2.4 furono costruite usando il vecchio sistema di sviluppo dove ognuno dei kernel era basato sulla versione stabile di quello precedente. La versione 2.0 fu pubblicata il 9 giugno 1996<ref name="kern2p0-release">{{Cita web|url=https://www.kernel.org/pub/linux/kernel/v2.0/|titolo=Kernel 2.0.''x'' Source Code Releases|accesso=27 ottobre 2008|lingua=en}}</ref>. Ci furono 41 rilasci in questa serie. La principale caratteristica del kernel 2.0 era il supporto al [[Sistema multiprocessore simmetrico|SMP]] (cioè al supporto a più processori su un singolo sistema) e il supporto per più tipi di processori.
 
La versione 2.2 (pubblicata il 26 gennaio 1999<ref name="kern2p2-release">{{Cita web|url=https://www.kernel.org/pub/linux/kernel/v2.2/|titolo=Kernel 2.2.''x'' Source Code Releases|accesso=27 ottobre 2008|lingua=en}}</ref>) rimosse lo [[spinlock]] globale, fornì un migliore supporto al multiprocessing simmetrico e aggiunse il supporto per le architetture [[Motorola 68k|m68k]] e [[PowerPC]] oltre all'aggiunta di nuovi filesystem (incluso il supporto in sola lettura per il filesystem della [[Microsoft]] [[NTFS]]).<ref name="WWOL22">{{Cita web|url=http://kniggit.net/wwol22.html|titolo=The Wonderful World of Linux 2.2|accesso=27 ottobre 2008|lingua=en|urlmorto=sì|urlarchivio=https://web.archive.org/web/20051118180045/http://kniggit.net/wwol22.html|dataarchivio=18 novembre 2005}}</ref> Lo sviluppo della serie 2.4.''x'' cambiò un po'. In questa serie infatti furono rese disponibili nuove caratteristiche durante tutto lo sviluppo della serie stessa. La versione 2.4.0, pubblicata il 4 gennaio 2001,<ref name="kern2p4-release">{{Cita web|url=https://www.kernel.org/pub/linux/kernel/v2.4/|titolo=Kernel 2.4.''x'' Source Code Releases|accesso=27 ottobre 2008|lingua=en}}</ref> conteneva il supporto per [[Industry Standard Architecture|ISA]] [[Plug and play]], [[USB]], e [[PC Card]].<ref name="WWOL24">{{Cita web|url=http://kniggit.net/wwol24.html|titolo=The Wonderful World of Linux 2.4|accesso=27 ottobre 2008|lingua=en|urlmorto=sì|urlarchivio=https://web.archive.org/web/20051118180109/http://kniggit.net/wwol24.html|dataarchivio=18 novembre 2005}}</ref> Includeva inoltre il supporto per i processori [[PA-RISC]] della [[Hewlett-Packard]]. Durante lo sviluppo della serie 2.4.''x'' furono aggiunte altre caratteristiche includendo: supporto [[Bluetooth]], [[Logical Volume Manager|Logical Volume Manager (LVM)]] versione 1, supporto [[RAID]], [[InterMezzo (File system)|InterMezzo FS]] e [[ext3|ext3 FS]].
 
Con l'arrivo della serie 2.6.''x'' del kernel Linux, il sistema di numerazione cambiò in modo che ci potessero essere 4 cifre nel numero di versione del kernel, dandogli il formato 2.6.''x''.''y'' (dove.''y'' è opzionale). Le nuove caratteristiche vengono ora aggiunte tra una release ''x'' e l'altra, mentre le release ''y'' sono solitamente riservate alla correzioni di bug. La versione 2.6.0 fu pubblicata il 18 dicembre 2003.<ref name="kern2p6-release">{{Cita web|url=https://www.kernel.org/pub/linux/kernel/v2.6/|titolo=Kernel 2.6.''x''.''y'' Source Code Releases|accesso=27 ottobre 2008|lingua=en}}</ref>. Tra i cambiamenti fatti in questa serie ci sono: l'integrazione di [[µClinux]] nei sorgenti del kernel principali, il supporto alla [[Physical Address Extension|PAE]], il supporto a diverse nuove linee di [[CPU]], l'integrazione di [[Advanced Linux Sound Architecture|ALSA]] nei sorgenti principali del kernel, il supporto a un numero di utenti fino a 2<sup>32</sup> (2<sup>16</sup> nelle versioni precedenti), il supporto a un numero di processi fino a 2<sup>30</sup> (2<sup>15</sup> nelle precedenti versioni), una crescita sostanziale del numero di tipi di dispositivo e del numero di dispositivi per ogni tipo, supporto ai processori a 64 bit migliorato, supporto di [[file system]] fino a 16 [[terabyte]]s, in-kernel [[Pre-rilascio|preemption]], supporto alla libreria Native POSIX Thread Library, integrazione nei sorgenti principali del kernel di [[andLinux]] e di [[Security-Enhanced Linux|SELinux]], supporto a [[Infiniband]], e molto altro. Altrettanto importante è l'aggiunta di diversi filesystem durante le varie release della serie 2.6.''x'': [[Filesystem in Userspace|FUSE]], [[Journaled File System|JFS]], [[XFS (file system)|XFS]], [[ext4]] e altri<ref>Altri dettagli sulla storia della serie 2.6 del kernel possono essere trovati sul ChangeLog situato in [https://www.kernel.org/pub/linux/kernel/v2.6/ the 2.6 kernel series source code release area]</ref>.
 
Nel luglio del 2011, per festeggiare il 20º anniversario della nascita di Linux, Torvalds ha deciso di passare ad un sistema di numerazione a 2 cifre, rilasciando la versione 3.0 del kernel. L'ultima release della serie 2.6 è stata la 2.6.39.
 
Il 12 marzo 2015 viene rilasciata la release stabile di Linux 4.0.
 
=== Costo stimato per lo sviluppo ===
Il costo per sviluppare nuovamente la versione 2.6.0 del kernel Linux in un'ottica proprietaria è stato stimato nel 2004 pari a 612 milioni di dollari (467 milioni di euro) usando il modello di stima uomo-mese [[COCOMO]].<ref>{{Cita web
|http://www.dwheeler.com/essays/linux-kernel-cost.html |Linux Kernel 2.6: It's Worth More! |28 giugno 2016 |lingua=en |autore = David A. Wheeler |data=12 ottobre 2004}}</ref>
 
Nel 2006, uno studio finanziato dall'[[Unione europea]] ha stimato che, sviluppare da zero (in un'ottica proprietaria) il kernel 2.6.8 o superiore, costerebbe 882 milioni di euro.<ref>{{Cita web |http://ec.europa.eu/enterprise/sectors/ict/files/2006-11-20-flossimpact_en.pdf |Economic impact of FLOSS on innovation and competitiveness of the EU ICT sector |28 giugno 2016 |lingua=en |formato=pdf |pagine=50-51 |data=20 novembre 2006 |urlarchivio=https://web.archive.org/web/20150706142817/http://ec.europa.eu/enterprise/sectors/ict/files/2006-11-20-flossimpact_en.pdf |dataarchivio=6 luglio 2015 |urlmorto=sì}}</ref>
 
== Aspetti legali ==
=== Marchio registrato ===
Linux è un [[marchio registrato]] di [[Linus Torvalds]] negli [[Stati Uniti]] e in altri Paesi. Questo è il risultato di un incidente in cui William Della Croce Jr., che non partecipava allo sviluppo del progetto Linux, registrò il nome e successivamente richiese una Royalty per il suo uso. Diversi sostenitori di Linux chiesero consiglio legale e intentarono causa contro Della Croce, che acconsentì nel 1998 ad assegnare il marchio a Torvalds.
 
=== Termini di licenza ===
Inizialmente, Torvalds rilasciò Linux con una licenza che ne proibiva lo sfruttamento commerciale. Essa però lasciò presto il posto alla [[GNU General Public License]] (GPL) dalla versione 0.12. Questa licenza permette la distribuzione e la vendita di versioni modificate o non modificate di Linux a condizione che vengano rilasciate con la stessa licenza e che si fornisca anche il corrispondente codice sorgente.
 
Torvalds ha descritto l'adozione della licenza GPL come "la miglior cosa che abbia mai fatto."<ref>{{Cita web|url=http://hotwired.goo.ne.jp/matrix/9709/5_linus.html|titolo=The Pragmatist of Free Software|nome=Hiroo|cognome=Yamagata|anno=1997|accesso=21 febbraio 2007|editore=HotWired|urlmorto=sì|urlarchivio=https://web.archive.org/web/20070210224351/http://hotwired.goo.ne.jp/matrix/9709/5_linus.html|dataarchivio=10 febbraio 2007}}</ref>
 
==== GPL versione 3 ====
{{Vedi anche|GNU General Public License#La Versione 3}}
 
Attualmente, Linux adotta la versione 2 della licenza [[GNU General Public License|GPL]], senza nessuna opzione (a differenza di molti programmi rilasciati con licenza GPL) che permette l'uso di una versione più avanzata, e ci sono alcune controversie sulla facilità con cui si potrebbero usare versioni successive come la 3 (e su quanto sia desiderabile).<ref>{{Cita web|url=https://lwn.net/Articles/169797/|titolo=GPLv3 and the kernel|editore=[[LWN.net]]|data=31 gennaio 2006|accesso=21 febbraio 2007|cognome=Corbet|nome=Jonathan}}</ref> Torvalds stesso ha specificato durante il rilascio della versione 2.4.0 che il suo codice adotta soltanto la versione 2 della licenza.<ref>{{Cita web|url=http://www.uwsg.iu.edu/hypermail/linux/kernel/0009.1/0096.html|capitolo=Linux-2.4.0-test8|titolo=Linux-kernel mailing list archive|editore=Unix Systems Support Group of [[Università dell'Indiana|Indiana University]]|cognome=Torvalds|nome=Linus|accesso=21 febbraio 2007|data=8 settembre 2000|urlmorto=sì|urlarchivio=https://web.archive.org/web/20060827011644/http://www.uwsg.iu.edu/hypermail/linux/kernel/0009.1/0096.html|dataarchivio=27 agosto 2006}}</ref> Tuttavia, i termini della licenza GPL affermano che, se non viene specificata nessuna versione, allora ne può essere usata una qualsiasi, e [[Alan Cox]] fece notare che solo pochi di coloro che contribuiscono a Linux hanno specificato una particolare versione della licenza GPL.<ref>{{Cita web|url=https://lwn.net/Articles/169831/|articolo=Re: GPL V3 and Linux|nome=Alan|cognome=Cox|titolo=Linux-kernel mailing list archive|editore=LWN.net|accesso=21 febbraio 2007|data=20 gennaio 2006}}</ref> Un blogger ha concluso che circa il 40% del codice di Linux è specificatamente rilasciato con licenza "GPL2 o superiore", e un altro 10% circa con licenza "GPL" (con versione non specificata), il che, messo assieme, costituisce circa la metà del kernel. Nel settembre 2006, un'indagine su 29 sviluppatori-chiave del kernel ha indicato che 28 di questi preferivano GPLv2 alla GPLv3 allora in stato di bozza. Torvalds ha commentato, «Penso che un nutrito numero di persone esterne credevano che fossi io l'unico strano, per il fatto che ho dichiarato pubblicamente di non essere un grande fan della GPLv3».<ref>{{Cita web|url=http://news.com.com/Top+Linux+programmers+pan+GPL+3/2100-7344_3-6119372.html|titolo=Top Linux programmers pan GPL 3|editore=[[News.com]]|accesso=21 febbraio 2007|data=25 settembre 2006|nome=Stephen|cognome=Shankland
}}</ref>
 
=== Moduli kernel caricabili e firmware ===
Non è chiaro se i [[moduli kernel caricabili]] (LKM) debbano essere considerati [[opera derivata]] per la legge sul [[copyright]], e quindi ricadano entro i termini della licenza GPL. Torvalds ha affermato che i LKM, usando soltanto un sottoinsieme limitato di interfacce "pubbliche" del kernel, possono a volte non essere considerati opere derivate, ed è quindi possibile avere alcuni driver esclusivamente binari e altri LKM che non adottano la licenza GPL. Non tutti coloro che contribuiscono allo sviluppo di Linux però sono d'accordo con questa interpretazione, e anche lo stesso Torvalds ammette che molti LKM sono chiaramente opere derivate, ed infatti ha scritto che "I moduli kernel SONO opere derivate 'per default'".
 
D'altra parte Torvalds ha anche detto che "Un'area grigia è qualcosa come un driver originariamente scritto per un altro sistema operativo (cioè chiaramente non un'opera derivata da Linux in origine). [...] QUELLA è un'area grigia, e _quella_ è l'area dove personalmente penso che alcuni moduli potrebbero non essere considerati opere derivate semplicemente perché non sono stati progettati per Linux e non dipendono da nessun comportamento speciale di Linux."<ref>[http://www.ussg.iu.edu/hypermail/linux/kernel/0312.0/0670.html Re: Linux GPL and binary module exception clause?] {{webarchive|url=https://web.archive.org/web/20060927081641/http://www.ussg.iu.edu/hypermail/linux/kernel/0312.0/0670.html |data=27 settembre 2006 }}</ref> I driver grafici proprietari in particolare, sono al centro di un dibattito. In definitiva, è probabile che queste questioni possano essere risolte soltanto da un tribunale.
 
Un punto di controversia sulla licenza è l'uso in Linux di [[firmware]] "binario" per supportare alcuni dispositivi hardware. [[Richard Stallman]] afferma che questi software fanno di Linux un software parzialmente non aperto, e che distribuire Linux potrebbe anche violare la licenza GPL (che richiede la presenza di tutto il codice sorgente).<ref>{{Cita web|url=https://www.gnu.org/philosophy/linux-gnu-freedom.html|titolo=Linux, GNU, and freedom|editore=[[Free Software Foundation]]|nome=Richard|cognome=Stallman|data=11 ottobre 2006|accesso=21 febbraio 2007}}</ref>
 
In risposta a ciò, la [[Free Software Foundation Latin America]] (FSFLA) ha avviato un progetto, denominato ''[[Linux-libre]]'', per creare un kernel completamente libero, senza moduli proprietari, per poter essere usato in distribuzioni completamente libere, come [[Trisquel GNU/Linux]]<ref>{{cita web | url=https://linux-libre.fsfla.org/ | titolo=Progetto ''Linux-libre'' | editore=https://www.fsfla.org/ | accesso=6 aprile 2010 | lingua=en}}</ref><ref>{{cita web | url=https://trisquel.info/en/forum/trisquel-gnulinux-libre | titolo=Trisquel GNU/Linux-libre | editore=trisquel.info | accesso=6 aprile 2010 | lingua=en}}</ref>.
 
=== Contenzioso SCO ===
{{vedi anche|Causa legale tra SCO e IBM}}
A marzo del 2003, il [[SCO Group|gruppo SCO]] intentò causa contro [[IBM]] accusandola di aver violato il [[copyright]] sul [[codice sorgente]] [[Unix]], inserendo porzioni di quel codice in Linux. Inoltre, SCO mandò lettere a diverse compagnie avvisandole che l'uso di Linux senza una licenza di SCO poteva essere una violazione della legge sul copyright, e dichiarò alla stampa che avrebbero intentato causa agli utenti Linux individuali. IBM allora promise di difendere i suoi clienti Linux. Questo contenzioso generò una serie di cause intentate da SCO nei confronti di [[Novell]], [[Daimler (azienda)|Daimler]] (parzialmente ritirata nel luglio 2004), [[AutoZone]], e cause di ritorsione intentate da [[Red Hat]] e altri contro SCO.
 
All'inizio del 2007 SCO fornì i dettagli specifici della presunta violazione di copyright. Diversamente dalle precedenti affermazioni che vedevano SCO proprietaria di 1 milione di righe di codice, specificarono soltanto 326 linee di codice, la maggior parte del quale non era coperto da copyright.<ref>{{Cita web | url=http://www.groklaw.net/articlebasic.php?story=20070308014847709 | titolo=Report from the Courthouse 7 March}} Groklaw article</ref> Ad agosto 2007, la corte nel [[SCO v. Novell|caso Novell]] stabilì, per cominciare, che SCO non possedeva neanche i diritti di copyright su Unix.<ref>{{Cita web | url=http://www.groklaw.net/article.php?story=20070810165237718 | titolo=Court Rules: Novell owns the UNIX and UnixWare copyrights}} Groklaw article</ref>
 
== Note ==
<references/>
 
== Bibliografia ==
* Daniel Bovet, Marco Cesati, ''Understanding the Linux Kernel'', O'Reilly, 2005, terza edizione
* Tigran Aivazian, ''Linux Kernel 2.4 Internals'', 2002, https://web.archive.org/web/20081216014256/http://www.moses.uklinux.net/patches/lki.html
* ''LinuxChanges'', https://kernelnewbies.org/LinuxChanges, lista delle modifiche apportate a ciascuna versione del kernel
* Linus Torvalds e David Diamond, ''Rivoluzionario per caso. Come ho creato Linux (solo per divertirmi)'', Garzanti, 2001. ISBN 88-11-73896-2.
 
== Voci correlate ==
* [[Alan Cox]]
* [[Dynamic Kernel Module Support]]
* [[GNU]]
* [[GNU/Linux]]
* [[Unix]]
* [[Linux-libre]]
* [[Linus Torvalds]]
* [[Linux console]]
* [[Linux Standard Base]]
* [[Linux Security Modules]]
* [[Security-Enhanced Linux]]
* [[System.map]]
* [[Kernel panic]]
* [[Linux kernel oops]]
* [[Kernel-based Virtual Machine]]
* [[Patch (informatica)|Patch]]
* [[Marcelo Tosatti]]
* [[:Categoria:Sistemi operativi utilizzanti il kernel Linux]]
 
== Altri progetti ==
{{interprogetto}}
{{Interprogetto|preposizione=sul|n=Category:Linux}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|https://www.gnu.org/gnu/linux-and-gnu.it.html|Linux e GNU}}
 
{{Controllo di autorità}}
{{Distribuzioni Linux}}
{{Portale|informatica|Software liberofrancia}}
 
[[Categoria:KernelAffluenti Linux|del Varo]]
[[Categoria:Fiumi della Provenza-Alpi-Costa Azzurra]]