xref: /OK3568_Linux_fs/kernel/Documentation/translations/it_IT/process/7.AdvancedTopics.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. include:: ../disclaimer-ita.rst
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun:Original: :ref:`Documentation/process/7.AdvancedTopics.rst <development_advancedtopics>`
4*4882a593Smuzhiyun:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun.. _it_development_advancedtopics:
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunArgomenti avanzati
9*4882a593Smuzhiyun==================
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunA questo punto, si spera, dovreste avere un'idea su come funziona il processo
12*4882a593Smuzhiyundi sviluppo.  Ma rimane comunque molto da imparare!  Questo capitolo copre
13*4882a593Smuzhiyunalcuni argomenti che potrebbero essere utili per gli sviluppatori che stanno
14*4882a593Smuzhiyunper diventare parte integrante del processo di sviluppo del kernel.
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunGestire le modifiche con git
17*4882a593Smuzhiyun-----------------------------
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunL'uso di un sistema distribuito per il controllo delle versioni del kernel
20*4882a593Smuzhiyunebbe iniziò nel 2002 quando Linux iniziò a provare il programma proprietario
21*4882a593SmuzhiyunBitKeeper.  Nonostante l'uso di BitKeeper fosse opinabile, di certo il suo
22*4882a593Smuzhiyunapproccio alla gestione dei sorgenti non lo era.  Un sistema distribuito per
23*4882a593Smuzhiyunil controllo delle versioni accelerò immediatamente lo sviluppo del kernel.
24*4882a593SmuzhiyunOggigiorno, ci sono diverse alternative libere a BitKeeper.  Per il meglio o il
25*4882a593Smuzhiyunpeggio, il progetto del kernel ha deciso di usare git per gestire i sorgenti.
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunGestire le modifiche con git può rendere la vita dello sviluppatore molto
28*4882a593Smuzhiyunpiù facile, specialmente quando il volume delle modifiche cresce.
29*4882a593SmuzhiyunGit ha anche i suoi lati taglienti che possono essere pericolosi; è uno
30*4882a593Smuzhiyunstrumento giovane e potente che è ancora in fase di civilizzazione da parte
31*4882a593Smuzhiyundei suoi sviluppatori.  Questo documento non ha lo scopo di insegnare l'uso
32*4882a593Smuzhiyundi git ai suoi lettori; ci sarebbe materiale a sufficienza per un lungo
33*4882a593Smuzhiyundocumento al riguardo.  Invece, qui ci concentriamo in particolare su come
34*4882a593Smuzhiyungit è parte del processo di sviluppo del kernel.  Gli sviluppatori che
35*4882a593Smuzhiyundesiderassero diventare agili con git troveranno più informazioni ai
36*4882a593Smuzhiyunseguenti indirizzi:
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun	http://git-scm.com/
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun	http://www.kernel.org/pub/software/scm/git/docs/user-manual.html
41*4882a593Smuzhiyun
42*4882a593Smuzhiyune su varie guide che potrete trovare su internet.
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunLa prima cosa da fare prima di usarlo per produrre patch che saranno
45*4882a593Smuzhiyundisponibili ad altri, è quella di leggere i siti qui sopra e di acquisire una
46*4882a593Smuzhiyunbase solida su come funziona git.  Uno sviluppatore che sappia usare git
47*4882a593Smuzhiyundovrebbe essere capace di ottenere una copia del repositorio principale,
48*4882a593Smuzhiyunesplorare la storia della revisione, registrare le modifiche, usare i rami,
49*4882a593Smuzhiyuneccetera.  Una certa comprensione degli strumenti git per riscrivere la storia
50*4882a593Smuzhiyun(come ``rebase``) è altrettanto utile.  Git ha i propri concetti e la propria
51*4882a593Smuzhiyunterminologia; un nuovo utente dovrebbe conoscere *refs*, *remote branch*,
52*4882a593Smuzhiyun*index*, *fast-forward merge*, *push* e *pull*, *detached head*, eccetera.
53*4882a593SmuzhiyunIl tutto potrebbe essere un po' intimidatorio visto da fuori, ma con un po'
54*4882a593Smuzhiyundi studio i concetti non saranno così difficili da capire.
55*4882a593Smuzhiyun
56*4882a593SmuzhiyunUtilizzare git per produrre patch da sottomettere via email può essere
57*4882a593Smuzhiyunun buon esercizio da fare mentre si sta prendendo confidenza con lo strumento.
58*4882a593Smuzhiyun
59*4882a593SmuzhiyunQuando sarete in grado di creare rami git che siano guardabili da altri,
60*4882a593Smuzhiyunvi servirà, ovviamente, un server dal quale sia possibile attingere le vostre
61*4882a593Smuzhiyunmodifiche.  Se avete un server accessibile da Internet, configurarlo per
62*4882a593Smuzhiyuneseguire git-daemon è relativamente semplice .  Altrimenti, iniziano a
63*4882a593Smuzhiyunsvilupparsi piattaforme che offrono spazi pubblici, e gratuiti (Github,
64*4882a593Smuzhiyunper esempio).  Gli sviluppatori permanenti possono ottenere un account
65*4882a593Smuzhiyunsu kernel.org, ma non è proprio facile da ottenere; per maggiori informazioni
66*4882a593Smuzhiyunconsultate la pagina web http://kernel.org/faq/.
67*4882a593Smuzhiyun
68*4882a593SmuzhiyunIn git è normale avere a che fare con tanti rami.  Ogni linea di sviluppo
69*4882a593Smuzhiyunpuò essere separata in "rami per argomenti" e gestiti indipendentemente.
70*4882a593SmuzhiyunIn git i rami sono facilissimi, per cui non c'è motivo per non usarli
71*4882a593Smuzhiyunin libertà.  In ogni caso, non dovreste sviluppare su alcun ramo dal
72*4882a593Smuzhiyunquale altri potrebbero attingere.  I rami disponibili pubblicamente dovrebbero
73*4882a593Smuzhiyunessere creati con attenzione; integrate patch dai rami di sviluppo
74*4882a593Smuzhiyunsolo quando sono complete e pronte ad essere consegnate - non prima.
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunGit offre alcuni strumenti che vi permettono di riscrivere la storia del
77*4882a593Smuzhiyunvostro sviluppo.  Una modifica errata (diciamo, una che rompe la bisezione,
78*4882a593Smuzhiyunoppure che ha un qualche tipo di baco evidente) può essere corretta sul posto
79*4882a593Smuzhiyuno fatta sparire completamente dalla storia.  Una serie di patch può essere
80*4882a593Smuzhiyunriscritta come se fosse stata scritta in cima al ramo principale di oggi,
81*4882a593Smuzhiyunanche se ci avete lavorato per mesi.  Le modifiche possono essere spostate
82*4882a593Smuzhiyunin modo trasparente da un ramo ad un altro.  E così via.  Un uso giudizioso
83*4882a593Smuzhiyundi git per revisionare la storia può aiutare nella creazione di una serie
84*4882a593Smuzhiyundi patch pulite e con meno problemi.
85*4882a593Smuzhiyun
86*4882a593SmuzhiyunUn uso eccessivo può portare ad altri tipi di problemi, tuttavia, oltre
87*4882a593Smuzhiyunalla semplice ossessione per la creazione di una storia del progetto che sia
88*4882a593Smuzhiyunperfetta.  Riscrivere la storia riscriverà le patch contenute in quella
89*4882a593Smuzhiyunstoria, trasformando un kernel verificato (si spera) in uno da verificare.
90*4882a593SmuzhiyunMa, oltre a questo, gli sviluppatori non possono collaborare se non condividono
91*4882a593Smuzhiyunla stessa vista sulla storia del progetto; se riscrivete la storia dalla quale
92*4882a593Smuzhiyunaltri sviluppatori hanno attinto per i loro repositori, renderete la loro vita
93*4882a593Smuzhiyunmolto più difficile.  Quindi tenete conto di questa semplice regola generale:
94*4882a593Smuzhiyunla storia che avete esposto ad altri, generalmente, dovrebbe essere vista come
95*4882a593Smuzhiyunimmutabile.
96*4882a593Smuzhiyun
97*4882a593SmuzhiyunDunque, una volta che il vostro insieme di patch è stato reso disponibile
98*4882a593Smuzhiyunpubblicamente non dovrebbe essere più sovrascritto.  Git tenterà di imporre
99*4882a593Smuzhiyunquesta regola, e si rifiuterà di pubblicare nuove patch che non risultino
100*4882a593Smuzhiyunessere dirette discendenti di quelle pubblicate in precedenza (in altre parole,
101*4882a593Smuzhiyunpatch che non condividono la stessa storia).  È possibile ignorare questo
102*4882a593Smuzhiyuncontrollo, e ci saranno momenti in cui sarà davvero necessario riscrivere
103*4882a593Smuzhiyunun ramo già pubblicato.  Un esempio è linux-next dove le patch vengono
104*4882a593Smuzhiyunspostate da un ramo all'altro al fine di evitare conflitti.  Ma questo tipo
105*4882a593Smuzhiyund'azione dovrebbe essere un'eccezione.  Questo è uno dei motivi per cui lo
106*4882a593Smuzhiyunsviluppo dovrebbe avvenire in rami privati (che possono essere sovrascritti
107*4882a593Smuzhiyunquando lo si ritiene necessario) e reso pubblico solo quando è in uno stato
108*4882a593Smuzhiyunavanzato.
109*4882a593Smuzhiyun
110*4882a593SmuzhiyunMan mano che il ramo principale (o altri rami su cui avete basato le
111*4882a593Smuzhiyunmodifiche) avanza, diventa allettante l'idea di integrare tutte le patch
112*4882a593Smuzhiyunper rimanere sempre aggiornati.  Per un ramo privato, il *rebase* può essere
113*4882a593Smuzhiyunun modo semplice per rimanere aggiornati, ma questa non è un'opzione nel
114*4882a593Smuzhiyunmomento in cui il vostro ramo è stato esposto al mondo intero.
115*4882a593Smuzhiyun*Merge* occasionali possono essere considerati di buon senso, ma quando
116*4882a593Smuzhiyundiventano troppo frequenti confondono inutilmente la storia.  La tecnica
117*4882a593Smuzhiyunsuggerita in questi casi è quella di fare *merge* raramente, e più in generale
118*4882a593Smuzhiyunsolo nei momenti di rilascio (per esempio gli -rc del ramo principale).
119*4882a593SmuzhiyunSe siete nervosi circa alcune patch in particolare, potete sempre fare
120*4882a593Smuzhiyundei *merge* di test in un ramo privato.  In queste situazioni git "rerere"
121*4882a593Smuzhiyunpuò essere utile; questo strumento si ricorda come i conflitti di *merge*
122*4882a593Smuzhiyunfurono risolti in passato cosicché non dovrete fare lo stesso lavoro due volte.
123*4882a593Smuzhiyun
124*4882a593SmuzhiyunUna delle lamentele più grosse e ricorrenti sull'uso di strumenti come git
125*4882a593Smuzhiyunè il grande movimento di patch da un repositorio all'altro che rende
126*4882a593Smuzhiyunfacile l'integrazione nel ramo principale di modifiche mediocri, il tutto
127*4882a593Smuzhiyunsotto il naso dei revisori.  Gli sviluppatori del kernel tendono ad essere
128*4882a593Smuzhiyunscontenti quando vedono succedere queste cose; preparare un ramo git con
129*4882a593Smuzhiyunpatch che non hanno ricevuto alcuna revisione o completamente avulse, potrebbe
130*4882a593Smuzhiyuninfluire sulla vostra capacita di proporre, in futuro, l'integrazione dei
131*4882a593Smuzhiyunvostri rami.  Citando Linus
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun::
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun	Potete inviarmi le vostre patch, ma per far si che io integri una
136*4882a593Smuzhiyun	vostra modifica da git, devo sapere che voi sappiate cosa state
137*4882a593Smuzhiyun	facendo, e ho bisogno di fidarmi *senza* dover passare tutte
138*4882a593Smuzhiyun	le modifiche manualmente una per una.
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun(http://lwn.net/Articles/224135/).
141*4882a593Smuzhiyun
142*4882a593SmuzhiyunPer evitare queste situazioni, assicuratevi che tutte le patch in un ramo
143*4882a593Smuzhiyunsiano strettamente correlate al tema delle modifiche; un ramo "driver fixes"
144*4882a593Smuzhiyunnon dovrebbe fare modifiche al codice principale per la gestione della memoria.
145*4882a593SmuzhiyunE, più importante ancora, non usate un repositorio git per tentare di
146*4882a593Smuzhiyunevitare il processo di revisione.  Pubblicate un sommario di quello che il
147*4882a593Smuzhiyunvostro ramo contiene sulle liste di discussione più opportune, e , quando
148*4882a593Smuzhiyunsarà il momento, richiedete che il vostro ramo venga integrato in linux-next.
149*4882a593Smuzhiyun
150*4882a593SmuzhiyunSe e quando altri inizieranno ad inviarvi patch per essere incluse nel
151*4882a593Smuzhiyunvostro repositorio, non dovete dimenticare di revisionarle.  Inoltre
152*4882a593Smuzhiyunassicuratevi di mantenerne le informazioni di paternità; al riguardo git "am"
153*4882a593Smuzhiyunfa del suo meglio, ma potreste dover aggiungere una riga "From:" alla patch
154*4882a593Smuzhiyunnel caso in cui sia arrivata per vie traverse.
155*4882a593Smuzhiyun
156*4882a593SmuzhiyunQuando richiedete l'integrazione, siate certi di fornire tutte le informazioni:
157*4882a593Smuzhiyundov'è il vostro repositorio, quale ramo integrare, e quali cambiamenti si
158*4882a593Smuzhiyunotterranno dall'integrazione.  Il comando git request-pull può essere d'aiuto;
159*4882a593Smuzhiyunpreparerà una richiesta nel modo in cui gli altri sviluppatori se l'aspettano,
160*4882a593Smuzhiyune verificherà che vi siate ricordati di pubblicare quelle patch su un
161*4882a593Smuzhiyunserver pubblico.
162*4882a593Smuzhiyun
163*4882a593SmuzhiyunRevisionare le patch
164*4882a593Smuzhiyun--------------------
165*4882a593Smuzhiyun
166*4882a593SmuzhiyunAlcuni lettori potrebbero avere obiezioni sulla presenza di questa sezione
167*4882a593Smuzhiyunnegli "argomenti avanzati" sulla base che anche gli sviluppatori principianti
168*4882a593Smuzhiyundovrebbero revisionare le patch.  É certamente vero che non c'è modo
169*4882a593Smuzhiyunmigliore di imparare come programmare per il kernel che guardare il codice
170*4882a593Smuzhiyunpubblicato dagli altri.  In aggiunta, i revisori sono sempre troppo pochi;
171*4882a593Smuzhiyunguardando il codice potete apportare un significativo contributo all'intero
172*4882a593Smuzhiyunprocesso.
173*4882a593Smuzhiyun
174*4882a593SmuzhiyunRevisionare il codice potrebbe risultare intimidatorio, specialmente per i
175*4882a593Smuzhiyunnuovi arrivati che potrebbero sentirsi un po' nervosi nel questionare
176*4882a593Smuzhiyunil codice - in pubblico - pubblicato da sviluppatori più esperti.  Perfino
177*4882a593Smuzhiyunil codice scritto dagli sviluppatori più esperti può essere migliorato.
178*4882a593SmuzhiyunForse il suggerimento migliore per i revisori (tutti) è questo: formulate
179*4882a593Smuzhiyuni commenti come domande e non come critiche.  Chiedere "Come viene rilasciato
180*4882a593Smuzhiyunil *lock* in questo percorso?" funziona sempre molto meglio che
181*4882a593Smuzhiyun"qui la sincronizzazione è sbagliata".
182*4882a593Smuzhiyun
183*4882a593SmuzhiyunDiversi sviluppatori revisioneranno il codice con diversi punti di vista.
184*4882a593SmuzhiyunAlcuni potrebbero concentrarsi principalmente sullo stile del codice e se
185*4882a593Smuzhiyunalcune linee hanno degli spazio bianchi di troppo.  Altri si chiederanno
186*4882a593Smuzhiyunse accettare una modifica interamente è una cosa positiva per il kernel
187*4882a593Smuzhiyuno no.  E altri ancora si focalizzeranno sui problemi di sincronizzazione,
188*4882a593Smuzhiyunl'uso eccessivo di *stack*, problemi di sicurezza, duplicazione del codice
189*4882a593Smuzhiyunin altri contesti, documentazione, effetti negativi sulle prestazioni, cambi
190*4882a593Smuzhiyunall'ABI dello spazio utente, eccetera.  Qualunque tipo di revisione è ben
191*4882a593Smuzhiyunaccetta e di valore, se porta ad avere un codice migliore nel kernel.
192