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