162306a36Sopenharmony_ci.. include:: ../disclaimer-ita.rst
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci:Original: :ref:`Documentation/process/2.Process.rst <development_process>`
462306a36Sopenharmony_ci:Translator: Alessia Mantegazza <amantegazza@vaga.pv.it>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci.. _it_development_process:
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciCome funziona il processo di sviluppo
962306a36Sopenharmony_ci=====================================
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciLo sviluppo del Kernel agli inizi degli anno '90 era abbastanza libero, con
1262306a36Sopenharmony_ciun numero di utenti e sviluppatori relativamente basso.  Con una base
1362306a36Sopenharmony_cidi milioni di utenti e con 2000 sviluppatori coinvolti nel giro di un anno,
1462306a36Sopenharmony_ciil kernel da allora ha messo in atto un certo numero di procedure per rendere
1562306a36Sopenharmony_cilo sviluppo più agevole.  È richiesta una solida conoscenza di come tale
1662306a36Sopenharmony_ciprocesso si svolge per poter esserne parte attiva.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciIl quadro d'insieme
1962306a36Sopenharmony_ci-------------------
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciGli sviluppatori kernel utilizzano un calendario di rilascio generico, dove
2262306a36Sopenharmony_ciogni due o tre mesi viene effettuata un rilascio importante del kernel.
2362306a36Sopenharmony_ciI rilasci più recenti sono stati:
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	======  =================
2662306a36Sopenharmony_ci	5.0     3 marzo, 2019
2762306a36Sopenharmony_ci	5.1     5 maggio, 2019
2862306a36Sopenharmony_ci	5.2     7 luglio, 2019
2962306a36Sopenharmony_ci	5.3     15 settembre, 2019
3062306a36Sopenharmony_ci	5.4     24 novembre, 2019
3162306a36Sopenharmony_ci	5.5     6 gennaio, 2020
3262306a36Sopenharmony_ci	======  =================
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciCiascun rilascio 5.x è un importante rilascio del kernel con nuove
3562306a36Sopenharmony_cifunzionalità, modifiche interne dell'API, e molto altro.  Un tipico
3662306a36Sopenharmony_cirilascio contiene quasi 13,000 gruppi di modifiche con ulteriori
3762306a36Sopenharmony_cimodifiche a parecchie migliaia di linee di codice.  La 5.x. è pertanto la
3862306a36Sopenharmony_cilinea di confine nello sviluppo del kernel Linux; il kernel utilizza un sistema
3962306a36Sopenharmony_cidi sviluppo continuo che integra costantemente nuove importanti modifiche.
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciViene seguita una disciplina abbastanza lineare per l'inclusione delle
4262306a36Sopenharmony_cipatch di ogni rilascio. All'inizio di ogni ciclo di sviluppo, la
4362306a36Sopenharmony_ci"finestra di inclusione" viene dichiarata aperta.  In quel momento il codice
4462306a36Sopenharmony_ciritenuto sufficientemente stabile(e che è accettato dalla comunità di sviluppo)
4562306a36Sopenharmony_civiene incluso nel ramo principale del kernel.  La maggior parte delle
4662306a36Sopenharmony_cipatch per un nuovo ciclo di sviluppo (e tutte le più importanti modifiche)
4762306a36Sopenharmony_cisaranno inserite durante questo periodo, ad un ritmo che si attesta sulle
4862306a36Sopenharmony_ci1000 modifiche ("patch" o "gruppo di modifiche") al giorno.
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci(per inciso, vale la pena notare che i cambiamenti integrati durante la
5162306a36Sopenharmony_ci"finestra di inclusione" non escono dal nulla; questi infatti, sono stati
5262306a36Sopenharmony_ciraccolti e, verificati in anticipo.  Il funzionamento di tale procedimento
5362306a36Sopenharmony_civerrà descritto dettagliatamente più avanti).
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciLa finestra di inclusione resta attiva approssimativamente per due settimane.
5662306a36Sopenharmony_ciAl termine di questo periodo, Linus Torvald dichiarerà che la finestra è
5762306a36Sopenharmony_cichiusa e rilascerà il primo degli "rc" del kernel.
5862306a36Sopenharmony_ciPer il kernel che è destinato ad essere 5.6, per esempio, il rilascio
5962306a36Sopenharmony_ciche emerge al termine della finestra d'inclusione si chiamerà 5.6-rc1.
6062306a36Sopenharmony_ciQuesto rilascio indica che il momento di aggiungere nuovi componenti è
6162306a36Sopenharmony_cipassato, e che è iniziato il periodo di stabilizzazione del prossimo kernel.
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciNelle successive sei/dieci settimane, potranno essere sottoposte solo modifiche
6462306a36Sopenharmony_ciche vanno a risolvere delle problematiche.  Occasionalmente potrà essere
6562306a36Sopenharmony_ciconsentita una modifica più consistente, ma tali occasioni sono rare.
6662306a36Sopenharmony_ciGli sviluppatori che tenteranno di aggiungere nuovi elementi al di fuori della
6762306a36Sopenharmony_cifinestra di inclusione, tendenzialmente, riceveranno un accoglienza poco
6862306a36Sopenharmony_ciamichevole. Come regola generale: se vi perdete la finestra di inclusione per
6962306a36Sopenharmony_ciun dato componente, la cosa migliore da fare è aspettare il ciclo di sviluppo
7062306a36Sopenharmony_cisuccessivo (un'eccezione può essere fatta per i driver per hardware non
7162306a36Sopenharmony_cisupportati in precedenza; se toccano codice non facente parte di quello
7262306a36Sopenharmony_ciattuale, che non causino regressioni e che potrebbero essere aggiunti in
7362306a36Sopenharmony_cisicurezza in un qualsiasi momento)
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciMentre le correzioni si aprono la loro strada all'interno del ramo principale,
7662306a36Sopenharmony_ciil ritmo delle modifiche rallenta col tempo.  Linus rilascia un nuovo
7762306a36Sopenharmony_cikernel -rc circa una volta alla settimana; e ne usciranno circa 6 o 9 prima
7862306a36Sopenharmony_ciche il kernel venga considerato sufficientemente stabile e che il rilascio
7962306a36Sopenharmony_cifinale venga fatto.  A quel punto tutto il processo ricomincerà.
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ciEsempio: ecco com'è andato il ciclo di sviluppo della versione 5.4
8262306a36Sopenharmony_ci(tutte le date si collocano nel 2018)
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	==============  =======================================
8662306a36Sopenharmony_ci	15 settembre	5.3 rilascio stabile
8762306a36Sopenharmony_ci	30 settembre	5.4-rc1, finestra di inclusione chiusa
8862306a36Sopenharmony_ci	6 ottobre	5.4-rc2
8962306a36Sopenharmony_ci	13 ottobre	5.4-rc3
9062306a36Sopenharmony_ci	20 ottobre	5.4-rc4
9162306a36Sopenharmony_ci	27 ottobre	5.4-rc5
9262306a36Sopenharmony_ci	3 novembre	5.4-rc6
9362306a36Sopenharmony_ci	10 novembre	5.4-rc7
9462306a36Sopenharmony_ci	17 novembre	5.4-rc8
9562306a36Sopenharmony_ci	24 novembre	5.4 rilascio stabile
9662306a36Sopenharmony_ci	==============  =======================================
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciIn che modo gli sviluppatori decidono quando chiudere il ciclo di sviluppo e
9962306a36Sopenharmony_cicreare quindi una rilascio stabile? Un metro valido è il numero di regressioni
10062306a36Sopenharmony_cirilevate nel precedente rilascio.  Nessun baco è il benvenuto, ma quelli che
10162306a36Sopenharmony_ciprocurano problemi su sistemi che hanno funzionato in passato sono considerati
10262306a36Sopenharmony_ciparticolarmente seri.  Per questa ragione, le modifiche che portano ad una
10362306a36Sopenharmony_ciregressione sono viste sfavorevolmente e verranno quasi sicuramente annullate
10462306a36Sopenharmony_cidurante il periodo di stabilizzazione.
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciL'obiettivo degli sviluppatori è quello di aggiustare tutte le regressioni
10762306a36Sopenharmony_ciconosciute prima che avvenga il rilascio stabile.  Nel mondo reale, questo
10862306a36Sopenharmony_citipo di perfezione difficilmente viene raggiunta; esistono troppe variabili
10962306a36Sopenharmony_ciin un progetto di questa portata.  Arriva un punto dove ritardare il rilascio
11062306a36Sopenharmony_cifinale peggiora la situazione; la quantità di modifiche in attesa della
11162306a36Sopenharmony_ciprossima finestra di inclusione crescerà enormemente, creando ancor più
11262306a36Sopenharmony_ciregressioni al giro successivo.  Quindi molti kernel 5.x escono con una
11362306a36Sopenharmony_cimanciata di regressioni delle quali, si spera, nessuna è grave.
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ciUna volta che un rilascio stabile è fatto, il suo costante mantenimento è
11662306a36Sopenharmony_ciaffidato al "squadra stabilità", attualmente composta da Greg Kroah-Hartman.
11762306a36Sopenharmony_ciQuesta squadra rilascia occasionalmente degli aggiornamenti relativi al
11862306a36Sopenharmony_cirilascio stabile usando la numerazione 5.x.y.  Per essere presa in
11962306a36Sopenharmony_ciconsiderazione per un rilascio d'aggiornamento, una modifica deve:
12062306a36Sopenharmony_ci(1) correggere un baco importante (2) essere già inserita nel ramo principale
12162306a36Sopenharmony_ciper il prossimo sviluppo del kernel.  Solitamente, passato il loro rilascio
12262306a36Sopenharmony_ciiniziale, i kernel ricevono aggiornamenti per più di un ciclo di sviluppo.
12362306a36Sopenharmony_ciQuindi, per esempio, la storia del kernel 5.2 appare così (anno 2019):
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci	==============  ===============================
12662306a36Sopenharmony_ci	 7 luglio	5.2 rilascio stabile
12762306a36Sopenharmony_ci	14 luglio	5.2.1
12862306a36Sopenharmony_ci	21 luglio	5.2.2
12962306a36Sopenharmony_ci	26 luglio	5.2.3
13062306a36Sopenharmony_ci	28 luglio	5.2.4
13162306a36Sopenharmony_ci	31 luglio	5.2.5
13262306a36Sopenharmony_ci	...		...
13362306a36Sopenharmony_ci	11 ottobre	5.2.21
13462306a36Sopenharmony_ci	==============  ===============================
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ciLa 5.2.21 fu l'aggiornamento finale per la versione 5.2.
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ciAlcuni kernel sono destinati ad essere kernel a "lungo termine"; questi
13962306a36Sopenharmony_ciriceveranno assistenza per un lungo periodo di tempo. Consultate il seguente
14062306a36Sopenharmony_cicollegamento per avere la lista delle versioni attualmente supportate e i
14162306a36Sopenharmony_cirelativi manutentori:
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci       https://www.kernel.org/category/releases.html
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ciQuesta selezione di kernel di lungo periodo sono puramente dovuti ai loro
14662306a36Sopenharmony_cimanutentori, alla loro necessità e al tempo per tenere aggiornate proprio
14762306a36Sopenharmony_ciquelle versioni.  Non ci sono altri kernel a lungo termine in programma per
14862306a36Sopenharmony_cialcun rilascio in arrivo.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ciIl ciclo di vita di una patch
15162306a36Sopenharmony_ci-----------------------------
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ciLe patch non passano direttamente dalla tastiera dello sviluppatori
15462306a36Sopenharmony_cial ramo principale del kernel. Esiste, invece, una procedura disegnata
15562306a36Sopenharmony_ciper assicurare che ogni patch sia di buona qualità e desiderata nel
15662306a36Sopenharmony_ciramo principale.  Questo processo avviene velocemente per le correzioni
15762306a36Sopenharmony_cimeno importanti, o, nel caso di patch ampie e controverse, va avanti per anni.
15862306a36Sopenharmony_ciPer uno sviluppatore la maggior frustrazione viene dalla mancanza di
15962306a36Sopenharmony_cicomprensione di questo processo o dai tentativi di aggirarlo.
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ciNella speranza di ridurre questa frustrazione, questo documento spiegherà
16262306a36Sopenharmony_cicome una patch viene inserita nel kernel.  Ciò che segue è un'introduzione
16362306a36Sopenharmony_ciche descrive il processo ideale.  Approfondimenti verranno invece trattati
16462306a36Sopenharmony_cipiù avanti.
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ciUna patch attraversa, generalmente, le seguenti fasi:
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci - Progetto. In questa fase sono stabilite quelli che sono i requisiti
16962306a36Sopenharmony_ci   della modifica - e come verranno soddisfatti.  Il lavoro di progettazione
17062306a36Sopenharmony_ci   viene spesso svolto senza coinvolgere la comunità, ma è meglio renderlo
17162306a36Sopenharmony_ci   il più aperto possibile; questo può far risparmiare molto tempo evitando
17262306a36Sopenharmony_ci   eventuali riprogettazioni successive.
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci - Prima revisione. Le patch vengono pubblicate sulle liste di discussione
17562306a36Sopenharmony_ci   interessate, e gli sviluppatori in quella lista risponderanno coi loro
17662306a36Sopenharmony_ci   commenti.  Se si svolge correttamente, questo procedimento potrebbe far
17762306a36Sopenharmony_ci   emergere problemi rilevanti in una patch.
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci - Revisione più ampia. Quando la patch è quasi pronta per essere inserita
18062306a36Sopenharmony_ci   nel ramo principale, un manutentore importante del sottosistema dovrebbe
18162306a36Sopenharmony_ci   accettarla - anche se, questa accettazione non è una garanzia che la
18262306a36Sopenharmony_ci   patch arriverà nel ramo principale. La patch sarà visibile nei sorgenti
18362306a36Sopenharmony_ci   del sottosistema in questione e nei sorgenti -next (descritti sotto).
18462306a36Sopenharmony_ci   Quando il processo va a buon fine, questo passo porta ad una revisione
18562306a36Sopenharmony_ci   più estesa della patch e alla scoperta di problemi d'integrazione
18662306a36Sopenharmony_ci   con il lavoro altrui.
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci-  Per favore, tenete da conto che la maggior parte dei manutentori ha
18962306a36Sopenharmony_ci   anche un lavoro quotidiano, quindi integrare le vostre patch potrebbe
19062306a36Sopenharmony_ci   non essere la loro priorità più alta.  Se una vostra patch riceve
19162306a36Sopenharmony_ci   dei suggerimenti su dei cambiamenti necessari, dovreste applicare
19262306a36Sopenharmony_ci   quei cambiamenti o giustificare perché non sono necessari.  Se la vostra
19362306a36Sopenharmony_ci   patch non riceve alcuna critica ma non è stata integrata dal
19462306a36Sopenharmony_ci   manutentore del driver o sottosistema, allora dovreste continuare con
19562306a36Sopenharmony_ci   i necessari aggiornamenti per mantenere la patch aggiornata al kernel
19662306a36Sopenharmony_ci   più recente cosicché questa possa integrarsi senza problemi; continuate
19762306a36Sopenharmony_ci   ad inviare gli aggiornamenti per essere revisionati e integrati.
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci - Inclusione nel ramo principale. Eventualmente, una buona patch verrà
20062306a36Sopenharmony_ci   inserita all'interno nel repositorio principale, gestito da
20162306a36Sopenharmony_ci   Linus Torvalds.  In questa fase potrebbero emergere nuovi problemi e/o
20262306a36Sopenharmony_ci   commenti; è importante che lo sviluppatore sia collaborativo e che sistemi
20362306a36Sopenharmony_ci   ogni questione che possa emergere.
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci - Rilascio stabile. Ora, il numero di utilizzatori che sono potenzialmente
20662306a36Sopenharmony_ci   toccati dalla patch è aumentato, quindi, ancora una volta, potrebbero
20762306a36Sopenharmony_ci   emergere nuovi problemi.
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci - Manutenzione di lungo periodo. Nonostante sia possibile che uno sviluppatore
21062306a36Sopenharmony_ci   si dimentichi del codice dopo la sua integrazione, questo comportamento
21162306a36Sopenharmony_ci   lascia una brutta impressione nella comunità di sviluppo.  Integrare il
21262306a36Sopenharmony_ci   codice elimina alcuni degli oneri facenti parte della manutenzione, in
21362306a36Sopenharmony_ci   particolare, sistemerà le problematiche causate dalle modifiche all'API.
21462306a36Sopenharmony_ci   Ma lo sviluppatore originario dovrebbe continuare ad assumersi la
21562306a36Sopenharmony_ci   responsabilità per il codice se quest'ultimo continua ad essere utile
21662306a36Sopenharmony_ci   nel lungo periodo.
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ciUno dei più grandi errori fatti dagli sviluppatori kernel (o dai loro datori
21962306a36Sopenharmony_cidi lavoro) è quello di cercare di ridurre tutta la procedura ad una singola
22062306a36Sopenharmony_ci"integrazione nel remo principale".  Questo approccio inevitabilmente conduce
22162306a36Sopenharmony_cia una condizione di frustrazione per tutti coloro che sono coinvolti.
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ciCome le modifiche finiscono nel Kernel
22462306a36Sopenharmony_ci--------------------------------------
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ciEsiste una sola persona che può inserire le patch nel repositorio principale
22762306a36Sopenharmony_cidel kernel: Linus Torvalds.  Ma, per esempio, di tutte le 9500 patch
22862306a36Sopenharmony_ciche entrarono nella versione 2.6.38 del kernel, solo 112 (circa
22962306a36Sopenharmony_cil'1,3%) furono scelte direttamente da Linus in persona.  Il progetto
23062306a36Sopenharmony_cidel kernel è cresciuto fino a raggiungere una dimensione tale per cui
23162306a36Sopenharmony_ciun singolo sviluppatore non può controllare e selezionare
23262306a36Sopenharmony_ciindipendentemente ogni modifica senza essere supportato.  La via
23362306a36Sopenharmony_ciscelta dagli sviluppatori per indirizzare tale crescita è stata quella
23462306a36Sopenharmony_cidi utilizzare un sistema di "sottotenenti" basato sulla fiducia.
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ciIl codice base del kernel è spezzato in una serie si sottosistemi: rete,
23762306a36Sopenharmony_cisupporto per specifiche architetture, gestione della memoria, video e
23862306a36Sopenharmony_cistrumenti, etc.  Molti sottosistemi hanno un manutentore designato: ovvero uno
23962306a36Sopenharmony_cisviluppatore che ha piena responsabilità di tutto il codice presente in quel
24062306a36Sopenharmony_cisottosistema.  Tali manutentori di sottosistema sono i guardiani
24162306a36Sopenharmony_ci(in un certo senso) della parte di kernel che gestiscono; sono coloro che
24262306a36Sopenharmony_ci(solitamente) accetteranno una patch per l'inclusione nel ramo principale
24362306a36Sopenharmony_cidel kernel.
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ciI manutentori di sottosistema gestiscono ciascuno la propria parte dei sorgenti
24662306a36Sopenharmony_cidel kernel, utilizzando abitualmente (ma certamente non sempre) git.
24762306a36Sopenharmony_ciStrumenti come git (e affini come quilt o mercurial) permettono ai manutentori
24862306a36Sopenharmony_cidi stilare una lista delle patch, includendo informazioni sull'autore ed
24962306a36Sopenharmony_cialtri metadati.  In ogni momento, il manutentore può individuare quale patch
25062306a36Sopenharmony_cinel sua repositorio non si trova nel ramo principale.
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ciQuando la "finestra di integrazione" si apre, i manutentori di alto livello
25362306a36Sopenharmony_cichiederanno a Linus di "prendere" dai loro repositori le modifiche che hanno
25462306a36Sopenharmony_ciselezionato per l'inclusione.  Se Linus acconsente, il flusso di patch si
25562306a36Sopenharmony_ciconvoglierà nel repositorio di quest ultimo, divenendo così parte del ramo
25662306a36Sopenharmony_ciprincipale del kernel.  La quantità d'attenzione che Linus presta alle
25762306a36Sopenharmony_cisingole patch ricevute durante l'operazione di integrazione varia.
25862306a36Sopenharmony_ciÈ chiaro che, qualche volta, guardi più attentamente.  Ma, come regola
25962306a36Sopenharmony_cigenerale, Linus confida nel fatto che i manutentori di sottosistema non
26062306a36Sopenharmony_ciselezionino pessime patch.
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ciI manutentori di sottosistemi, a turno, possono "prendere" patch
26362306a36Sopenharmony_ciprovenienti da altri manutentori.  Per esempio, i sorgenti per la rete rete
26462306a36Sopenharmony_cisono costruiti da modifiche che si sono accumulate inizialmente nei sorgenti
26562306a36Sopenharmony_cidedicati ai driver per dispositivi di rete, rete senza fili, ecc.  Tale
26662306a36Sopenharmony_cicatena di repositori può essere più o meno lunga, benché raramente ecceda
26762306a36Sopenharmony_cii due o tre collegamenti.  Questo processo è conosciuto come
26862306a36Sopenharmony_ci"la catena della fiducia", perché ogni manutentore all'interno della
26962306a36Sopenharmony_cicatena si fida di coloro che gestiscono i livelli più bassi.
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ciChiaramente, in un sistema come questo, l'inserimento delle patch all'interno
27262306a36Sopenharmony_cidel kernel si basa sul trovare il manutentore giusto.  Di norma, inviare
27362306a36Sopenharmony_cipatch direttamente a Linus non è la via giusta.
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ciSorgenti -next
27762306a36Sopenharmony_ci--------------
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ciLa catena di sottosistemi guida il flusso di patch all'interno del kernel,
28062306a36Sopenharmony_cima solleva anche un interessante quesito: se qualcuno volesse vedere tutte le
28162306a36Sopenharmony_cipatch pronte per la prossima finestra di integrazione?
28262306a36Sopenharmony_ciGli sviluppatori si interesseranno alle patch in sospeso per verificare
28362306a36Sopenharmony_ciche non ci siano altri conflitti di cui preoccuparsi; una modifica che, per
28462306a36Sopenharmony_ciesempio, cambia il prototipo di una funzione fondamentale del kernel andrà in
28562306a36Sopenharmony_ciconflitto con qualsiasi altra modifica che utilizzi la vecchia versione di
28662306a36Sopenharmony_ciquella funzione.  Revisori e tester vogliono invece avere accesso alle
28762306a36Sopenharmony_cimodifiche nella loro totalità prima che approdino nel ramo principale del
28862306a36Sopenharmony_cikernel.  Uno potrebbe prendere le patch provenienti da tutti i sottosistemi
28962306a36Sopenharmony_cid'interesse, ma questo sarebbe un lavoro enorme e fallace.
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ciLa risposta ci viene sotto forma di sorgenti -next, dove i sottosistemi sono
29262306a36Sopenharmony_ciraccolti per essere testati e controllati.  Il più vecchio di questi sorgenti,
29362306a36Sopenharmony_cigestito da Andrew Morton, è chiamato "-mm" (memory management, che è l'inizio
29462306a36Sopenharmony_cidi tutto).  L'-mm integra patch proveniente da una lunga lista di sottosistemi;
29562306a36Sopenharmony_cie ha, inoltre, alcune patch destinate al supporto del debugging.
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ciOltre a questo, -mm contiene una raccolta significativa di patch che sono
29862306a36Sopenharmony_cistate selezionate da Andrew direttamente.  Queste patch potrebbero essere
29962306a36Sopenharmony_cistate inviate in una lista di discussione, o possono essere applicate ad una
30062306a36Sopenharmony_ciparte del kernel per la quale non esiste un sottosistema dedicato.
30162306a36Sopenharmony_ciDi conseguenza, -mm opera come una specie di sottosistema "ultima spiaggia";
30262306a36Sopenharmony_cise per una patch non esiste una via chiara per entrare nel ramo principale,
30362306a36Sopenharmony_ciallora è probabile che finirà in -mm.  Le patch passate per -mm
30462306a36Sopenharmony_cieventualmente finiranno nel sottosistema più appropriato o saranno inviate
30562306a36Sopenharmony_cidirettamente a Linus.  In un tipico ciclo di sviluppo, circa il 5-10% delle
30662306a36Sopenharmony_cipatch andrà nel ramo principale attraverso -mm.
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ciLa patch -mm correnti sono disponibili nella cartella "mmotm" (-mm of
30962306a36Sopenharmony_cithe moment) all'indirizzo:
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci      http://www.ozlabs.org/~akpm/mmotm/
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ciÈ molto probabile che l'uso dei sorgenti MMOTM diventi un'esperienza
31462306a36Sopenharmony_cifrustrante; ci sono buone probabilità che non compili nemmeno.
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ciI sorgenti principali per il prossimo ciclo d'integrazione delle patch
31762306a36Sopenharmony_ciè linux-next, gestito da Stephen Rothwell.  I sorgenti linux-next sono, per
31862306a36Sopenharmony_cidefinizione, un'istantanea di come dovrà apparire il ramo principale dopo che
31962306a36Sopenharmony_cila prossima finestra di inclusione si chiuderà.  I linux-next sono annunciati
32062306a36Sopenharmony_cisulla lista di discussione linux-kernel e linux-next nel momento in cui
32162306a36Sopenharmony_civengono assemblati; e possono essere scaricate da:
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ci	http://www.kernel.org/pub/linux/kernel/next/
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_ciLinux-next è divenuto parte integrante del processo di sviluppo del kernel;
32662306a36Sopenharmony_citutte le patch incorporate durante una finestra di integrazione dovrebbero
32762306a36Sopenharmony_ciaver trovato la propria strada in linux-next, a volte anche prima dell'apertura
32862306a36Sopenharmony_cidella finestra di integrazione.
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ciSorgenti in preparazione
33262306a36Sopenharmony_ci------------------------
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ciNei sorgenti del kernel esiste la cartella drivers/staging/, dove risiedono
33562306a36Sopenharmony_cimolte sotto-cartelle per i driver o i filesystem che stanno per essere aggiunti
33662306a36Sopenharmony_cial kernel.  Questi restano nella cartella drivers/staging fintanto che avranno
33762306a36Sopenharmony_cibisogno di maggior lavoro; una volta completato, possono essere spostate
33862306a36Sopenharmony_ciall'interno del kernel nel posto più appropriato.  Questo è il modo di tener
33962306a36Sopenharmony_citraccia dei driver che non sono ancora in linea con gli standard di codifica
34062306a36Sopenharmony_cio qualità, ma che le persone potrebbero voler usare ugualmente e tracciarne
34162306a36Sopenharmony_cilo sviluppo.
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ciGreg Kroah-Hartman attualmente gestisce i sorgenti in preparazione. I driver
34462306a36Sopenharmony_ciche non sono completamente pronti vengono inviati a lui, e ciascun driver avrà
34562306a36Sopenharmony_cila propria sotto-cartella in drivers/staging/.  Assieme ai file sorgenti
34662306a36Sopenharmony_cidei driver, dovrebbe essere presente nella stessa cartella anche un file TODO.
34762306a36Sopenharmony_ciIl file TODO elenca il lavoro ancora da fare su questi driver per poter essere
34862306a36Sopenharmony_ciaccettati nel kernel, e indica anche la lista di persone da inserire in copia
34962306a36Sopenharmony_ciconoscenza per ogni modifica fatta.  Le regole attuali richiedono che i
35062306a36Sopenharmony_cidriver debbano, come minimo, compilare adeguatamente.
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ciLa *preparazione* può essere una via relativamente facile per inserire nuovi
35362306a36Sopenharmony_cidriver all'interno del ramo principale, dove, con un po' di fortuna, saranno
35462306a36Sopenharmony_cinotati da altri sviluppatori e migliorati velocemente.  Entrare nella fase
35562306a36Sopenharmony_cidi preparazione non è però la fine della storia, infatti, il codice che si
35662306a36Sopenharmony_citrova nella cartella staging che non mostra regolari progressi potrebbe
35762306a36Sopenharmony_ciessere rimosso.  Le distribuzioni, inoltre, tendono a dimostrarsi relativamente
35862306a36Sopenharmony_ciriluttanti nell'attivare driver in preparazione. Quindi lo preparazione è,
35962306a36Sopenharmony_cinel migliore dei casi, una tappa sulla strada verso il divenire un driver
36062306a36Sopenharmony_cidel ramo principale.
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ciStrumenti
36462306a36Sopenharmony_ci---------
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ciCome è possibile notare dal testo sopra, il processo di sviluppo del kernel
36762306a36Sopenharmony_cidipende pesantemente dalla capacità di guidare la raccolta di patch in
36862306a36Sopenharmony_cidiverse direzioni.  L'intera cosa non funzionerebbe se non venisse svolta
36962306a36Sopenharmony_cicon l'uso di strumenti appropriati e potenti.  Spiegare l'uso di tali
37062306a36Sopenharmony_cistrumenti non è lo scopo di questo documento, ma c'è spazio per alcuni
37162306a36Sopenharmony_ciconsigli.
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ciIn assoluto, nella comunità del kernel, predomina l'uso di git come sistema
37462306a36Sopenharmony_cidi gestione dei sorgenti. Git è una delle diverse tipologie di sistemi
37562306a36Sopenharmony_cidistribuiti di controllo versione che sono stati sviluppati nella comunità
37662306a36Sopenharmony_cidel software libero.  Esso è calibrato per lo sviluppo del kernel, e si
37762306a36Sopenharmony_cicomporta abbastanza bene quando ha a che fare con repositori grandi e con un
37862306a36Sopenharmony_civasto numero di patch.  Git ha inoltre la reputazione di essere difficile
37962306a36Sopenharmony_cida imparare e utilizzare, benché stia migliorando.  Agli sviluppatori
38062306a36Sopenharmony_cidel kernel viene richiesta un po' di familiarità con git; anche se non lo
38162306a36Sopenharmony_ciutilizzano per il proprio lavoro, hanno bisogno di git per tenersi al passo
38262306a36Sopenharmony_cicon il lavoro degli altri sviluppatori (e con il ramo principale).
38362306a36Sopenharmony_ci
38462306a36Sopenharmony_ciGit è ora compreso in quasi tutte le distribuzioni Linux. Esiste una sito che
38562306a36Sopenharmony_cipotete consultare:
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci	http://git-scm.com/
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ciQui troverete i riferimenti alla documentazione e alle guide passo-passo.
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ciTra gli sviluppatori Kernel che non usano git, la scelta alternativa più
39262306a36Sopenharmony_cipopolare è quasi sicuramente Mercurial:
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ci	http://www.selenic.com/mercurial/
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ciMercurial condivide diverse caratteristiche con git, ma fornisce
39762306a36Sopenharmony_ciun'interfaccia che potrebbe risultare più semplice da utilizzare.
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ciL'altro strumento che vale la pena conoscere è Quilt:
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ci	http://savannah.nongnu.org/projects/quilt/
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ciQuilt è un sistema di gestione delle patch, piuttosto che un sistema
40562306a36Sopenharmony_cidi gestione dei sorgenti.  Non mantiene uno storico degli eventi; ma piuttosto
40662306a36Sopenharmony_ciè orientato verso il tracciamento di uno specifico insieme di modifiche
40762306a36Sopenharmony_cirispetto ad un codice in evoluzione.  Molti dei più grandi manutentori di
40862306a36Sopenharmony_cisottosistema utilizzano quilt per gestire le patch che dovrebbero essere
40962306a36Sopenharmony_ciintegrate.  Per la gestione di certe tipologie di sorgenti (-mm, per esempio),
41062306a36Sopenharmony_ciquilt è il miglior strumento per svolgere il lavoro.
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ci
41362306a36Sopenharmony_ciListe di discussione
41462306a36Sopenharmony_ci--------------------
41562306a36Sopenharmony_ci
41662306a36Sopenharmony_ciUna grossa parte del lavoro di sviluppo del Kernel Linux viene svolto tramite
41762306a36Sopenharmony_cile liste di discussione.  È difficile essere un membro della comunità
41862306a36Sopenharmony_cipienamente coinvolto se non si partecipa almeno ad una lista da qualche
41962306a36Sopenharmony_ciparte.  Ma, le liste di discussione di Linux rappresentano un potenziale
42062306a36Sopenharmony_ciproblema per gli sviluppatori, che rischiano di venir sepolti da un mare di
42162306a36Sopenharmony_ciemail, restare incagliati nelle convenzioni in vigore nelle liste Linux,
42262306a36Sopenharmony_cio entrambi.
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_ciMolte delle liste di discussione del Kernel girano su vger.kernel.org;
42562306a36Sopenharmony_cil'elenco principale lo si trova sul sito:
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_ci	http://vger.kernel.org/vger-lists.html
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ciEsistono liste gestite altrove; un certo numero di queste sono in
43062306a36Sopenharmony_ciredhat.com/mailman/listinfo.
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_ciLa lista di discussione principale per lo sviluppo del kernel è, ovviamente,
43362306a36Sopenharmony_cilinux-kernel.  Questa lista è un luogo ostile dove trovarsi; i volumi possono
43462306a36Sopenharmony_ciraggiungere i 500 messaggi al giorno, la quantità di "rumore" è elevata,
43562306a36Sopenharmony_cila conversazione può essere strettamente tecnica e i partecipanti non sono
43662306a36Sopenharmony_cisempre preoccupati di mostrare un alto livello di educazione.  Ma non esiste
43762306a36Sopenharmony_cialtro luogo dove la comunità di sviluppo del kernel si unisce per intero;
43862306a36Sopenharmony_cigli sviluppatori che evitano tale lista si perderanno informazioni importanti.
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ciCi sono alcuni consigli che possono essere utili per sopravvivere a
44162306a36Sopenharmony_cilinux-kernel:
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ci- Tenete la lista in una cartella separata, piuttosto che inserirla nella
44462306a36Sopenharmony_ci  casella di posta principale.  Così da essere in grado di ignorare il flusso
44562306a36Sopenharmony_ci  di mail per un certo periodo di tempo.
44662306a36Sopenharmony_ci
44762306a36Sopenharmony_ci- Non cercate di seguire ogni conversazione - nessuno lo fa.  È importante
44862306a36Sopenharmony_ci  filtrare solo gli argomenti d'interesse (sebbene va notato che le
44962306a36Sopenharmony_ci  conversazioni di lungo periodo possono deviare dall'argomento originario
45062306a36Sopenharmony_ci  senza cambiare il titolo della mail) e le persone che stanno partecipando.
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_ci- Non alimentate i troll. Se qualcuno cerca di creare nervosismo, ignoratelo.
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ci- Quando rispondete ad una mail linux-kernel (o ad altre liste) mantenete
45562306a36Sopenharmony_ci  tutti i Cc:.  In assenza di importanti motivazioni (come una richiesta
45662306a36Sopenharmony_ci  esplicita), non dovreste mai togliere destinatari.  Assicuratevi sempre che
45762306a36Sopenharmony_ci  la persona alla quale state rispondendo sia presente nella lista Cc. Questa
45862306a36Sopenharmony_ci  usanza fa si che divenga inutile chiedere esplicitamente di essere inseriti
45962306a36Sopenharmony_ci  in copia nel rispondere al vostro messaggio.
46062306a36Sopenharmony_ci
46162306a36Sopenharmony_ci- Cercate nell'archivio della lista (e nella rete nella sua totalità) prima
46262306a36Sopenharmony_ci  di far domande.  Molti sviluppatori possono divenire impazienti con le
46362306a36Sopenharmony_ci  persone che chiaramente non hanno svolto i propri compiti a casa.
46462306a36Sopenharmony_ci
46562306a36Sopenharmony_ci- Evitate il *top-posting* (cioè la pratica di mettere la vostra risposta sopra
46662306a36Sopenharmony_ci  alla frase alla quale state rispondendo).  Ciò renderebbe la vostra risposta
46762306a36Sopenharmony_ci  difficile da leggere e genera scarsa impressione.
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ci- Chiedete nella lista di discussione corretta.  Linux-kernel può essere un
47062306a36Sopenharmony_ci  punto di incontro generale, ma non è il miglior posto dove trovare
47162306a36Sopenharmony_ci  sviluppatori da tutti i sottosistemi.
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_ciInfine, la ricerca della corretta lista di discussione è uno degli errori più
47462306a36Sopenharmony_cicomuni per gli sviluppatori principianti.  Qualcuno che pone una domanda
47562306a36Sopenharmony_cirelativa alla rete su linux-kernel riceverà quasi certamente il suggerimento
47662306a36Sopenharmony_cidi chiedere sulla lista netdev, che è la lista frequentata dagli sviluppatori
47762306a36Sopenharmony_cidi rete.  Ci sono poi altre liste per i sottosistemi SCSI, video4linux, IDE,
47862306a36Sopenharmony_cifilesystem, etc.  Il miglior posto dove cercare una lista di discussione è il
47962306a36Sopenharmony_cifile MAINTAINERS che si trova nei sorgenti del kernel.
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_ciIniziare con lo sviluppo del Kernel
48262306a36Sopenharmony_ci-----------------------------------
48362306a36Sopenharmony_ci
48462306a36Sopenharmony_ciSono comuni le domande sul come iniziare con lo sviluppo del kernel - sia da
48562306a36Sopenharmony_cisingole persone che da aziende.  Altrettanto comuni sono i passi falsi che
48662306a36Sopenharmony_cirendono l'inizio di tale relazione più difficile di quello che dovrebbe essere.
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ciLe aziende spesso cercano di assumere sviluppatori noti per creare un gruppo
48962306a36Sopenharmony_cidi sviluppo iniziale.  Questo, in effetti, può essere una tecnica efficace.
49062306a36Sopenharmony_ciMa risulta anche essere dispendiosa e non va ad accrescere il bacino di
49162306a36Sopenharmony_cisviluppatori kernel con esperienza.  È possibile anche "portare a casa"
49262306a36Sopenharmony_cisviluppatori per accelerare lo sviluppo del kernel, dando comunque
49362306a36Sopenharmony_ciall'investimento un po' di tempo.  Prendersi questo tempo può fornire
49462306a36Sopenharmony_cial datore di lavoro un gruppo di sviluppatori che comprendono sia il kernel
49562306a36Sopenharmony_ciche l'azienda stessa, e che possono supportare la formazione di altre persone.
49662306a36Sopenharmony_ciNel medio periodo, questa è spesso uno delle soluzioni più proficue.
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ciI singoli sviluppatori sono spesso, comprensibilmente, una perdita come punto
49962306a36Sopenharmony_cidi partenza.  Iniziare con un grande progetto può rivelarsi intimidatorio;
50062306a36Sopenharmony_cispesso all'inizio si vuole solo verificare il terreno con qualcosa di piccolo.
50162306a36Sopenharmony_ciQuesta è una delle motivazioni per le quali molti sviluppatori saltano alla
50262306a36Sopenharmony_cicreazione di patch che vanno a sistemare errori di battitura o
50362306a36Sopenharmony_ciproblematiche minori legate allo stile del codice.  Sfortunatamente, tali
50462306a36Sopenharmony_cipatch creano un certo livello di rumore che distrae l'intera comunità di
50562306a36Sopenharmony_cisviluppo, quindi, sempre di più, esse vengono degradate.  I nuovi sviluppatori
50662306a36Sopenharmony_ciche desiderano presentarsi alla comunità non riceveranno l'accoglienza
50762306a36Sopenharmony_ciche vorrebbero con questi mezzi.
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_ciAndrew Morton da questo consiglio agli aspiranti sviluppatori kernel
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_ci::
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ci     Il primo progetto per un neofita del kernel dovrebbe essere
51462306a36Sopenharmony_ci     sicuramente quello di "assicurarsi che il kernel funzioni alla
51562306a36Sopenharmony_ci     perfezione sempre e su tutte le macchine sulle quali potete stendere
51662306a36Sopenharmony_ci     la vostra mano".  Solitamente il modo per fare ciò è quello di
51762306a36Sopenharmony_ci     collaborare con gli altri nel sistemare le cose (questo richiede
51862306a36Sopenharmony_ci     persistenza!) ma va bene - è parte dello sviluppo kernel.
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_ci(http://lwn.net/Articles/283982/).
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_ciIn assenza di problemi ovvi da risolvere, si consiglia agli sviluppatori
52362306a36Sopenharmony_cidi consultare, in generale, la lista di regressioni e di bachi aperti.
52462306a36Sopenharmony_ciNon c'è mai carenza di problematiche bisognose di essere sistemate;
52562306a36Sopenharmony_ciaccollandosi tali questioni gli sviluppatori accumuleranno esperienza con
52662306a36Sopenharmony_cila procedura, ed allo stesso tempo, aumenteranno la loro rispettabilità
52762306a36Sopenharmony_ciall'interno della comunità di sviluppo.
528