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