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