1edba5eecSFederico Vaga.. include:: ../disclaimer-ita.rst
2edba5eecSFederico Vaga
3edba5eecSFederico Vaga:Original: :ref:`Documentation/process/7.AdvancedTopics.rst <development_advancedtopics>`
4fdf0345eSFederico Vaga:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
5edba5eecSFederico Vaga
6edba5eecSFederico Vaga.. _it_development_advancedtopics:
7edba5eecSFederico Vaga
8edba5eecSFederico VagaArgomenti avanzati
9edba5eecSFederico Vaga==================
10edba5eecSFederico Vaga
11fdf0345eSFederico VagaA questo punto, si spera, dovreste avere un'idea su come funziona il processo
12fdf0345eSFederico Vagadi sviluppo.  Ma rimane comunque molto da imparare!  Questo capitolo copre
13fdf0345eSFederico Vagaalcuni argomenti che potrebbero essere utili per gli sviluppatori che stanno
14fdf0345eSFederico Vagaper diventare parte integrante del processo di sviluppo del kernel.
15edba5eecSFederico Vaga
16fdf0345eSFederico VagaGestire le modifiche con git
17fdf0345eSFederico Vaga-----------------------------
18fdf0345eSFederico Vaga
19fdf0345eSFederico VagaL'uso di un sistema distribuito per il controllo delle versioni del kernel
20fdf0345eSFederico Vagaebbe iniziò nel 2002 quando Linux iniziò a provare il programma proprietario
21fdf0345eSFederico VagaBitKeeper.  Nonostante l'uso di BitKeeper fosse opinabile, di certo il suo
22fdf0345eSFederico Vagaapproccio alla gestione dei sorgenti non lo era.  Un sistema distribuito per
23fdf0345eSFederico Vagail controllo delle versioni accelerò immediatamente lo sviluppo del kernel.
24fdf0345eSFederico VagaOggigiorno, ci sono diverse alternative libere a BitKeeper.  Per il meglio o il
25fdf0345eSFederico Vagapeggio, il progetto del kernel ha deciso di usare git per gestire i sorgenti.
26fdf0345eSFederico Vaga
27fdf0345eSFederico VagaGestire le modifiche con git può rendere la vita dello sviluppatore molto
28fdf0345eSFederico Vagapiù facile, specialmente quando il volume delle modifiche cresce.
29fdf0345eSFederico VagaGit ha anche i suoi lati taglienti che possono essere pericolosi; è uno
30fdf0345eSFederico Vagastrumento giovane e potente che è ancora in fase di civilizzazione da parte
31fdf0345eSFederico Vagadei suoi sviluppatori.  Questo documento non ha lo scopo di insegnare l'uso
32fdf0345eSFederico Vagadi git ai suoi lettori; ci sarebbe materiale a sufficienza per un lungo
33fdf0345eSFederico Vagadocumento al riguardo.  Invece, qui ci concentriamo in particolare su come
34fdf0345eSFederico Vagagit è parte del processo di sviluppo del kernel.  Gli sviluppatori che
35fdf0345eSFederico Vagadesiderassero diventare agili con git troveranno più informazioni ai
36fdf0345eSFederico Vagaseguenti indirizzi:
37fdf0345eSFederico Vaga
383760fe20SFederico Vaga	https://git-scm.com/
39fdf0345eSFederico Vaga
403760fe20SFederico Vaga	https://www.kernel.org/pub/software/scm/git/docs/user-manual.html
41fdf0345eSFederico Vaga
42fdf0345eSFederico Vagae su varie guide che potrete trovare su internet.
43fdf0345eSFederico Vaga
44fdf0345eSFederico VagaLa prima cosa da fare prima di usarlo per produrre patch che saranno
45fdf0345eSFederico Vagadisponibili ad altri, è quella di leggere i siti qui sopra e di acquisire una
46fdf0345eSFederico Vagabase solida su come funziona git.  Uno sviluppatore che sappia usare git
47fdf0345eSFederico Vagadovrebbe essere capace di ottenere una copia del repositorio principale,
48fdf0345eSFederico Vagaesplorare la storia della revisione, registrare le modifiche, usare i rami,
49fdf0345eSFederico Vagaeccetera.  Una certa comprensione degli strumenti git per riscrivere la storia
50fdf0345eSFederico Vaga(come ``rebase``) è altrettanto utile.  Git ha i propri concetti e la propria
51fdf0345eSFederico Vagaterminologia; un nuovo utente dovrebbe conoscere *refs*, *remote branch*,
52fdf0345eSFederico Vaga*index*, *fast-forward merge*, *push* e *pull*, *detached head*, eccetera.
53fdf0345eSFederico VagaIl tutto potrebbe essere un po' intimidatorio visto da fuori, ma con un po'
54fdf0345eSFederico Vagadi studio i concetti non saranno così difficili da capire.
55fdf0345eSFederico Vaga
56fdf0345eSFederico VagaUtilizzare git per produrre patch da sottomettere via email può essere
57fdf0345eSFederico Vagaun buon esercizio da fare mentre si sta prendendo confidenza con lo strumento.
58fdf0345eSFederico Vaga
59fdf0345eSFederico VagaQuando sarete in grado di creare rami git che siano guardabili da altri,
60fdf0345eSFederico Vagavi servirà, ovviamente, un server dal quale sia possibile attingere le vostre
61fdf0345eSFederico Vagamodifiche.  Se avete un server accessibile da Internet, configurarlo per
62fdf0345eSFederico Vagaeseguire git-daemon è relativamente semplice .  Altrimenti, iniziano a
63fdf0345eSFederico Vagasvilupparsi piattaforme che offrono spazi pubblici, e gratuiti (Github,
64fdf0345eSFederico Vagaper esempio).  Gli sviluppatori permanenti possono ottenere un account
65fdf0345eSFederico Vagasu kernel.org, ma non è proprio facile da ottenere; per maggiori informazioni
663760fe20SFederico Vagaconsultate la pagina web https://kernel.org/faq/.
67fdf0345eSFederico Vaga
68fdf0345eSFederico VagaIn git è normale avere a che fare con tanti rami.  Ogni linea di sviluppo
69fdf0345eSFederico Vagapuò essere separata in "rami per argomenti" e gestiti indipendentemente.
70fdf0345eSFederico VagaIn git i rami sono facilissimi, per cui non c'è motivo per non usarli
71fdf0345eSFederico Vagain libertà.  In ogni caso, non dovreste sviluppare su alcun ramo dal
72fdf0345eSFederico Vagaquale altri potrebbero attingere.  I rami disponibili pubblicamente dovrebbero
73fdf0345eSFederico Vagaessere creati con attenzione; integrate patch dai rami di sviluppo
74fdf0345eSFederico Vagasolo quando sono complete e pronte ad essere consegnate - non prima.
75fdf0345eSFederico Vaga
76fdf0345eSFederico VagaGit offre alcuni strumenti che vi permettono di riscrivere la storia del
77fdf0345eSFederico Vagavostro sviluppo.  Una modifica errata (diciamo, una che rompe la bisezione,
78fdf0345eSFederico Vagaoppure che ha un qualche tipo di baco evidente) può essere corretta sul posto
79fdf0345eSFederico Vagao fatta sparire completamente dalla storia.  Una serie di patch può essere
80fdf0345eSFederico Vagariscritta come se fosse stata scritta in cima al ramo principale di oggi,
81fdf0345eSFederico Vagaanche se ci avete lavorato per mesi.  Le modifiche possono essere spostate
82fdf0345eSFederico Vagain modo trasparente da un ramo ad un altro.  E così via.  Un uso giudizioso
83fdf0345eSFederico Vagadi git per revisionare la storia può aiutare nella creazione di una serie
84fdf0345eSFederico Vagadi patch pulite e con meno problemi.
85fdf0345eSFederico Vaga
86fdf0345eSFederico VagaUn uso eccessivo può portare ad altri tipi di problemi, tuttavia, oltre
87fdf0345eSFederico Vagaalla semplice ossessione per la creazione di una storia del progetto che sia
88fdf0345eSFederico Vagaperfetta.  Riscrivere la storia riscriverà le patch contenute in quella
89fdf0345eSFederico Vagastoria, trasformando un kernel verificato (si spera) in uno da verificare.
90fdf0345eSFederico VagaMa, oltre a questo, gli sviluppatori non possono collaborare se non condividono
91fdf0345eSFederico Vagala stessa vista sulla storia del progetto; se riscrivete la storia dalla quale
92fdf0345eSFederico Vagaaltri sviluppatori hanno attinto per i loro repositori, renderete la loro vita
93fdf0345eSFederico Vagamolto più difficile.  Quindi tenete conto di questa semplice regola generale:
94fdf0345eSFederico Vagala storia che avete esposto ad altri, generalmente, dovrebbe essere vista come
95fdf0345eSFederico Vagaimmutabile.
96fdf0345eSFederico Vaga
97fdf0345eSFederico VagaDunque, una volta che il vostro insieme di patch è stato reso disponibile
98fdf0345eSFederico Vagapubblicamente non dovrebbe essere più sovrascritto.  Git tenterà di imporre
99fdf0345eSFederico Vagaquesta regola, e si rifiuterà di pubblicare nuove patch che non risultino
100fdf0345eSFederico Vagaessere dirette discendenti di quelle pubblicate in precedenza (in altre parole,
101fdf0345eSFederico Vagapatch che non condividono la stessa storia).  È possibile ignorare questo
102fdf0345eSFederico Vagacontrollo, e ci saranno momenti in cui sarà davvero necessario riscrivere
103fdf0345eSFederico Vagaun ramo già pubblicato.  Un esempio è linux-next dove le patch vengono
104fdf0345eSFederico Vagaspostate da un ramo all'altro al fine di evitare conflitti.  Ma questo tipo
105fdf0345eSFederico Vagad'azione dovrebbe essere un'eccezione.  Questo è uno dei motivi per cui lo
106fdf0345eSFederico Vagasviluppo dovrebbe avvenire in rami privati (che possono essere sovrascritti
107fdf0345eSFederico Vagaquando lo si ritiene necessario) e reso pubblico solo quando è in uno stato
108fdf0345eSFederico Vagaavanzato.
109fdf0345eSFederico Vaga
110fdf0345eSFederico VagaMan mano che il ramo principale (o altri rami su cui avete basato le
111fdf0345eSFederico Vagamodifiche) avanza, diventa allettante l'idea di integrare tutte le patch
112fdf0345eSFederico Vagaper rimanere sempre aggiornati.  Per un ramo privato, il *rebase* può essere
113fdf0345eSFederico Vagaun modo semplice per rimanere aggiornati, ma questa non è un'opzione nel
114fdf0345eSFederico Vagamomento in cui il vostro ramo è stato esposto al mondo intero.
115fdf0345eSFederico Vaga*Merge* occasionali possono essere considerati di buon senso, ma quando
116fdf0345eSFederico Vagadiventano troppo frequenti confondono inutilmente la storia.  La tecnica
117fdf0345eSFederico Vagasuggerita in questi casi è quella di fare *merge* raramente, e più in generale
118fdf0345eSFederico Vagasolo nei momenti di rilascio (per esempio gli -rc del ramo principale).
119fdf0345eSFederico VagaSe siete nervosi circa alcune patch in particolare, potete sempre fare
120fdf0345eSFederico Vagadei *merge* di test in un ramo privato.  In queste situazioni git "rerere"
121fdf0345eSFederico Vagapuò essere utile; questo strumento si ricorda come i conflitti di *merge*
122fdf0345eSFederico Vagafurono risolti in passato cosicché non dovrete fare lo stesso lavoro due volte.
123fdf0345eSFederico Vaga
124fdf0345eSFederico VagaUna delle lamentele più grosse e ricorrenti sull'uso di strumenti come git
125fdf0345eSFederico Vagaè il grande movimento di patch da un repositorio all'altro che rende
126fdf0345eSFederico Vagafacile l'integrazione nel ramo principale di modifiche mediocri, il tutto
127fdf0345eSFederico Vagasotto il naso dei revisori.  Gli sviluppatori del kernel tendono ad essere
128fdf0345eSFederico Vagascontenti quando vedono succedere queste cose; preparare un ramo git con
129fdf0345eSFederico Vagapatch che non hanno ricevuto alcuna revisione o completamente avulse, potrebbe
130fdf0345eSFederico Vagainfluire sulla vostra capacita di proporre, in futuro, l'integrazione dei
131fdf0345eSFederico Vagavostri rami.  Citando Linus
132fdf0345eSFederico Vaga
133fdf0345eSFederico Vaga::
134fdf0345eSFederico Vaga
135fdf0345eSFederico Vaga	Potete inviarmi le vostre patch, ma per far si che io integri una
136fdf0345eSFederico Vaga	vostra modifica da git, devo sapere che voi sappiate cosa state
137fdf0345eSFederico Vaga	facendo, e ho bisogno di fidarmi *senza* dover passare tutte
138fdf0345eSFederico Vaga	le modifiche manualmente una per una.
139fdf0345eSFederico Vaga
1403760fe20SFederico Vaga(https://lwn.net/Articles/224135/).
141fdf0345eSFederico Vaga
142fdf0345eSFederico VagaPer evitare queste situazioni, assicuratevi che tutte le patch in un ramo
143fdf0345eSFederico Vagasiano strettamente correlate al tema delle modifiche; un ramo "driver fixes"
144fdf0345eSFederico Vaganon dovrebbe fare modifiche al codice principale per la gestione della memoria.
145fdf0345eSFederico VagaE, più importante ancora, non usate un repositorio git per tentare di
146fdf0345eSFederico Vagaevitare il processo di revisione.  Pubblicate un sommario di quello che il
147fdf0345eSFederico Vagavostro ramo contiene sulle liste di discussione più opportune, e , quando
148fdf0345eSFederico Vagasarà il momento, richiedete che il vostro ramo venga integrato in linux-next.
149fdf0345eSFederico Vaga
150fdf0345eSFederico VagaSe e quando altri inizieranno ad inviarvi patch per essere incluse nel
151fdf0345eSFederico Vagavostro repositorio, non dovete dimenticare di revisionarle.  Inoltre
152fdf0345eSFederico Vagaassicuratevi di mantenerne le informazioni di paternità; al riguardo git "am"
153fdf0345eSFederico Vagafa del suo meglio, ma potreste dover aggiungere una riga "From:" alla patch
154fdf0345eSFederico Vaganel caso in cui sia arrivata per vie traverse.
155fdf0345eSFederico Vaga
156fdf0345eSFederico VagaQuando richiedete l'integrazione, siate certi di fornire tutte le informazioni:
157fdf0345eSFederico Vagadov'è il vostro repositorio, quale ramo integrare, e quali cambiamenti si
158fdf0345eSFederico Vagaotterranno dall'integrazione.  Il comando git request-pull può essere d'aiuto;
159fdf0345eSFederico Vagapreparerà una richiesta nel modo in cui gli altri sviluppatori se l'aspettano,
160fdf0345eSFederico Vagae verificherà che vi siate ricordati di pubblicare quelle patch su un
161fdf0345eSFederico Vagaserver pubblico.
162fdf0345eSFederico Vaga
163*dfce05c8SFederico Vaga.. _development_advancedtopics_reviews_it:
164*dfce05c8SFederico Vaga
165fdf0345eSFederico VagaRevisionare le patch
166fdf0345eSFederico Vaga--------------------
167fdf0345eSFederico Vaga
168fdf0345eSFederico VagaAlcuni lettori potrebbero avere obiezioni sulla presenza di questa sezione
169fdf0345eSFederico Vaganegli "argomenti avanzati" sulla base che anche gli sviluppatori principianti
170fdf0345eSFederico Vagadovrebbero revisionare le patch.  É certamente vero che non c'è modo
171fdf0345eSFederico Vagamigliore di imparare come programmare per il kernel che guardare il codice
172fdf0345eSFederico Vagapubblicato dagli altri.  In aggiunta, i revisori sono sempre troppo pochi;
173fdf0345eSFederico Vagaguardando il codice potete apportare un significativo contributo all'intero
174fdf0345eSFederico Vagaprocesso.
175fdf0345eSFederico Vaga
176fdf0345eSFederico VagaRevisionare il codice potrebbe risultare intimidatorio, specialmente per i
177fdf0345eSFederico Vaganuovi arrivati che potrebbero sentirsi un po' nervosi nel questionare
178fdf0345eSFederico Vagail codice - in pubblico - pubblicato da sviluppatori più esperti.  Perfino
179fdf0345eSFederico Vagail codice scritto dagli sviluppatori più esperti può essere migliorato.
180fdf0345eSFederico VagaForse il suggerimento migliore per i revisori (tutti) è questo: formulate
181fdf0345eSFederico Vagai commenti come domande e non come critiche.  Chiedere "Come viene rilasciato
182fdf0345eSFederico Vagail *lock* in questo percorso?" funziona sempre molto meglio che
183fdf0345eSFederico Vaga"qui la sincronizzazione è sbagliata".
184fdf0345eSFederico Vaga
185*dfce05c8SFederico VagaIn caso di disaccordi, può essere utile chiedere una terza opinione. Se dopo
186*dfce05c8SFederico Vagapochi scambi la discussione raggiunge un punto morto, allora chiedete ai
187*dfce05c8SFederico Vagamanutentori o altri revisori di partecipare esprimendo la loro opinione. Spesso
188*dfce05c8SFederico Vagavige un silenzio assenso per cui gli altri revisori non intervengono se non gli
189*dfce05c8SFederico Vagaviene richiesto esplicitamente. L'opinione di più persone avrà sicuramente un
190*dfce05c8SFederico Vagapeso maggiore.
191*dfce05c8SFederico Vaga
192fdf0345eSFederico VagaDiversi sviluppatori revisioneranno il codice con diversi punti di vista.
193fdf0345eSFederico VagaAlcuni potrebbero concentrarsi principalmente sullo stile del codice e se
194fdf0345eSFederico Vagaalcune linee hanno degli spazio bianchi di troppo.  Altri si chiederanno
195fdf0345eSFederico Vagase accettare una modifica interamente è una cosa positiva per il kernel
196fdf0345eSFederico Vagao no.  E altri ancora si focalizzeranno sui problemi di sincronizzazione,
197fdf0345eSFederico Vagal'uso eccessivo di *stack*, problemi di sicurezza, duplicazione del codice
198fdf0345eSFederico Vagain altri contesti, documentazione, effetti negativi sulle prestazioni, cambi
199fdf0345eSFederico Vagaall'ABI dello spazio utente, eccetera.  Qualunque tipo di revisione è ben
200fdf0345eSFederico Vagaaccetta e di valore, se porta ad avere un codice migliore nel kernel.
201*dfce05c8SFederico Vaga
202*dfce05c8SFederico VagaNon esistono requisiti particolarmente stringenti per l'uso di etichette come
203*dfce05c8SFederico Vaga``Reviewd-by``. Tuttavia, perché la revisione sia efficace ci si aspetta un
204*dfce05c8SFederico Vagaqualche tipo di messaggio che dica "ho verificato A, B e C nel codice che è
205*dfce05c8SFederico Vagaappena stato inviato e mi sembra tutto in ordine". Inoltre, questo permette ai
206*dfce05c8SFederico Vagamanutentori di prendere conoscenza circa una revisione avvenuta per davvero.
207*dfce05c8SFederico Vaga
208*dfce05c8SFederico VagaPer finire, la revisione delle patch può diventare un processo negativo, troppo
209*dfce05c8SFederico Vagafocalizzato sulla ricerca dei problemi. Provate a fare qualche complimento di
210*dfce05c8SFederico Vagatanto in tanto, specialmente con i nuovi arrivati.
211