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