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