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