162306a36Sopenharmony_ci.. include:: ../disclaimer-ita.rst 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci:Original: :ref:`Documentation/process/2.Process.rst <development_process>` 462306a36Sopenharmony_ci:Translator: Alessia Mantegazza <amantegazza@vaga.pv.it> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci.. _it_development_process: 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciCome funziona il processo di sviluppo 962306a36Sopenharmony_ci===================================== 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ciLo sviluppo del Kernel agli inizi degli anno '90 era abbastanza libero, con 1262306a36Sopenharmony_ciun numero di utenti e sviluppatori relativamente basso. Con una base 1362306a36Sopenharmony_cidi milioni di utenti e con 2000 sviluppatori coinvolti nel giro di un anno, 1462306a36Sopenharmony_ciil kernel da allora ha messo in atto un certo numero di procedure per rendere 1562306a36Sopenharmony_cilo sviluppo più agevole. È richiesta una solida conoscenza di come tale 1662306a36Sopenharmony_ciprocesso si svolge per poter esserne parte attiva. 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciIl quadro d'insieme 1962306a36Sopenharmony_ci------------------- 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciGli sviluppatori kernel utilizzano un calendario di rilascio generico, dove 2262306a36Sopenharmony_ciogni due o tre mesi viene effettuata un rilascio importante del kernel. 2362306a36Sopenharmony_ciI rilasci più recenti sono stati: 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci ====== ================= 2662306a36Sopenharmony_ci 5.0 3 marzo, 2019 2762306a36Sopenharmony_ci 5.1 5 maggio, 2019 2862306a36Sopenharmony_ci 5.2 7 luglio, 2019 2962306a36Sopenharmony_ci 5.3 15 settembre, 2019 3062306a36Sopenharmony_ci 5.4 24 novembre, 2019 3162306a36Sopenharmony_ci 5.5 6 gennaio, 2020 3262306a36Sopenharmony_ci ====== ================= 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciCiascun rilascio 5.x è un importante rilascio del kernel con nuove 3562306a36Sopenharmony_cifunzionalità, modifiche interne dell'API, e molto altro. Un tipico 3662306a36Sopenharmony_cirilascio contiene quasi 13,000 gruppi di modifiche con ulteriori 3762306a36Sopenharmony_cimodifiche a parecchie migliaia di linee di codice. La 5.x. è pertanto la 3862306a36Sopenharmony_cilinea di confine nello sviluppo del kernel Linux; il kernel utilizza un sistema 3962306a36Sopenharmony_cidi sviluppo continuo che integra costantemente nuove importanti modifiche. 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciViene seguita una disciplina abbastanza lineare per l'inclusione delle 4262306a36Sopenharmony_cipatch di ogni rilascio. All'inizio di ogni ciclo di sviluppo, la 4362306a36Sopenharmony_ci"finestra di inclusione" viene dichiarata aperta. In quel momento il codice 4462306a36Sopenharmony_ciritenuto sufficientemente stabile(e che è accettato dalla comunità di sviluppo) 4562306a36Sopenharmony_civiene incluso nel ramo principale del kernel. La maggior parte delle 4662306a36Sopenharmony_cipatch per un nuovo ciclo di sviluppo (e tutte le più importanti modifiche) 4762306a36Sopenharmony_cisaranno inserite durante questo periodo, ad un ritmo che si attesta sulle 4862306a36Sopenharmony_ci1000 modifiche ("patch" o "gruppo di modifiche") al giorno. 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci(per inciso, vale la pena notare che i cambiamenti integrati durante la 5162306a36Sopenharmony_ci"finestra di inclusione" non escono dal nulla; questi infatti, sono stati 5262306a36Sopenharmony_ciraccolti e, verificati in anticipo. Il funzionamento di tale procedimento 5362306a36Sopenharmony_civerrà descritto dettagliatamente più avanti). 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciLa finestra di inclusione resta attiva approssimativamente per due settimane. 5662306a36Sopenharmony_ciAl termine di questo periodo, Linus Torvald dichiarerà che la finestra è 5762306a36Sopenharmony_cichiusa e rilascerà il primo degli "rc" del kernel. 5862306a36Sopenharmony_ciPer il kernel che è destinato ad essere 5.6, per esempio, il rilascio 5962306a36Sopenharmony_ciche emerge al termine della finestra d'inclusione si chiamerà 5.6-rc1. 6062306a36Sopenharmony_ciQuesto rilascio indica che il momento di aggiungere nuovi componenti è 6162306a36Sopenharmony_cipassato, e che è iniziato il periodo di stabilizzazione del prossimo kernel. 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciNelle successive sei/dieci settimane, potranno essere sottoposte solo modifiche 6462306a36Sopenharmony_ciche vanno a risolvere delle problematiche. Occasionalmente potrà essere 6562306a36Sopenharmony_ciconsentita una modifica più consistente, ma tali occasioni sono rare. 6662306a36Sopenharmony_ciGli sviluppatori che tenteranno di aggiungere nuovi elementi al di fuori della 6762306a36Sopenharmony_cifinestra di inclusione, tendenzialmente, riceveranno un accoglienza poco 6862306a36Sopenharmony_ciamichevole. Come regola generale: se vi perdete la finestra di inclusione per 6962306a36Sopenharmony_ciun dato componente, la cosa migliore da fare è aspettare il ciclo di sviluppo 7062306a36Sopenharmony_cisuccessivo (un'eccezione può essere fatta per i driver per hardware non 7162306a36Sopenharmony_cisupportati in precedenza; se toccano codice non facente parte di quello 7262306a36Sopenharmony_ciattuale, che non causino regressioni e che potrebbero essere aggiunti in 7362306a36Sopenharmony_cisicurezza in un qualsiasi momento) 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciMentre le correzioni si aprono la loro strada all'interno del ramo principale, 7662306a36Sopenharmony_ciil ritmo delle modifiche rallenta col tempo. Linus rilascia un nuovo 7762306a36Sopenharmony_cikernel -rc circa una volta alla settimana; e ne usciranno circa 6 o 9 prima 7862306a36Sopenharmony_ciche il kernel venga considerato sufficientemente stabile e che il rilascio 7962306a36Sopenharmony_cifinale venga fatto. A quel punto tutto il processo ricomincerà. 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciEsempio: ecco com'è andato il ciclo di sviluppo della versione 5.4 8262306a36Sopenharmony_ci(tutte le date si collocano nel 2018) 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci ============== ======================================= 8662306a36Sopenharmony_ci 15 settembre 5.3 rilascio stabile 8762306a36Sopenharmony_ci 30 settembre 5.4-rc1, finestra di inclusione chiusa 8862306a36Sopenharmony_ci 6 ottobre 5.4-rc2 8962306a36Sopenharmony_ci 13 ottobre 5.4-rc3 9062306a36Sopenharmony_ci 20 ottobre 5.4-rc4 9162306a36Sopenharmony_ci 27 ottobre 5.4-rc5 9262306a36Sopenharmony_ci 3 novembre 5.4-rc6 9362306a36Sopenharmony_ci 10 novembre 5.4-rc7 9462306a36Sopenharmony_ci 17 novembre 5.4-rc8 9562306a36Sopenharmony_ci 24 novembre 5.4 rilascio stabile 9662306a36Sopenharmony_ci ============== ======================================= 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciIn che modo gli sviluppatori decidono quando chiudere il ciclo di sviluppo e 9962306a36Sopenharmony_cicreare quindi una rilascio stabile? Un metro valido è il numero di regressioni 10062306a36Sopenharmony_cirilevate nel precedente rilascio. Nessun baco è il benvenuto, ma quelli che 10162306a36Sopenharmony_ciprocurano problemi su sistemi che hanno funzionato in passato sono considerati 10262306a36Sopenharmony_ciparticolarmente seri. Per questa ragione, le modifiche che portano ad una 10362306a36Sopenharmony_ciregressione sono viste sfavorevolmente e verranno quasi sicuramente annullate 10462306a36Sopenharmony_cidurante il periodo di stabilizzazione. 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ciL'obiettivo degli sviluppatori è quello di aggiustare tutte le regressioni 10762306a36Sopenharmony_ciconosciute prima che avvenga il rilascio stabile. Nel mondo reale, questo 10862306a36Sopenharmony_citipo di perfezione difficilmente viene raggiunta; esistono troppe variabili 10962306a36Sopenharmony_ciin un progetto di questa portata. Arriva un punto dove ritardare il rilascio 11062306a36Sopenharmony_cifinale peggiora la situazione; la quantità di modifiche in attesa della 11162306a36Sopenharmony_ciprossima finestra di inclusione crescerà enormemente, creando ancor più 11262306a36Sopenharmony_ciregressioni al giro successivo. Quindi molti kernel 5.x escono con una 11362306a36Sopenharmony_cimanciata di regressioni delle quali, si spera, nessuna è grave. 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ciUna volta che un rilascio stabile è fatto, il suo costante mantenimento è 11662306a36Sopenharmony_ciaffidato al "squadra stabilità", attualmente composta da Greg Kroah-Hartman. 11762306a36Sopenharmony_ciQuesta squadra rilascia occasionalmente degli aggiornamenti relativi al 11862306a36Sopenharmony_cirilascio stabile usando la numerazione 5.x.y. Per essere presa in 11962306a36Sopenharmony_ciconsiderazione per un rilascio d'aggiornamento, una modifica deve: 12062306a36Sopenharmony_ci(1) correggere un baco importante (2) essere già inserita nel ramo principale 12162306a36Sopenharmony_ciper il prossimo sviluppo del kernel. Solitamente, passato il loro rilascio 12262306a36Sopenharmony_ciiniziale, i kernel ricevono aggiornamenti per più di un ciclo di sviluppo. 12362306a36Sopenharmony_ciQuindi, per esempio, la storia del kernel 5.2 appare così (anno 2019): 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci ============== =============================== 12662306a36Sopenharmony_ci 7 luglio 5.2 rilascio stabile 12762306a36Sopenharmony_ci 14 luglio 5.2.1 12862306a36Sopenharmony_ci 21 luglio 5.2.2 12962306a36Sopenharmony_ci 26 luglio 5.2.3 13062306a36Sopenharmony_ci 28 luglio 5.2.4 13162306a36Sopenharmony_ci 31 luglio 5.2.5 13262306a36Sopenharmony_ci ... ... 13362306a36Sopenharmony_ci 11 ottobre 5.2.21 13462306a36Sopenharmony_ci ============== =============================== 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ciLa 5.2.21 fu l'aggiornamento finale per la versione 5.2. 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ciAlcuni kernel sono destinati ad essere kernel a "lungo termine"; questi 13962306a36Sopenharmony_ciriceveranno assistenza per un lungo periodo di tempo. Consultate il seguente 14062306a36Sopenharmony_cicollegamento per avere la lista delle versioni attualmente supportate e i 14162306a36Sopenharmony_cirelativi manutentori: 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci https://www.kernel.org/category/releases.html 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ciQuesta selezione di kernel di lungo periodo sono puramente dovuti ai loro 14662306a36Sopenharmony_cimanutentori, alla loro necessità e al tempo per tenere aggiornate proprio 14762306a36Sopenharmony_ciquelle versioni. Non ci sono altri kernel a lungo termine in programma per 14862306a36Sopenharmony_cialcun rilascio in arrivo. 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ciIl ciclo di vita di una patch 15162306a36Sopenharmony_ci----------------------------- 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ciLe patch non passano direttamente dalla tastiera dello sviluppatori 15462306a36Sopenharmony_cial ramo principale del kernel. Esiste, invece, una procedura disegnata 15562306a36Sopenharmony_ciper assicurare che ogni patch sia di buona qualità e desiderata nel 15662306a36Sopenharmony_ciramo principale. Questo processo avviene velocemente per le correzioni 15762306a36Sopenharmony_cimeno importanti, o, nel caso di patch ampie e controverse, va avanti per anni. 15862306a36Sopenharmony_ciPer uno sviluppatore la maggior frustrazione viene dalla mancanza di 15962306a36Sopenharmony_cicomprensione di questo processo o dai tentativi di aggirarlo. 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ciNella speranza di ridurre questa frustrazione, questo documento spiegherà 16262306a36Sopenharmony_cicome una patch viene inserita nel kernel. Ciò che segue è un'introduzione 16362306a36Sopenharmony_ciche descrive il processo ideale. Approfondimenti verranno invece trattati 16462306a36Sopenharmony_cipiù avanti. 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ciUna patch attraversa, generalmente, le seguenti fasi: 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci - Progetto. In questa fase sono stabilite quelli che sono i requisiti 16962306a36Sopenharmony_ci della modifica - e come verranno soddisfatti. Il lavoro di progettazione 17062306a36Sopenharmony_ci viene spesso svolto senza coinvolgere la comunità, ma è meglio renderlo 17162306a36Sopenharmony_ci il più aperto possibile; questo può far risparmiare molto tempo evitando 17262306a36Sopenharmony_ci eventuali riprogettazioni successive. 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci - Prima revisione. Le patch vengono pubblicate sulle liste di discussione 17562306a36Sopenharmony_ci interessate, e gli sviluppatori in quella lista risponderanno coi loro 17662306a36Sopenharmony_ci commenti. Se si svolge correttamente, questo procedimento potrebbe far 17762306a36Sopenharmony_ci emergere problemi rilevanti in una patch. 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci - Revisione più ampia. Quando la patch è quasi pronta per essere inserita 18062306a36Sopenharmony_ci nel ramo principale, un manutentore importante del sottosistema dovrebbe 18162306a36Sopenharmony_ci accettarla - anche se, questa accettazione non è una garanzia che la 18262306a36Sopenharmony_ci patch arriverà nel ramo principale. La patch sarà visibile nei sorgenti 18362306a36Sopenharmony_ci del sottosistema in questione e nei sorgenti -next (descritti sotto). 18462306a36Sopenharmony_ci Quando il processo va a buon fine, questo passo porta ad una revisione 18562306a36Sopenharmony_ci più estesa della patch e alla scoperta di problemi d'integrazione 18662306a36Sopenharmony_ci con il lavoro altrui. 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci- Per favore, tenete da conto che la maggior parte dei manutentori ha 18962306a36Sopenharmony_ci anche un lavoro quotidiano, quindi integrare le vostre patch potrebbe 19062306a36Sopenharmony_ci non essere la loro priorità più alta. Se una vostra patch riceve 19162306a36Sopenharmony_ci dei suggerimenti su dei cambiamenti necessari, dovreste applicare 19262306a36Sopenharmony_ci quei cambiamenti o giustificare perché non sono necessari. Se la vostra 19362306a36Sopenharmony_ci patch non riceve alcuna critica ma non è stata integrata dal 19462306a36Sopenharmony_ci manutentore del driver o sottosistema, allora dovreste continuare con 19562306a36Sopenharmony_ci i necessari aggiornamenti per mantenere la patch aggiornata al kernel 19662306a36Sopenharmony_ci più recente cosicché questa possa integrarsi senza problemi; continuate 19762306a36Sopenharmony_ci ad inviare gli aggiornamenti per essere revisionati e integrati. 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci - Inclusione nel ramo principale. Eventualmente, una buona patch verrà 20062306a36Sopenharmony_ci inserita all'interno nel repositorio principale, gestito da 20162306a36Sopenharmony_ci Linus Torvalds. In questa fase potrebbero emergere nuovi problemi e/o 20262306a36Sopenharmony_ci commenti; è importante che lo sviluppatore sia collaborativo e che sistemi 20362306a36Sopenharmony_ci ogni questione che possa emergere. 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci - Rilascio stabile. Ora, il numero di utilizzatori che sono potenzialmente 20662306a36Sopenharmony_ci toccati dalla patch è aumentato, quindi, ancora una volta, potrebbero 20762306a36Sopenharmony_ci emergere nuovi problemi. 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci - Manutenzione di lungo periodo. Nonostante sia possibile che uno sviluppatore 21062306a36Sopenharmony_ci si dimentichi del codice dopo la sua integrazione, questo comportamento 21162306a36Sopenharmony_ci lascia una brutta impressione nella comunità di sviluppo. Integrare il 21262306a36Sopenharmony_ci codice elimina alcuni degli oneri facenti parte della manutenzione, in 21362306a36Sopenharmony_ci particolare, sistemerà le problematiche causate dalle modifiche all'API. 21462306a36Sopenharmony_ci Ma lo sviluppatore originario dovrebbe continuare ad assumersi la 21562306a36Sopenharmony_ci responsabilità per il codice se quest'ultimo continua ad essere utile 21662306a36Sopenharmony_ci nel lungo periodo. 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ciUno dei più grandi errori fatti dagli sviluppatori kernel (o dai loro datori 21962306a36Sopenharmony_cidi lavoro) è quello di cercare di ridurre tutta la procedura ad una singola 22062306a36Sopenharmony_ci"integrazione nel remo principale". Questo approccio inevitabilmente conduce 22162306a36Sopenharmony_cia una condizione di frustrazione per tutti coloro che sono coinvolti. 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ciCome le modifiche finiscono nel Kernel 22462306a36Sopenharmony_ci-------------------------------------- 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ciEsiste una sola persona che può inserire le patch nel repositorio principale 22762306a36Sopenharmony_cidel kernel: Linus Torvalds. Ma, per esempio, di tutte le 9500 patch 22862306a36Sopenharmony_ciche entrarono nella versione 2.6.38 del kernel, solo 112 (circa 22962306a36Sopenharmony_cil'1,3%) furono scelte direttamente da Linus in persona. Il progetto 23062306a36Sopenharmony_cidel kernel è cresciuto fino a raggiungere una dimensione tale per cui 23162306a36Sopenharmony_ciun singolo sviluppatore non può controllare e selezionare 23262306a36Sopenharmony_ciindipendentemente ogni modifica senza essere supportato. La via 23362306a36Sopenharmony_ciscelta dagli sviluppatori per indirizzare tale crescita è stata quella 23462306a36Sopenharmony_cidi utilizzare un sistema di "sottotenenti" basato sulla fiducia. 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ciIl codice base del kernel è spezzato in una serie si sottosistemi: rete, 23762306a36Sopenharmony_cisupporto per specifiche architetture, gestione della memoria, video e 23862306a36Sopenharmony_cistrumenti, etc. Molti sottosistemi hanno un manutentore designato: ovvero uno 23962306a36Sopenharmony_cisviluppatore che ha piena responsabilità di tutto il codice presente in quel 24062306a36Sopenharmony_cisottosistema. Tali manutentori di sottosistema sono i guardiani 24162306a36Sopenharmony_ci(in un certo senso) della parte di kernel che gestiscono; sono coloro che 24262306a36Sopenharmony_ci(solitamente) accetteranno una patch per l'inclusione nel ramo principale 24362306a36Sopenharmony_cidel kernel. 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ciI manutentori di sottosistema gestiscono ciascuno la propria parte dei sorgenti 24662306a36Sopenharmony_cidel kernel, utilizzando abitualmente (ma certamente non sempre) git. 24762306a36Sopenharmony_ciStrumenti come git (e affini come quilt o mercurial) permettono ai manutentori 24862306a36Sopenharmony_cidi stilare una lista delle patch, includendo informazioni sull'autore ed 24962306a36Sopenharmony_cialtri metadati. In ogni momento, il manutentore può individuare quale patch 25062306a36Sopenharmony_cinel sua repositorio non si trova nel ramo principale. 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ciQuando la "finestra di integrazione" si apre, i manutentori di alto livello 25362306a36Sopenharmony_cichiederanno a Linus di "prendere" dai loro repositori le modifiche che hanno 25462306a36Sopenharmony_ciselezionato per l'inclusione. Se Linus acconsente, il flusso di patch si 25562306a36Sopenharmony_ciconvoglierà nel repositorio di quest ultimo, divenendo così parte del ramo 25662306a36Sopenharmony_ciprincipale del kernel. La quantità d'attenzione che Linus presta alle 25762306a36Sopenharmony_cisingole patch ricevute durante l'operazione di integrazione varia. 25862306a36Sopenharmony_ciÈ chiaro che, qualche volta, guardi più attentamente. Ma, come regola 25962306a36Sopenharmony_cigenerale, Linus confida nel fatto che i manutentori di sottosistema non 26062306a36Sopenharmony_ciselezionino pessime patch. 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ciI manutentori di sottosistemi, a turno, possono "prendere" patch 26362306a36Sopenharmony_ciprovenienti da altri manutentori. Per esempio, i sorgenti per la rete rete 26462306a36Sopenharmony_cisono costruiti da modifiche che si sono accumulate inizialmente nei sorgenti 26562306a36Sopenharmony_cidedicati ai driver per dispositivi di rete, rete senza fili, ecc. Tale 26662306a36Sopenharmony_cicatena di repositori può essere più o meno lunga, benché raramente ecceda 26762306a36Sopenharmony_cii due o tre collegamenti. Questo processo è conosciuto come 26862306a36Sopenharmony_ci"la catena della fiducia", perché ogni manutentore all'interno della 26962306a36Sopenharmony_cicatena si fida di coloro che gestiscono i livelli più bassi. 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ciChiaramente, in un sistema come questo, l'inserimento delle patch all'interno 27262306a36Sopenharmony_cidel kernel si basa sul trovare il manutentore giusto. Di norma, inviare 27362306a36Sopenharmony_cipatch direttamente a Linus non è la via giusta. 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ciSorgenti -next 27762306a36Sopenharmony_ci-------------- 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ciLa catena di sottosistemi guida il flusso di patch all'interno del kernel, 28062306a36Sopenharmony_cima solleva anche un interessante quesito: se qualcuno volesse vedere tutte le 28162306a36Sopenharmony_cipatch pronte per la prossima finestra di integrazione? 28262306a36Sopenharmony_ciGli sviluppatori si interesseranno alle patch in sospeso per verificare 28362306a36Sopenharmony_ciche non ci siano altri conflitti di cui preoccuparsi; una modifica che, per 28462306a36Sopenharmony_ciesempio, cambia il prototipo di una funzione fondamentale del kernel andrà in 28562306a36Sopenharmony_ciconflitto con qualsiasi altra modifica che utilizzi la vecchia versione di 28662306a36Sopenharmony_ciquella funzione. Revisori e tester vogliono invece avere accesso alle 28762306a36Sopenharmony_cimodifiche nella loro totalità prima che approdino nel ramo principale del 28862306a36Sopenharmony_cikernel. Uno potrebbe prendere le patch provenienti da tutti i sottosistemi 28962306a36Sopenharmony_cid'interesse, ma questo sarebbe un lavoro enorme e fallace. 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ciLa risposta ci viene sotto forma di sorgenti -next, dove i sottosistemi sono 29262306a36Sopenharmony_ciraccolti per essere testati e controllati. Il più vecchio di questi sorgenti, 29362306a36Sopenharmony_cigestito da Andrew Morton, è chiamato "-mm" (memory management, che è l'inizio 29462306a36Sopenharmony_cidi tutto). L'-mm integra patch proveniente da una lunga lista di sottosistemi; 29562306a36Sopenharmony_cie ha, inoltre, alcune patch destinate al supporto del debugging. 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ciOltre a questo, -mm contiene una raccolta significativa di patch che sono 29862306a36Sopenharmony_cistate selezionate da Andrew direttamente. Queste patch potrebbero essere 29962306a36Sopenharmony_cistate inviate in una lista di discussione, o possono essere applicate ad una 30062306a36Sopenharmony_ciparte del kernel per la quale non esiste un sottosistema dedicato. 30162306a36Sopenharmony_ciDi conseguenza, -mm opera come una specie di sottosistema "ultima spiaggia"; 30262306a36Sopenharmony_cise per una patch non esiste una via chiara per entrare nel ramo principale, 30362306a36Sopenharmony_ciallora è probabile che finirà in -mm. Le patch passate per -mm 30462306a36Sopenharmony_cieventualmente finiranno nel sottosistema più appropriato o saranno inviate 30562306a36Sopenharmony_cidirettamente a Linus. In un tipico ciclo di sviluppo, circa il 5-10% delle 30662306a36Sopenharmony_cipatch andrà nel ramo principale attraverso -mm. 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ciLa patch -mm correnti sono disponibili nella cartella "mmotm" (-mm of 30962306a36Sopenharmony_cithe moment) all'indirizzo: 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci http://www.ozlabs.org/~akpm/mmotm/ 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ciÈ molto probabile che l'uso dei sorgenti MMOTM diventi un'esperienza 31462306a36Sopenharmony_cifrustrante; ci sono buone probabilità che non compili nemmeno. 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ciI sorgenti principali per il prossimo ciclo d'integrazione delle patch 31762306a36Sopenharmony_ciè linux-next, gestito da Stephen Rothwell. I sorgenti linux-next sono, per 31862306a36Sopenharmony_cidefinizione, un'istantanea di come dovrà apparire il ramo principale dopo che 31962306a36Sopenharmony_cila prossima finestra di inclusione si chiuderà. I linux-next sono annunciati 32062306a36Sopenharmony_cisulla lista di discussione linux-kernel e linux-next nel momento in cui 32162306a36Sopenharmony_civengono assemblati; e possono essere scaricate da: 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci http://www.kernel.org/pub/linux/kernel/next/ 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ciLinux-next è divenuto parte integrante del processo di sviluppo del kernel; 32662306a36Sopenharmony_citutte le patch incorporate durante una finestra di integrazione dovrebbero 32762306a36Sopenharmony_ciaver trovato la propria strada in linux-next, a volte anche prima dell'apertura 32862306a36Sopenharmony_cidella finestra di integrazione. 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ciSorgenti in preparazione 33262306a36Sopenharmony_ci------------------------ 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ciNei sorgenti del kernel esiste la cartella drivers/staging/, dove risiedono 33562306a36Sopenharmony_cimolte sotto-cartelle per i driver o i filesystem che stanno per essere aggiunti 33662306a36Sopenharmony_cial kernel. Questi restano nella cartella drivers/staging fintanto che avranno 33762306a36Sopenharmony_cibisogno di maggior lavoro; una volta completato, possono essere spostate 33862306a36Sopenharmony_ciall'interno del kernel nel posto più appropriato. Questo è il modo di tener 33962306a36Sopenharmony_citraccia dei driver che non sono ancora in linea con gli standard di codifica 34062306a36Sopenharmony_cio qualità, ma che le persone potrebbero voler usare ugualmente e tracciarne 34162306a36Sopenharmony_cilo sviluppo. 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ciGreg Kroah-Hartman attualmente gestisce i sorgenti in preparazione. I driver 34462306a36Sopenharmony_ciche non sono completamente pronti vengono inviati a lui, e ciascun driver avrà 34562306a36Sopenharmony_cila propria sotto-cartella in drivers/staging/. Assieme ai file sorgenti 34662306a36Sopenharmony_cidei driver, dovrebbe essere presente nella stessa cartella anche un file TODO. 34762306a36Sopenharmony_ciIl file TODO elenca il lavoro ancora da fare su questi driver per poter essere 34862306a36Sopenharmony_ciaccettati nel kernel, e indica anche la lista di persone da inserire in copia 34962306a36Sopenharmony_ciconoscenza per ogni modifica fatta. Le regole attuali richiedono che i 35062306a36Sopenharmony_cidriver debbano, come minimo, compilare adeguatamente. 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ciLa *preparazione* può essere una via relativamente facile per inserire nuovi 35362306a36Sopenharmony_cidriver all'interno del ramo principale, dove, con un po' di fortuna, saranno 35462306a36Sopenharmony_cinotati da altri sviluppatori e migliorati velocemente. Entrare nella fase 35562306a36Sopenharmony_cidi preparazione non è però la fine della storia, infatti, il codice che si 35662306a36Sopenharmony_citrova nella cartella staging che non mostra regolari progressi potrebbe 35762306a36Sopenharmony_ciessere rimosso. Le distribuzioni, inoltre, tendono a dimostrarsi relativamente 35862306a36Sopenharmony_ciriluttanti nell'attivare driver in preparazione. Quindi lo preparazione è, 35962306a36Sopenharmony_cinel migliore dei casi, una tappa sulla strada verso il divenire un driver 36062306a36Sopenharmony_cidel ramo principale. 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci 36362306a36Sopenharmony_ciStrumenti 36462306a36Sopenharmony_ci--------- 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ciCome è possibile notare dal testo sopra, il processo di sviluppo del kernel 36762306a36Sopenharmony_cidipende pesantemente dalla capacità di guidare la raccolta di patch in 36862306a36Sopenharmony_cidiverse direzioni. L'intera cosa non funzionerebbe se non venisse svolta 36962306a36Sopenharmony_cicon l'uso di strumenti appropriati e potenti. Spiegare l'uso di tali 37062306a36Sopenharmony_cistrumenti non è lo scopo di questo documento, ma c'è spazio per alcuni 37162306a36Sopenharmony_ciconsigli. 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ciIn assoluto, nella comunità del kernel, predomina l'uso di git come sistema 37462306a36Sopenharmony_cidi gestione dei sorgenti. Git è una delle diverse tipologie di sistemi 37562306a36Sopenharmony_cidistribuiti di controllo versione che sono stati sviluppati nella comunità 37662306a36Sopenharmony_cidel software libero. Esso è calibrato per lo sviluppo del kernel, e si 37762306a36Sopenharmony_cicomporta abbastanza bene quando ha a che fare con repositori grandi e con un 37862306a36Sopenharmony_civasto numero di patch. Git ha inoltre la reputazione di essere difficile 37962306a36Sopenharmony_cida imparare e utilizzare, benché stia migliorando. Agli sviluppatori 38062306a36Sopenharmony_cidel kernel viene richiesta un po' di familiarità con git; anche se non lo 38162306a36Sopenharmony_ciutilizzano per il proprio lavoro, hanno bisogno di git per tenersi al passo 38262306a36Sopenharmony_cicon il lavoro degli altri sviluppatori (e con il ramo principale). 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ciGit è ora compreso in quasi tutte le distribuzioni Linux. Esiste una sito che 38562306a36Sopenharmony_cipotete consultare: 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ci http://git-scm.com/ 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ciQui troverete i riferimenti alla documentazione e alle guide passo-passo. 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ciTra gli sviluppatori Kernel che non usano git, la scelta alternativa più 39262306a36Sopenharmony_cipopolare è quasi sicuramente Mercurial: 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci http://www.selenic.com/mercurial/ 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ciMercurial condivide diverse caratteristiche con git, ma fornisce 39762306a36Sopenharmony_ciun'interfaccia che potrebbe risultare più semplice da utilizzare. 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ciL'altro strumento che vale la pena conoscere è Quilt: 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci http://savannah.nongnu.org/projects/quilt/ 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ciQuilt è un sistema di gestione delle patch, piuttosto che un sistema 40562306a36Sopenharmony_cidi gestione dei sorgenti. Non mantiene uno storico degli eventi; ma piuttosto 40662306a36Sopenharmony_ciè orientato verso il tracciamento di uno specifico insieme di modifiche 40762306a36Sopenharmony_cirispetto ad un codice in evoluzione. Molti dei più grandi manutentori di 40862306a36Sopenharmony_cisottosistema utilizzano quilt per gestire le patch che dovrebbero essere 40962306a36Sopenharmony_ciintegrate. Per la gestione di certe tipologie di sorgenti (-mm, per esempio), 41062306a36Sopenharmony_ciquilt è il miglior strumento per svolgere il lavoro. 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ci 41362306a36Sopenharmony_ciListe di discussione 41462306a36Sopenharmony_ci-------------------- 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_ciUna grossa parte del lavoro di sviluppo del Kernel Linux viene svolto tramite 41762306a36Sopenharmony_cile liste di discussione. È difficile essere un membro della comunità 41862306a36Sopenharmony_cipienamente coinvolto se non si partecipa almeno ad una lista da qualche 41962306a36Sopenharmony_ciparte. Ma, le liste di discussione di Linux rappresentano un potenziale 42062306a36Sopenharmony_ciproblema per gli sviluppatori, che rischiano di venir sepolti da un mare di 42162306a36Sopenharmony_ciemail, restare incagliati nelle convenzioni in vigore nelle liste Linux, 42262306a36Sopenharmony_cio entrambi. 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ciMolte delle liste di discussione del Kernel girano su vger.kernel.org; 42562306a36Sopenharmony_cil'elenco principale lo si trova sul sito: 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ci http://vger.kernel.org/vger-lists.html 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_ciEsistono liste gestite altrove; un certo numero di queste sono in 43062306a36Sopenharmony_ciredhat.com/mailman/listinfo. 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ciLa lista di discussione principale per lo sviluppo del kernel è, ovviamente, 43362306a36Sopenharmony_cilinux-kernel. Questa lista è un luogo ostile dove trovarsi; i volumi possono 43462306a36Sopenharmony_ciraggiungere i 500 messaggi al giorno, la quantità di "rumore" è elevata, 43562306a36Sopenharmony_cila conversazione può essere strettamente tecnica e i partecipanti non sono 43662306a36Sopenharmony_cisempre preoccupati di mostrare un alto livello di educazione. Ma non esiste 43762306a36Sopenharmony_cialtro luogo dove la comunità di sviluppo del kernel si unisce per intero; 43862306a36Sopenharmony_cigli sviluppatori che evitano tale lista si perderanno informazioni importanti. 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_ciCi sono alcuni consigli che possono essere utili per sopravvivere a 44162306a36Sopenharmony_cilinux-kernel: 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci- Tenete la lista in una cartella separata, piuttosto che inserirla nella 44462306a36Sopenharmony_ci casella di posta principale. Così da essere in grado di ignorare il flusso 44562306a36Sopenharmony_ci di mail per un certo periodo di tempo. 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ci- Non cercate di seguire ogni conversazione - nessuno lo fa. È importante 44862306a36Sopenharmony_ci filtrare solo gli argomenti d'interesse (sebbene va notato che le 44962306a36Sopenharmony_ci conversazioni di lungo periodo possono deviare dall'argomento originario 45062306a36Sopenharmony_ci senza cambiare il titolo della mail) e le persone che stanno partecipando. 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci- Non alimentate i troll. Se qualcuno cerca di creare nervosismo, ignoratelo. 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ci- Quando rispondete ad una mail linux-kernel (o ad altre liste) mantenete 45562306a36Sopenharmony_ci tutti i Cc:. In assenza di importanti motivazioni (come una richiesta 45662306a36Sopenharmony_ci esplicita), non dovreste mai togliere destinatari. Assicuratevi sempre che 45762306a36Sopenharmony_ci la persona alla quale state rispondendo sia presente nella lista Cc. Questa 45862306a36Sopenharmony_ci usanza fa si che divenga inutile chiedere esplicitamente di essere inseriti 45962306a36Sopenharmony_ci in copia nel rispondere al vostro messaggio. 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci- Cercate nell'archivio della lista (e nella rete nella sua totalità) prima 46262306a36Sopenharmony_ci di far domande. Molti sviluppatori possono divenire impazienti con le 46362306a36Sopenharmony_ci persone che chiaramente non hanno svolto i propri compiti a casa. 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_ci- Evitate il *top-posting* (cioè la pratica di mettere la vostra risposta sopra 46662306a36Sopenharmony_ci alla frase alla quale state rispondendo). Ciò renderebbe la vostra risposta 46762306a36Sopenharmony_ci difficile da leggere e genera scarsa impressione. 46862306a36Sopenharmony_ci 46962306a36Sopenharmony_ci- Chiedete nella lista di discussione corretta. Linux-kernel può essere un 47062306a36Sopenharmony_ci punto di incontro generale, ma non è il miglior posto dove trovare 47162306a36Sopenharmony_ci sviluppatori da tutti i sottosistemi. 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_ciInfine, la ricerca della corretta lista di discussione è uno degli errori più 47462306a36Sopenharmony_cicomuni per gli sviluppatori principianti. Qualcuno che pone una domanda 47562306a36Sopenharmony_cirelativa alla rete su linux-kernel riceverà quasi certamente il suggerimento 47662306a36Sopenharmony_cidi chiedere sulla lista netdev, che è la lista frequentata dagli sviluppatori 47762306a36Sopenharmony_cidi rete. Ci sono poi altre liste per i sottosistemi SCSI, video4linux, IDE, 47862306a36Sopenharmony_cifilesystem, etc. Il miglior posto dove cercare una lista di discussione è il 47962306a36Sopenharmony_cifile MAINTAINERS che si trova nei sorgenti del kernel. 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ciIniziare con lo sviluppo del Kernel 48262306a36Sopenharmony_ci----------------------------------- 48362306a36Sopenharmony_ci 48462306a36Sopenharmony_ciSono comuni le domande sul come iniziare con lo sviluppo del kernel - sia da 48562306a36Sopenharmony_cisingole persone che da aziende. Altrettanto comuni sono i passi falsi che 48662306a36Sopenharmony_cirendono l'inizio di tale relazione più difficile di quello che dovrebbe essere. 48762306a36Sopenharmony_ci 48862306a36Sopenharmony_ciLe aziende spesso cercano di assumere sviluppatori noti per creare un gruppo 48962306a36Sopenharmony_cidi sviluppo iniziale. Questo, in effetti, può essere una tecnica efficace. 49062306a36Sopenharmony_ciMa risulta anche essere dispendiosa e non va ad accrescere il bacino di 49162306a36Sopenharmony_cisviluppatori kernel con esperienza. È possibile anche "portare a casa" 49262306a36Sopenharmony_cisviluppatori per accelerare lo sviluppo del kernel, dando comunque 49362306a36Sopenharmony_ciall'investimento un po' di tempo. Prendersi questo tempo può fornire 49462306a36Sopenharmony_cial datore di lavoro un gruppo di sviluppatori che comprendono sia il kernel 49562306a36Sopenharmony_ciche l'azienda stessa, e che possono supportare la formazione di altre persone. 49662306a36Sopenharmony_ciNel medio periodo, questa è spesso uno delle soluzioni più proficue. 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_ciI singoli sviluppatori sono spesso, comprensibilmente, una perdita come punto 49962306a36Sopenharmony_cidi partenza. Iniziare con un grande progetto può rivelarsi intimidatorio; 50062306a36Sopenharmony_cispesso all'inizio si vuole solo verificare il terreno con qualcosa di piccolo. 50162306a36Sopenharmony_ciQuesta è una delle motivazioni per le quali molti sviluppatori saltano alla 50262306a36Sopenharmony_cicreazione di patch che vanno a sistemare errori di battitura o 50362306a36Sopenharmony_ciproblematiche minori legate allo stile del codice. Sfortunatamente, tali 50462306a36Sopenharmony_cipatch creano un certo livello di rumore che distrae l'intera comunità di 50562306a36Sopenharmony_cisviluppo, quindi, sempre di più, esse vengono degradate. I nuovi sviluppatori 50662306a36Sopenharmony_ciche desiderano presentarsi alla comunità non riceveranno l'accoglienza 50762306a36Sopenharmony_ciche vorrebbero con questi mezzi. 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ciAndrew Morton da questo consiglio agli aspiranti sviluppatori kernel 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_ci:: 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci Il primo progetto per un neofita del kernel dovrebbe essere 51462306a36Sopenharmony_ci sicuramente quello di "assicurarsi che il kernel funzioni alla 51562306a36Sopenharmony_ci perfezione sempre e su tutte le macchine sulle quali potete stendere 51662306a36Sopenharmony_ci la vostra mano". Solitamente il modo per fare ciò è quello di 51762306a36Sopenharmony_ci collaborare con gli altri nel sistemare le cose (questo richiede 51862306a36Sopenharmony_ci persistenza!) ma va bene - è parte dello sviluppo kernel. 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ci(http://lwn.net/Articles/283982/). 52162306a36Sopenharmony_ci 52262306a36Sopenharmony_ciIn assenza di problemi ovvi da risolvere, si consiglia agli sviluppatori 52362306a36Sopenharmony_cidi consultare, in generale, la lista di regressioni e di bachi aperti. 52462306a36Sopenharmony_ciNon c'è mai carenza di problematiche bisognose di essere sistemate; 52562306a36Sopenharmony_ciaccollandosi tali questioni gli sviluppatori accumuleranno esperienza con 52662306a36Sopenharmony_cila procedura, ed allo stesso tempo, aumenteranno la loro rispettabilità 52762306a36Sopenharmony_ciall'interno della comunità di sviluppo. 528