xref: /OK3568_Linux_fs/kernel/Documentation/translations/it_IT/process/2.Process.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. include:: ../disclaimer-ita.rst
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun:Original: :ref:`Documentation/process/2.Process.rst <development_process>`
4*4882a593Smuzhiyun:Translator: Alessia Mantegazza <amantegazza@vaga.pv.it>
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun.. _it_development_process:
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunCome funziona il processo di sviluppo
9*4882a593Smuzhiyun=====================================
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunLo sviluppo del Kernel agli inizi degli anno '90 era abbastanza libero, con
12*4882a593Smuzhiyunun numero di utenti e sviluppatori relativamente basso.  Con una base
13*4882a593Smuzhiyundi milioni di utenti e con 2000 sviluppatori coinvolti nel giro di un anno,
14*4882a593Smuzhiyunil kernel da allora ha messo in atto un certo numero di procedure per rendere
15*4882a593Smuzhiyunlo sviluppo più agevole.  È richiesta una solida conoscenza di come tale
16*4882a593Smuzhiyunprocesso si svolge per poter esserne parte attiva.
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunIl quadro d'insieme
19*4882a593Smuzhiyun-------------------
20*4882a593Smuzhiyun
21*4882a593SmuzhiyunGli sviluppatori kernel utilizzano un calendario di rilascio generico, dove
22*4882a593Smuzhiyunogni due o tre mesi viene effettuata un rilascio importante del kernel.
23*4882a593SmuzhiyunI rilasci più recenti sono stati:
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun	======  =================
26*4882a593Smuzhiyun	5.0     3 marzo, 2019
27*4882a593Smuzhiyun	5.1     5 maggio, 2019
28*4882a593Smuzhiyun	5.2     7 luglio, 2019
29*4882a593Smuzhiyun	5.3     15 settembre, 2019
30*4882a593Smuzhiyun	5.4     24 novembre, 2019
31*4882a593Smuzhiyun	5.5     6 gennaio, 2020
32*4882a593Smuzhiyun	======  =================
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunCiascun rilascio 5.x è un importante rilascio del kernel con nuove
35*4882a593Smuzhiyunfunzionalità, modifiche interne dell'API, e molto altro.  Un tipico
36*4882a593Smuzhiyunrilascio contiene quasi 13,000 gruppi di modifiche con ulteriori
37*4882a593Smuzhiyunmodifiche a parecchie migliaia di linee di codice.  La 5.x. è pertanto la
38*4882a593Smuzhiyunlinea di confine nello sviluppo del kernel Linux; il kernel utilizza un sistema
39*4882a593Smuzhiyundi sviluppo continuo che integra costantemente nuove importanti modifiche.
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunViene seguita una disciplina abbastanza lineare per l'inclusione delle
42*4882a593Smuzhiyunpatch di ogni rilascio. All'inizio di ogni ciclo di sviluppo, la
43*4882a593Smuzhiyun"finestra di inclusione" viene dichiarata aperta.  In quel momento il codice
44*4882a593Smuzhiyunritenuto sufficientemente stabile(e che è accettato dalla comunità di sviluppo)
45*4882a593Smuzhiyunviene incluso nel ramo principale del kernel.  La maggior parte delle
46*4882a593Smuzhiyunpatch per un nuovo ciclo di sviluppo (e tutte le più importanti modifiche)
47*4882a593Smuzhiyunsaranno inserite durante questo periodo, ad un ritmo che si attesta sulle
48*4882a593Smuzhiyun1000 modifiche ("patch" o "gruppo di modifiche") al giorno.
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun(per inciso, vale la pena notare che i cambiamenti integrati durante la
51*4882a593Smuzhiyun"finestra di inclusione" non escono dal nulla; questi infatti, sono stati
52*4882a593Smuzhiyunraccolti e, verificati in anticipo.  Il funzionamento di tale procedimento
53*4882a593Smuzhiyunverrà descritto dettagliatamente più avanti).
54*4882a593Smuzhiyun
55*4882a593SmuzhiyunLa finestra di inclusione resta attiva approssimativamente per due settimane.
56*4882a593SmuzhiyunAl termine di questo periodo, Linus Torvald dichiarerà che la finestra è
57*4882a593Smuzhiyunchiusa e rilascerà il primo degli "rc" del kernel.
58*4882a593SmuzhiyunPer il kernel che è destinato ad essere 5.6, per esempio, il rilascio
59*4882a593Smuzhiyunche emerge al termine della finestra d'inclusione si chiamerà 5.6-rc1.
60*4882a593SmuzhiyunQuesto rilascio indica che il momento di aggiungere nuovi componenti è
61*4882a593Smuzhiyunpassato, e che è iniziato il periodo di stabilizzazione del prossimo kernel.
62*4882a593Smuzhiyun
63*4882a593SmuzhiyunNelle successive sei/dieci settimane, potranno essere sottoposte solo modifiche
64*4882a593Smuzhiyunche vanno a risolvere delle problematiche.  Occasionalmente potrà essere
65*4882a593Smuzhiyunconsentita una modifica più consistente, ma tali occasioni sono rare.
66*4882a593SmuzhiyunGli sviluppatori che tenteranno di aggiungere nuovi elementi al di fuori della
67*4882a593Smuzhiyunfinestra di inclusione, tendenzialmente, riceveranno un accoglienza poco
68*4882a593Smuzhiyunamichevole. Come regola generale: se vi perdete la finestra di inclusione per
69*4882a593Smuzhiyunun dato componente, la cosa migliore da fare è aspettare il ciclo di sviluppo
70*4882a593Smuzhiyunsuccessivo (un'eccezione può essere fatta per i driver per hardware non
71*4882a593Smuzhiyunsupportati in precedenza; se toccano codice non facente parte di quello
72*4882a593Smuzhiyunattuale, che non causino regressioni e che potrebbero essere aggiunti in
73*4882a593Smuzhiyunsicurezza in un qualsiasi momento)
74*4882a593Smuzhiyun
75*4882a593SmuzhiyunMentre le correzioni si aprono la loro strada all'interno del ramo principale,
76*4882a593Smuzhiyunil ritmo delle modifiche rallenta col tempo.  Linus rilascia un nuovo
77*4882a593Smuzhiyunkernel -rc circa una volta alla settimana; e ne usciranno circa 6 o 9 prima
78*4882a593Smuzhiyunche il kernel venga considerato sufficientemente stabile e che il rilascio
79*4882a593Smuzhiyunfinale venga fatto.  A quel punto tutto il processo ricomincerà.
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunEsempio: ecco com'è andato il ciclo di sviluppo della versione 5.4
82*4882a593Smuzhiyun(tutte le date si collocano nel 2018)
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun	==============  =======================================
86*4882a593Smuzhiyun	15 settembre	5.3 rilascio stabile
87*4882a593Smuzhiyun	30 settembre	5.4-rc1, finestra di inclusione chiusa
88*4882a593Smuzhiyun	6 ottobre	5.4-rc2
89*4882a593Smuzhiyun	13 ottobre	5.4-rc3
90*4882a593Smuzhiyun	20 ottobre	5.4-rc4
91*4882a593Smuzhiyun	27 ottobre	5.4-rc5
92*4882a593Smuzhiyun	3 novembre	5.4-rc6
93*4882a593Smuzhiyun	10 novembre	5.4-rc7
94*4882a593Smuzhiyun	17 novembre	5.4-rc8
95*4882a593Smuzhiyun	24 novembre	5.4 rilascio stabile
96*4882a593Smuzhiyun	==============  =======================================
97*4882a593Smuzhiyun
98*4882a593SmuzhiyunIn che modo gli sviluppatori decidono quando chiudere il ciclo di sviluppo e
99*4882a593Smuzhiyuncreare quindi una rilascio stabile? Un metro valido è il numero di regressioni
100*4882a593Smuzhiyunrilevate nel precedente rilascio.  Nessun baco è il benvenuto, ma quelli che
101*4882a593Smuzhiyunprocurano problemi su sistemi che hanno funzionato in passato sono considerati
102*4882a593Smuzhiyunparticolarmente seri.  Per questa ragione, le modifiche che portano ad una
103*4882a593Smuzhiyunregressione sono viste sfavorevolmente e verranno quasi sicuramente annullate
104*4882a593Smuzhiyundurante il periodo di stabilizzazione.
105*4882a593Smuzhiyun
106*4882a593SmuzhiyunL'obiettivo degli sviluppatori è quello di aggiustare tutte le regressioni
107*4882a593Smuzhiyunconosciute prima che avvenga il rilascio stabile.  Nel mondo reale, questo
108*4882a593Smuzhiyuntipo di perfezione difficilmente viene raggiunta; esistono troppe variabili
109*4882a593Smuzhiyunin un progetto di questa portata.  Arriva un punto dove ritardare il rilascio
110*4882a593Smuzhiyunfinale peggiora la situazione; la quantità di modifiche in attesa della
111*4882a593Smuzhiyunprossima finestra di inclusione crescerà enormemente, creando ancor più
112*4882a593Smuzhiyunregressioni al giro successivo.  Quindi molti kernel 5.x escono con una
113*4882a593Smuzhiyunmanciata di regressioni delle quali, si spera, nessuna è grave.
114*4882a593Smuzhiyun
115*4882a593SmuzhiyunUna volta che un rilascio stabile è fatto, il suo costante mantenimento è
116*4882a593Smuzhiyunaffidato al "squadra stabilità", attualmente composta da Greg Kroah-Hartman.
117*4882a593SmuzhiyunQuesta squadra rilascia occasionalmente degli aggiornamenti relativi al
118*4882a593Smuzhiyunrilascio stabile usando la numerazione 5.x.y.  Per essere presa in
119*4882a593Smuzhiyunconsiderazione per un rilascio d'aggiornamento, una modifica deve:
120*4882a593Smuzhiyun(1) correggere un baco importante (2) essere già inserita nel ramo principale
121*4882a593Smuzhiyunper il prossimo sviluppo del kernel.  Solitamente, passato il loro rilascio
122*4882a593Smuzhiyuniniziale, i kernel ricevono aggiornamenti per più di un ciclo di sviluppo.
123*4882a593SmuzhiyunQuindi, per esempio, la storia del kernel 5.2 appare così (anno 2019):
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun	==============  ===============================
126*4882a593Smuzhiyun	15 settembre	5.2 rilascio stabile FIXME settembre è sbagliato
127*4882a593Smuzhiyun	14 luglio	5.2.1
128*4882a593Smuzhiyun	21 luglio	5.2.2
129*4882a593Smuzhiyun	26 luglio	5.2.3
130*4882a593Smuzhiyun	28 luglio	5.2.4
131*4882a593Smuzhiyun	31 luglio	5.2.5
132*4882a593Smuzhiyun	...		...
133*4882a593Smuzhiyun	11 ottobre	5.2.21
134*4882a593Smuzhiyun	==============  ===============================
135*4882a593Smuzhiyun
136*4882a593SmuzhiyunLa 5.2.21 fu l'aggiornamento finale per la versione 5.2.
137*4882a593Smuzhiyun
138*4882a593SmuzhiyunAlcuni kernel sono destinati ad essere kernel a "lungo termine"; questi
139*4882a593Smuzhiyunriceveranno assistenza per un lungo periodo di tempo.  Al momento in cui
140*4882a593Smuzhiyunscriviamo, i manutentori dei kernel stabili a lungo termine sono:
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun	======  ================================  ==========================================
143*4882a593Smuzhiyun	3.16	Ben Hutchings			  (kernel stabile molto più a lungo termine)
144*4882a593Smuzhiyun	4.4	Greg Kroah-Hartman e Sasha Levin  (kernel stabile molto più a lungo termine)
145*4882a593Smuzhiyun	4.9	Greg Kroah-Hartman e Sasha Levin
146*4882a593Smuzhiyun	4.14	Greg Kroah-Hartman e Sasha Levin
147*4882a593Smuzhiyun	4.19	Greg Kroah-Hartman e Sasha Levin
148*4882a593Smuzhiyun	5.4i	Greg Kroah-Hartman e Sasha Levin
149*4882a593Smuzhiyun	======  ================================  ==========================================
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun
152*4882a593SmuzhiyunQuesta selezione di kernel di lungo periodo sono puramente dovuti ai loro
153*4882a593Smuzhiyunmanutentori, alla loro necessità e al tempo per tenere aggiornate proprio
154*4882a593Smuzhiyunquelle versioni.  Non ci sono altri kernel a lungo termine in programma per
155*4882a593Smuzhiyunalcun rilascio in arrivo.
156*4882a593Smuzhiyun
157*4882a593SmuzhiyunIl ciclo di vita di una patch
158*4882a593Smuzhiyun-----------------------------
159*4882a593Smuzhiyun
160*4882a593SmuzhiyunLe patch non passano direttamente dalla tastiera dello sviluppatori
161*4882a593Smuzhiyunal ramo principale del kernel. Esiste, invece, una procedura disegnata
162*4882a593Smuzhiyunper assicurare che ogni patch sia di buona qualità e desiderata nel
163*4882a593Smuzhiyunramo principale.  Questo processo avviene velocemente per le correzioni
164*4882a593Smuzhiyunmeno importanti, o, nel caso di patch ampie e controverse, va avanti per anni.
165*4882a593SmuzhiyunPer uno sviluppatore la maggior frustrazione viene dalla mancanza di
166*4882a593Smuzhiyuncomprensione di questo processo o dai tentativi di aggirarlo.
167*4882a593Smuzhiyun
168*4882a593SmuzhiyunNella speranza di ridurre questa frustrazione, questo documento spiegherà
169*4882a593Smuzhiyuncome una patch viene inserita nel kernel.  Ciò che segue è un'introduzione
170*4882a593Smuzhiyunche descrive il processo ideale.  Approfondimenti verranno invece trattati
171*4882a593Smuzhiyunpiù avanti.
172*4882a593Smuzhiyun
173*4882a593SmuzhiyunUna patch attraversa, generalmente, le seguenti fasi:
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun - Progetto. In questa fase sono stabilite quelli che sono i requisiti
176*4882a593Smuzhiyun   della modifica - e come verranno soddisfatti.  Il lavoro di progettazione
177*4882a593Smuzhiyun   viene spesso svolto senza coinvolgere la comunità, ma è meglio renderlo
178*4882a593Smuzhiyun   il più aperto possibile; questo può far risparmiare molto tempo evitando
179*4882a593Smuzhiyun   eventuali riprogettazioni successive.
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun - Prima revisione. Le patch vengono pubblicate sulle liste di discussione
182*4882a593Smuzhiyun   interessate, e gli sviluppatori in quella lista risponderanno coi loro
183*4882a593Smuzhiyun   commenti.  Se si svolge correttamente, questo procedimento potrebbe far
184*4882a593Smuzhiyun   emergere problemi rilevanti in una patch.
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun - Revisione più ampia. Quando la patch è quasi pronta per essere inserita
187*4882a593Smuzhiyun   nel ramo principale, un manutentore importante del sottosistema dovrebbe
188*4882a593Smuzhiyun   accettarla - anche se, questa accettazione non è una garanzia che la
189*4882a593Smuzhiyun   patch arriverà nel ramo principale. La patch sarà visibile nei sorgenti
190*4882a593Smuzhiyun   del sottosistema in questione e nei sorgenti -next (descritti sotto).
191*4882a593Smuzhiyun   Quando il processo va a buon fine, questo passo porta ad una revisione
192*4882a593Smuzhiyun   più estesa della patch e alla scoperta di problemi d'integrazione
193*4882a593Smuzhiyun   con il lavoro altrui.
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun-  Per favore, tenete da conto che la maggior parte dei manutentori ha
196*4882a593Smuzhiyun   anche un lavoro quotidiano, quindi integrare le vostre patch potrebbe
197*4882a593Smuzhiyun   non essere la loro priorità più alta.  Se una vostra patch riceve
198*4882a593Smuzhiyun   dei suggerimenti su dei cambiamenti necessari, dovreste applicare
199*4882a593Smuzhiyun   quei cambiamenti o giustificare perché non sono necessari.  Se la vostra
200*4882a593Smuzhiyun   patch non riceve alcuna critica ma non è stata integrata dal
201*4882a593Smuzhiyun   manutentore del driver o sottosistema, allora dovreste continuare con
202*4882a593Smuzhiyun   i necessari aggiornamenti per mantenere la patch aggiornata al kernel
203*4882a593Smuzhiyun   più recente cosicché questa possa integrarsi senza problemi; continuate
204*4882a593Smuzhiyun   ad inviare gli aggiornamenti per essere revisionati e integrati.
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun - Inclusione nel ramo principale. Eventualmente, una buona patch verrà
207*4882a593Smuzhiyun   inserita all'interno nel repositorio principale, gestito da
208*4882a593Smuzhiyun   Linus Torvalds.  In questa fase potrebbero emergere nuovi problemi e/o
209*4882a593Smuzhiyun   commenti; è importante che lo sviluppatore sia collaborativo e che sistemi
210*4882a593Smuzhiyun   ogni questione che possa emergere.
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun - Rilascio stabile. Ora, il numero di utilizzatori che sono potenzialmente
213*4882a593Smuzhiyun   toccati dalla patch è aumentato, quindi, ancora una volta, potrebbero
214*4882a593Smuzhiyun   emergere nuovi problemi.
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun - Manutenzione di lungo periodo. Nonostante sia possibile che uno sviluppatore
217*4882a593Smuzhiyun   si dimentichi del codice dopo la sua integrazione, questo comportamento
218*4882a593Smuzhiyun   lascia una brutta impressione nella comunità di sviluppo.  Integrare il
219*4882a593Smuzhiyun   codice elimina alcuni degli oneri facenti parte della manutenzione, in
220*4882a593Smuzhiyun   particolare, sistemerà le problematiche causate dalle modifiche all'API.
221*4882a593Smuzhiyun   Ma lo sviluppatore originario dovrebbe continuare ad assumersi la
222*4882a593Smuzhiyun   responsabilità per il codice se quest'ultimo continua ad essere utile
223*4882a593Smuzhiyun   nel lungo periodo.
224*4882a593Smuzhiyun
225*4882a593SmuzhiyunUno dei più grandi errori fatti dagli sviluppatori kernel (o dai loro datori
226*4882a593Smuzhiyundi lavoro) è quello di cercare di ridurre tutta la procedura ad una singola
227*4882a593Smuzhiyun"integrazione nel remo principale".  Questo approccio inevitabilmente conduce
228*4882a593Smuzhiyuna una condizione di frustrazione per tutti coloro che sono coinvolti.
229*4882a593Smuzhiyun
230*4882a593SmuzhiyunCome le modifiche finiscono nel Kernel
231*4882a593Smuzhiyun--------------------------------------
232*4882a593Smuzhiyun
233*4882a593SmuzhiyunEsiste una sola persona che può inserire le patch nel repositorio principale
234*4882a593Smuzhiyundel kernel: Linus Torvalds.  Ma, per esempio, di tutte le 9500 patch
235*4882a593Smuzhiyunche entrarono nella versione 2.6.38 del kernel, solo 112 (circa
236*4882a593Smuzhiyunl'1,3%) furono scelte direttamente da Linus in persona.  Il progetto
237*4882a593Smuzhiyundel kernel è cresciuto fino a raggiungere una dimensione tale per cui
238*4882a593Smuzhiyunun singolo sviluppatore non può controllare e selezionare
239*4882a593Smuzhiyunindipendentemente ogni modifica senza essere supportato.  La via
240*4882a593Smuzhiyunscelta dagli sviluppatori per indirizzare tale crescita è stata quella
241*4882a593Smuzhiyundi utilizzare un sistema di "sottotenenti" basato sulla fiducia.
242*4882a593Smuzhiyun
243*4882a593SmuzhiyunIl codice base del kernel è spezzato in una serie si sottosistemi: rete,
244*4882a593Smuzhiyunsupporto per specifiche architetture, gestione della memoria, video e
245*4882a593Smuzhiyunstrumenti, etc.  Molti sottosistemi hanno un manutentore designato: ovvero uno
246*4882a593Smuzhiyunsviluppatore che ha piena responsabilità di tutto il codice presente in quel
247*4882a593Smuzhiyunsottosistema.  Tali manutentori di sottosistema sono i guardiani
248*4882a593Smuzhiyun(in un certo senso) della parte di kernel che gestiscono; sono coloro che
249*4882a593Smuzhiyun(solitamente) accetteranno una patch per l'inclusione nel ramo principale
250*4882a593Smuzhiyundel kernel.
251*4882a593Smuzhiyun
252*4882a593SmuzhiyunI manutentori di sottosistema gestiscono ciascuno la propria parte dei sorgenti
253*4882a593Smuzhiyundel kernel, utilizzando abitualmente (ma certamente non sempre) git.
254*4882a593SmuzhiyunStrumenti come git (e affini come quilt o mercurial) permettono ai manutentori
255*4882a593Smuzhiyundi stilare una lista delle patch, includendo informazioni sull'autore ed
256*4882a593Smuzhiyunaltri metadati.  In ogni momento, il manutentore può individuare quale patch
257*4882a593Smuzhiyunnel sua repositorio non si trova nel ramo principale.
258*4882a593Smuzhiyun
259*4882a593SmuzhiyunQuando la "finestra di integrazione" si apre, i manutentori di alto livello
260*4882a593Smuzhiyunchiederanno a Linus di "prendere" dai loro repositori le modifiche che hanno
261*4882a593Smuzhiyunselezionato per l'inclusione.  Se Linus acconsente, il flusso di patch si
262*4882a593Smuzhiyunconvoglierà nel repositorio di quest ultimo, divenendo così parte del ramo
263*4882a593Smuzhiyunprincipale del kernel.  La quantità d'attenzione che Linus presta alle
264*4882a593Smuzhiyunsingole patch ricevute durante l'operazione di integrazione varia.
265*4882a593SmuzhiyunÈ chiaro che, qualche volta, guardi più attentamente.  Ma, come regola
266*4882a593Smuzhiyungenerale, Linus confida nel fatto che i manutentori di sottosistema non
267*4882a593Smuzhiyunselezionino pessime patch.
268*4882a593Smuzhiyun
269*4882a593SmuzhiyunI manutentori di sottosistemi, a turno, possono "prendere" patch
270*4882a593Smuzhiyunprovenienti da altri manutentori.  Per esempio, i sorgenti per la rete rete
271*4882a593Smuzhiyunsono costruiti da modifiche che si sono accumulate inizialmente nei sorgenti
272*4882a593Smuzhiyundedicati ai driver per dispositivi di rete, rete senza fili, ecc.  Tale
273*4882a593Smuzhiyuncatena di repositori può essere più o meno lunga, benché raramente ecceda
274*4882a593Smuzhiyuni due o tre collegamenti.  Questo processo è conosciuto come
275*4882a593Smuzhiyun"la catena della fiducia", perché ogni manutentore all'interno della
276*4882a593Smuzhiyuncatena si fida di coloro che gestiscono i livelli più bassi.
277*4882a593Smuzhiyun
278*4882a593SmuzhiyunChiaramente, in un sistema come questo, l'inserimento delle patch all'interno
279*4882a593Smuzhiyundel kernel si basa sul trovare il manutentore giusto.  Di norma, inviare
280*4882a593Smuzhiyunpatch direttamente a Linus non è la via giusta.
281*4882a593Smuzhiyun
282*4882a593Smuzhiyun
283*4882a593SmuzhiyunSorgenti -next
284*4882a593Smuzhiyun--------------
285*4882a593Smuzhiyun
286*4882a593SmuzhiyunLa catena di sottosistemi guida il flusso di patch all'interno del kernel,
287*4882a593Smuzhiyunma solleva anche un interessante quesito: se qualcuno volesse vedere tutte le
288*4882a593Smuzhiyunpatch pronte per la prossima finestra di integrazione?
289*4882a593SmuzhiyunGli sviluppatori si interesseranno alle patch in sospeso per verificare
290*4882a593Smuzhiyunche non ci siano altri conflitti di cui preoccuparsi; una modifica che, per
291*4882a593Smuzhiyunesempio, cambia il prototipo di una funzione fondamentale del kernel andrà in
292*4882a593Smuzhiyunconflitto con qualsiasi altra modifica che utilizzi la vecchia versione di
293*4882a593Smuzhiyunquella funzione.  Revisori e tester vogliono invece avere accesso alle
294*4882a593Smuzhiyunmodifiche nella loro totalità prima che approdino nel ramo principale del
295*4882a593Smuzhiyunkernel.  Uno potrebbe prendere le patch provenienti da tutti i sottosistemi
296*4882a593Smuzhiyund'interesse, ma questo sarebbe un lavoro enorme e fallace.
297*4882a593Smuzhiyun
298*4882a593SmuzhiyunLa risposta ci viene sotto forma di sorgenti -next, dove i sottosistemi sono
299*4882a593Smuzhiyunraccolti per essere testati e controllati.  Il più vecchio di questi sorgenti,
300*4882a593Smuzhiyungestito da Andrew Morton, è chiamato "-mm" (memory management, che è l'inizio
301*4882a593Smuzhiyundi tutto).  L'-mm integra patch proveniente da una lunga lista di sottosistemi;
302*4882a593Smuzhiyune ha, inoltre, alcune patch destinate al supporto del debugging.
303*4882a593Smuzhiyun
304*4882a593SmuzhiyunOltre a questo, -mm contiene una raccolta significativa di patch che sono
305*4882a593Smuzhiyunstate selezionate da Andrew direttamente.  Queste patch potrebbero essere
306*4882a593Smuzhiyunstate inviate in una lista di discussione, o possono essere applicate ad una
307*4882a593Smuzhiyunparte del kernel per la quale non esiste un sottosistema dedicato.
308*4882a593SmuzhiyunDi conseguenza, -mm opera come una specie di sottosistema "ultima spiaggia";
309*4882a593Smuzhiyunse per una patch non esiste una via chiara per entrare nel ramo principale,
310*4882a593Smuzhiyunallora è probabile che finirà in -mm.  Le patch passate per -mm
311*4882a593Smuzhiyuneventualmente finiranno nel sottosistema più appropriato o saranno inviate
312*4882a593Smuzhiyundirettamente a Linus.  In un tipico ciclo di sviluppo, circa il 5-10% delle
313*4882a593Smuzhiyunpatch andrà nel ramo principale attraverso -mm.
314*4882a593Smuzhiyun
315*4882a593SmuzhiyunLa patch -mm correnti sono disponibili nella cartella "mmotm" (-mm of
316*4882a593Smuzhiyunthe moment) all'indirizzo:
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun      http://www.ozlabs.org/~akpm/mmotm/
319*4882a593Smuzhiyun
320*4882a593SmuzhiyunÈ molto probabile che l'uso dei sorgenti MMOTM diventi un'esperienza
321*4882a593Smuzhiyunfrustrante; ci sono buone probabilità che non compili nemmeno.
322*4882a593Smuzhiyun
323*4882a593SmuzhiyunI sorgenti principali per il prossimo ciclo d'integrazione delle patch
324*4882a593Smuzhiyunè linux-next, gestito da Stephen Rothwell.  I sorgenti linux-next sono, per
325*4882a593Smuzhiyundefinizione, un'istantanea di come dovrà apparire il ramo principale dopo che
326*4882a593Smuzhiyunla prossima finestra di inclusione si chiuderà.  I linux-next sono annunciati
327*4882a593Smuzhiyunsulla lista di discussione linux-kernel e linux-next nel momento in cui
328*4882a593Smuzhiyunvengono assemblati; e possono essere scaricate da:
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun	http://www.kernel.org/pub/linux/kernel/next/
331*4882a593Smuzhiyun
332*4882a593SmuzhiyunLinux-next è divenuto parte integrante del processo di sviluppo del kernel;
333*4882a593Smuzhiyuntutte le patch incorporate durante una finestra di integrazione dovrebbero
334*4882a593Smuzhiyunaver trovato la propria strada in linux-next, a volte anche prima dell'apertura
335*4882a593Smuzhiyundella finestra di integrazione.
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun
338*4882a593SmuzhiyunSorgenti in preparazione
339*4882a593Smuzhiyun------------------------
340*4882a593Smuzhiyun
341*4882a593SmuzhiyunNei sorgenti del kernel esiste la cartella drivers/staging/, dove risiedono
342*4882a593Smuzhiyunmolte sotto-cartelle per i driver o i filesystem che stanno per essere aggiunti
343*4882a593Smuzhiyunal kernel.  Questi restano nella cartella drivers/staging fintanto che avranno
344*4882a593Smuzhiyunbisogno di maggior lavoro; una volta completato, possono essere spostate
345*4882a593Smuzhiyunall'interno del kernel nel posto più appropriato.  Questo è il modo di tener
346*4882a593Smuzhiyuntraccia dei driver che non sono ancora in linea con gli standard di codifica
347*4882a593Smuzhiyuno qualità, ma che le persone potrebbero voler usare ugualmente e tracciarne
348*4882a593Smuzhiyunlo sviluppo.
349*4882a593Smuzhiyun
350*4882a593SmuzhiyunGreg Kroah-Hartman attualmente gestisce i sorgenti in preparazione. I driver
351*4882a593Smuzhiyunche non sono completamente pronti vengono inviati a lui, e ciascun driver avrà
352*4882a593Smuzhiyunla propria sotto-cartella in drivers/staging/.  Assieme ai file sorgenti
353*4882a593Smuzhiyundei driver, dovrebbe essere presente nella stessa cartella anche un file TODO.
354*4882a593SmuzhiyunIl file TODO elenca il lavoro ancora da fare su questi driver per poter essere
355*4882a593Smuzhiyunaccettati nel kernel, e indica anche la lista di persone da inserire in copia
356*4882a593Smuzhiyunconoscenza per ogni modifica fatta.  Le regole attuali richiedono che i
357*4882a593Smuzhiyundriver debbano, come minimo, compilare adeguatamente.
358*4882a593Smuzhiyun
359*4882a593SmuzhiyunLa *preparazione* può essere una via relativamente facile per inserire nuovi
360*4882a593Smuzhiyundriver all'interno del ramo principale, dove, con un po' di fortuna, saranno
361*4882a593Smuzhiyunnotati da altri sviluppatori e migliorati velocemente.  Entrare nella fase
362*4882a593Smuzhiyundi preparazione non è però la fine della storia, infatti, il codice che si
363*4882a593Smuzhiyuntrova nella cartella staging che non mostra regolari progressi potrebbe
364*4882a593Smuzhiyunessere rimosso.  Le distribuzioni, inoltre, tendono a dimostrarsi relativamente
365*4882a593Smuzhiyunriluttanti nell'attivare driver in preparazione. Quindi lo preparazione è,
366*4882a593Smuzhiyunnel migliore dei casi, una tappa sulla strada verso il divenire un driver
367*4882a593Smuzhiyundel ramo principale.
368*4882a593Smuzhiyun
369*4882a593Smuzhiyun
370*4882a593SmuzhiyunStrumenti
371*4882a593Smuzhiyun---------
372*4882a593Smuzhiyun
373*4882a593SmuzhiyunCome è possibile notare dal testo sopra, il processo di sviluppo del kernel
374*4882a593Smuzhiyundipende pesantemente dalla capacità di guidare la raccolta di patch in
375*4882a593Smuzhiyundiverse direzioni.  L'intera cosa non funzionerebbe se non venisse svolta
376*4882a593Smuzhiyuncon l'uso di strumenti appropriati e potenti.  Spiegare l'uso di tali
377*4882a593Smuzhiyunstrumenti non è lo scopo di questo documento, ma c'è spazio per alcuni
378*4882a593Smuzhiyunconsigli.
379*4882a593Smuzhiyun
380*4882a593SmuzhiyunIn assoluto, nella comunità del kernel, predomina l'uso di git come sistema
381*4882a593Smuzhiyundi gestione dei sorgenti. Git è una delle diverse tipologie di sistemi
382*4882a593Smuzhiyundistribuiti di controllo versione che sono stati sviluppati nella comunità
383*4882a593Smuzhiyundel software libero.  Esso è calibrato per lo sviluppo del kernel, e si
384*4882a593Smuzhiyuncomporta abbastanza bene quando ha a che fare con repositori grandi e con un
385*4882a593Smuzhiyunvasto numero di patch.  Git ha inoltre la reputazione di essere difficile
386*4882a593Smuzhiyunda imparare e utilizzare, benché stia migliorando.  Agli sviluppatori
387*4882a593Smuzhiyundel kernel viene richiesta un po' di familiarità con git; anche se non lo
388*4882a593Smuzhiyunutilizzano per il proprio lavoro, hanno bisogno di git per tenersi al passo
389*4882a593Smuzhiyuncon il lavoro degli altri sviluppatori (e con il ramo principale).
390*4882a593Smuzhiyun
391*4882a593SmuzhiyunGit è ora compreso in quasi tutte le distribuzioni Linux. Esiste una sito che
392*4882a593Smuzhiyunpotete consultare:
393*4882a593Smuzhiyun
394*4882a593Smuzhiyun	http://git-scm.com/
395*4882a593Smuzhiyun
396*4882a593SmuzhiyunQui troverete i riferimenti alla documentazione e alle guide passo-passo.
397*4882a593Smuzhiyun
398*4882a593SmuzhiyunTra gli sviluppatori Kernel che non usano git, la scelta alternativa più
399*4882a593Smuzhiyunpopolare è quasi sicuramente Mercurial:
400*4882a593Smuzhiyun
401*4882a593Smuzhiyun	http://www.selenic.com/mercurial/
402*4882a593Smuzhiyun
403*4882a593SmuzhiyunMercurial condivide diverse caratteristiche con git, ma fornisce
404*4882a593Smuzhiyunun'interfaccia che potrebbe risultare più semplice da utilizzare.
405*4882a593Smuzhiyun
406*4882a593SmuzhiyunL'altro strumento che vale la pena conoscere è Quilt:
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun	http://savannah.nongnu.org/projects/quilt/
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun
411*4882a593SmuzhiyunQuilt è un sistema di gestione delle patch, piuttosto che un sistema
412*4882a593Smuzhiyundi gestione dei sorgenti.  Non mantiene uno storico degli eventi; ma piuttosto
413*4882a593Smuzhiyunè orientato verso il tracciamento di uno specifico insieme di modifiche
414*4882a593Smuzhiyunrispetto ad un codice in evoluzione.  Molti dei più grandi manutentori di
415*4882a593Smuzhiyunsottosistema utilizzano quilt per gestire le patch che dovrebbero essere
416*4882a593Smuzhiyunintegrate.  Per la gestione di certe tipologie di sorgenti (-mm, per esempio),
417*4882a593Smuzhiyunquilt è il miglior strumento per svolgere il lavoro.
418*4882a593Smuzhiyun
419*4882a593Smuzhiyun
420*4882a593SmuzhiyunListe di discussione
421*4882a593Smuzhiyun--------------------
422*4882a593Smuzhiyun
423*4882a593SmuzhiyunUna grossa parte del lavoro di sviluppo del Kernel Linux viene svolto tramite
424*4882a593Smuzhiyunle liste di discussione.  È difficile essere un membro della comunità
425*4882a593Smuzhiyunpienamente coinvolto se non si partecipa almeno ad una lista da qualche
426*4882a593Smuzhiyunparte.  Ma, le liste di discussione di Linux rappresentano un potenziale
427*4882a593Smuzhiyunproblema per gli sviluppatori, che rischiano di venir sepolti da un mare di
428*4882a593Smuzhiyunemail, restare incagliati nelle convenzioni in vigore nelle liste Linux,
429*4882a593Smuzhiyuno entrambi.
430*4882a593Smuzhiyun
431*4882a593SmuzhiyunMolte delle liste di discussione del Kernel girano su vger.kernel.org;
432*4882a593Smuzhiyunl'elenco principale lo si trova sul sito:
433*4882a593Smuzhiyun
434*4882a593Smuzhiyun	http://vger.kernel.org/vger-lists.html
435*4882a593Smuzhiyun
436*4882a593SmuzhiyunEsistono liste gestite altrove; un certo numero di queste sono in
437*4882a593Smuzhiyunlists.redhat.com.
438*4882a593Smuzhiyun
439*4882a593SmuzhiyunLa lista di discussione principale per lo sviluppo del kernel è, ovviamente,
440*4882a593Smuzhiyunlinux-kernel.  Questa lista è un luogo ostile dove trovarsi; i volumi possono
441*4882a593Smuzhiyunraggiungere i 500 messaggi al giorno, la quantità di "rumore" è elevata,
442*4882a593Smuzhiyunla conversazione può essere strettamente tecnica e i partecipanti non sono
443*4882a593Smuzhiyunsempre preoccupati di mostrare un alto livello di educazione.  Ma non esiste
444*4882a593Smuzhiyunaltro luogo dove la comunità di sviluppo del kernel si unisce per intero;
445*4882a593Smuzhiyungli sviluppatori che evitano tale lista si perderanno informazioni importanti.
446*4882a593Smuzhiyun
447*4882a593SmuzhiyunCi sono alcuni consigli che possono essere utili per sopravvivere a
448*4882a593Smuzhiyunlinux-kernel:
449*4882a593Smuzhiyun
450*4882a593Smuzhiyun- Tenete la lista in una cartella separata, piuttosto che inserirla nella
451*4882a593Smuzhiyun  casella di posta principale.  Così da essere in grado di ignorare il flusso
452*4882a593Smuzhiyun  di mail per un certo periodo di tempo.
453*4882a593Smuzhiyun
454*4882a593Smuzhiyun- Non cercate di seguire ogni conversazione - nessuno lo fa.  È importante
455*4882a593Smuzhiyun  filtrare solo gli argomenti d'interesse (sebbene va notato che le
456*4882a593Smuzhiyun  conversazioni di lungo periodo possono deviare dall'argomento originario
457*4882a593Smuzhiyun  senza cambiare il titolo della mail) e le persone che stanno partecipando.
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun- Non alimentate i troll. Se qualcuno cerca di creare nervosismo, ignoratelo.
460*4882a593Smuzhiyun
461*4882a593Smuzhiyun- Quando rispondete ad una mail linux-kernel (o ad altre liste) mantenete
462*4882a593Smuzhiyun  tutti i Cc:.  In assenza di importanti motivazioni (come una richiesta
463*4882a593Smuzhiyun  esplicita), non dovreste mai togliere destinatari.  Assicuratevi sempre che
464*4882a593Smuzhiyun  la persona alla quale state rispondendo sia presente nella lista Cc. Questa
465*4882a593Smuzhiyun  usanza fa si che divenga inutile chiedere esplicitamente di essere inseriti
466*4882a593Smuzhiyun  in copia nel rispondere al vostro messaggio.
467*4882a593Smuzhiyun
468*4882a593Smuzhiyun- Cercate nell'archivio della lista (e nella rete nella sua totalità) prima
469*4882a593Smuzhiyun  di far domande.  Molti sviluppatori possono divenire impazienti con le
470*4882a593Smuzhiyun  persone che chiaramente non hanno svolto i propri compiti a casa.
471*4882a593Smuzhiyun
472*4882a593Smuzhiyun- Evitate il *top-posting* (cioè la pratica di mettere la vostra risposta sopra
473*4882a593Smuzhiyun  alla frase alla quale state rispondendo).  Ciò renderebbe la vostra risposta
474*4882a593Smuzhiyun  difficile da leggere e genera scarsa impressione.
475*4882a593Smuzhiyun
476*4882a593Smuzhiyun- Chiedete nella lista di discussione corretta.  Linux-kernel può essere un
477*4882a593Smuzhiyun  punto di incontro generale, ma non è il miglior posto dove trovare
478*4882a593Smuzhiyun  sviluppatori da tutti i sottosistemi.
479*4882a593Smuzhiyun
480*4882a593SmuzhiyunInfine, la ricerca della corretta lista di discussione è uno degli errori più
481*4882a593Smuzhiyuncomuni per gli sviluppatori principianti.  Qualcuno che pone una domanda
482*4882a593Smuzhiyunrelativa alla rete su linux-kernel riceverà quasi certamente il suggerimento
483*4882a593Smuzhiyundi chiedere sulla lista netdev, che è la lista frequentata dagli sviluppatori
484*4882a593Smuzhiyundi rete.  Ci sono poi altre liste per i sottosistemi SCSI, video4linux, IDE,
485*4882a593Smuzhiyunfilesystem, etc.  Il miglior posto dove cercare una lista di discussione è il
486*4882a593Smuzhiyunfile MAINTAINERS che si trova nei sorgenti del kernel.
487*4882a593Smuzhiyun
488*4882a593SmuzhiyunIniziare con lo sviluppo del Kernel
489*4882a593Smuzhiyun-----------------------------------
490*4882a593Smuzhiyun
491*4882a593SmuzhiyunSono comuni le domande sul come iniziare con lo sviluppo del kernel - sia da
492*4882a593Smuzhiyunsingole persone che da aziende.  Altrettanto comuni sono i passi falsi che
493*4882a593Smuzhiyunrendono l'inizio di tale relazione più difficile di quello che dovrebbe essere.
494*4882a593Smuzhiyun
495*4882a593SmuzhiyunLe aziende spesso cercano di assumere sviluppatori noti per creare un gruppo
496*4882a593Smuzhiyundi sviluppo iniziale.  Questo, in effetti, può essere una tecnica efficace.
497*4882a593SmuzhiyunMa risulta anche essere dispendiosa e non va ad accrescere il bacino di
498*4882a593Smuzhiyunsviluppatori kernel con esperienza.  È possibile anche "portare a casa"
499*4882a593Smuzhiyunsviluppatori per accelerare lo sviluppo del kernel, dando comunque
500*4882a593Smuzhiyunall'investimento un po' di tempo.  Prendersi questo tempo può fornire
501*4882a593Smuzhiyunal datore di lavoro un gruppo di sviluppatori che comprendono sia il kernel
502*4882a593Smuzhiyunche l'azienda stessa, e che possono supportare la formazione di altre persone.
503*4882a593SmuzhiyunNel medio periodo, questa è spesso uno delle soluzioni più proficue.
504*4882a593Smuzhiyun
505*4882a593SmuzhiyunI singoli sviluppatori sono spesso, comprensibilmente, una perdita come punto
506*4882a593Smuzhiyundi partenza.  Iniziare con un grande progetto può rivelarsi intimidatorio;
507*4882a593Smuzhiyunspesso all'inizio si vuole solo verificare il terreno con qualcosa di piccolo.
508*4882a593SmuzhiyunQuesta è una delle motivazioni per le quali molti sviluppatori saltano alla
509*4882a593Smuzhiyuncreazione di patch che vanno a sistemare errori di battitura o
510*4882a593Smuzhiyunproblematiche minori legate allo stile del codice.  Sfortunatamente, tali
511*4882a593Smuzhiyunpatch creano un certo livello di rumore che distrae l'intera comunità di
512*4882a593Smuzhiyunsviluppo, quindi, sempre di più, esse vengono degradate.  I nuovi sviluppatori
513*4882a593Smuzhiyunche desiderano presentarsi alla comunità non riceveranno l'accoglienza
514*4882a593Smuzhiyunche vorrebbero con questi mezzi.
515*4882a593Smuzhiyun
516*4882a593SmuzhiyunAndrew Morton da questo consiglio agli aspiranti sviluppatori kernel
517*4882a593Smuzhiyun
518*4882a593Smuzhiyun::
519*4882a593Smuzhiyun
520*4882a593Smuzhiyun     Il primo progetto per un neofita del kernel dovrebbe essere
521*4882a593Smuzhiyun     sicuramente quello di "assicurarsi che il kernel funzioni alla
522*4882a593Smuzhiyun     perfezione sempre e su tutte le macchine sulle quali potete stendere
523*4882a593Smuzhiyun     la vostra mano".  Solitamente il modo per fare ciò è quello di
524*4882a593Smuzhiyun     collaborare con gli altri nel sistemare le cose (questo richiede
525*4882a593Smuzhiyun     persistenza!) ma va bene - è parte dello sviluppo kernel.
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun(http://lwn.net/Articles/283982/).
528*4882a593Smuzhiyun
529*4882a593SmuzhiyunIn assenza di problemi ovvi da risolvere, si consiglia agli sviluppatori
530*4882a593Smuzhiyundi consultare, in generale, la lista di regressioni e di bachi aperti.
531*4882a593SmuzhiyunNon c'è mai carenza di problematiche bisognose di essere sistemate;
532*4882a593Smuzhiyunaccollandosi tali questioni gli sviluppatori accumuleranno esperienza con
533*4882a593Smuzhiyunla procedura, ed allo stesso tempo, aumenteranno la loro rispettabilità
534*4882a593Smuzhiyunall'interno della comunità di sviluppo.
535