18c2ecf20Sopenharmony_ci.. include:: ../disclaimer-ita.rst
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci:Original: :ref:`Documentation/process/7.AdvancedTopics.rst <development_advancedtopics>`
48c2ecf20Sopenharmony_ci:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci.. _it_development_advancedtopics:
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ciArgomenti avanzati
98c2ecf20Sopenharmony_ci==================
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ciA questo punto, si spera, dovreste avere un'idea su come funziona il processo
128c2ecf20Sopenharmony_cidi sviluppo.  Ma rimane comunque molto da imparare!  Questo capitolo copre
138c2ecf20Sopenharmony_cialcuni argomenti che potrebbero essere utili per gli sviluppatori che stanno
148c2ecf20Sopenharmony_ciper diventare parte integrante del processo di sviluppo del kernel.
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciGestire le modifiche con git
178c2ecf20Sopenharmony_ci-----------------------------
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciL'uso di un sistema distribuito per il controllo delle versioni del kernel
208c2ecf20Sopenharmony_ciebbe iniziò nel 2002 quando Linux iniziò a provare il programma proprietario
218c2ecf20Sopenharmony_ciBitKeeper.  Nonostante l'uso di BitKeeper fosse opinabile, di certo il suo
228c2ecf20Sopenharmony_ciapproccio alla gestione dei sorgenti non lo era.  Un sistema distribuito per
238c2ecf20Sopenharmony_ciil controllo delle versioni accelerò immediatamente lo sviluppo del kernel.
248c2ecf20Sopenharmony_ciOggigiorno, ci sono diverse alternative libere a BitKeeper.  Per il meglio o il
258c2ecf20Sopenharmony_cipeggio, il progetto del kernel ha deciso di usare git per gestire i sorgenti.
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ciGestire le modifiche con git può rendere la vita dello sviluppatore molto
288c2ecf20Sopenharmony_cipiù facile, specialmente quando il volume delle modifiche cresce.
298c2ecf20Sopenharmony_ciGit ha anche i suoi lati taglienti che possono essere pericolosi; è uno
308c2ecf20Sopenharmony_cistrumento giovane e potente che è ancora in fase di civilizzazione da parte
318c2ecf20Sopenharmony_cidei suoi sviluppatori.  Questo documento non ha lo scopo di insegnare l'uso
328c2ecf20Sopenharmony_cidi git ai suoi lettori; ci sarebbe materiale a sufficienza per un lungo
338c2ecf20Sopenharmony_cidocumento al riguardo.  Invece, qui ci concentriamo in particolare su come
348c2ecf20Sopenharmony_cigit è parte del processo di sviluppo del kernel.  Gli sviluppatori che
358c2ecf20Sopenharmony_cidesiderassero diventare agili con git troveranno più informazioni ai
368c2ecf20Sopenharmony_ciseguenti indirizzi:
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	http://git-scm.com/
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci	http://www.kernel.org/pub/software/scm/git/docs/user-manual.html
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cie su varie guide che potrete trovare su internet.
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciLa prima cosa da fare prima di usarlo per produrre patch che saranno
458c2ecf20Sopenharmony_cidisponibili ad altri, è quella di leggere i siti qui sopra e di acquisire una
468c2ecf20Sopenharmony_cibase solida su come funziona git.  Uno sviluppatore che sappia usare git
478c2ecf20Sopenharmony_cidovrebbe essere capace di ottenere una copia del repositorio principale,
488c2ecf20Sopenharmony_ciesplorare la storia della revisione, registrare le modifiche, usare i rami,
498c2ecf20Sopenharmony_cieccetera.  Una certa comprensione degli strumenti git per riscrivere la storia
508c2ecf20Sopenharmony_ci(come ``rebase``) è altrettanto utile.  Git ha i propri concetti e la propria
518c2ecf20Sopenharmony_citerminologia; un nuovo utente dovrebbe conoscere *refs*, *remote branch*,
528c2ecf20Sopenharmony_ci*index*, *fast-forward merge*, *push* e *pull*, *detached head*, eccetera.
538c2ecf20Sopenharmony_ciIl tutto potrebbe essere un po' intimidatorio visto da fuori, ma con un po'
548c2ecf20Sopenharmony_cidi studio i concetti non saranno così difficili da capire.
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ciUtilizzare git per produrre patch da sottomettere via email può essere
578c2ecf20Sopenharmony_ciun buon esercizio da fare mentre si sta prendendo confidenza con lo strumento.
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ciQuando sarete in grado di creare rami git che siano guardabili da altri,
608c2ecf20Sopenharmony_civi servirà, ovviamente, un server dal quale sia possibile attingere le vostre
618c2ecf20Sopenharmony_cimodifiche.  Se avete un server accessibile da Internet, configurarlo per
628c2ecf20Sopenharmony_cieseguire git-daemon è relativamente semplice .  Altrimenti, iniziano a
638c2ecf20Sopenharmony_cisvilupparsi piattaforme che offrono spazi pubblici, e gratuiti (Github,
648c2ecf20Sopenharmony_ciper esempio).  Gli sviluppatori permanenti possono ottenere un account
658c2ecf20Sopenharmony_cisu kernel.org, ma non è proprio facile da ottenere; per maggiori informazioni
668c2ecf20Sopenharmony_ciconsultate la pagina web http://kernel.org/faq/.
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ciIn git è normale avere a che fare con tanti rami.  Ogni linea di sviluppo
698c2ecf20Sopenharmony_cipuò essere separata in "rami per argomenti" e gestiti indipendentemente.
708c2ecf20Sopenharmony_ciIn git i rami sono facilissimi, per cui non c'è motivo per non usarli
718c2ecf20Sopenharmony_ciin libertà.  In ogni caso, non dovreste sviluppare su alcun ramo dal
728c2ecf20Sopenharmony_ciquale altri potrebbero attingere.  I rami disponibili pubblicamente dovrebbero
738c2ecf20Sopenharmony_ciessere creati con attenzione; integrate patch dai rami di sviluppo
748c2ecf20Sopenharmony_cisolo quando sono complete e pronte ad essere consegnate - non prima.
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ciGit offre alcuni strumenti che vi permettono di riscrivere la storia del
778c2ecf20Sopenharmony_civostro sviluppo.  Una modifica errata (diciamo, una che rompe la bisezione,
788c2ecf20Sopenharmony_cioppure che ha un qualche tipo di baco evidente) può essere corretta sul posto
798c2ecf20Sopenharmony_cio fatta sparire completamente dalla storia.  Una serie di patch può essere
808c2ecf20Sopenharmony_ciriscritta come se fosse stata scritta in cima al ramo principale di oggi,
818c2ecf20Sopenharmony_cianche se ci avete lavorato per mesi.  Le modifiche possono essere spostate
828c2ecf20Sopenharmony_ciin modo trasparente da un ramo ad un altro.  E così via.  Un uso giudizioso
838c2ecf20Sopenharmony_cidi git per revisionare la storia può aiutare nella creazione di una serie
848c2ecf20Sopenharmony_cidi patch pulite e con meno problemi.
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ciUn uso eccessivo può portare ad altri tipi di problemi, tuttavia, oltre
878c2ecf20Sopenharmony_cialla semplice ossessione per la creazione di una storia del progetto che sia
888c2ecf20Sopenharmony_ciperfetta.  Riscrivere la storia riscriverà le patch contenute in quella
898c2ecf20Sopenharmony_cistoria, trasformando un kernel verificato (si spera) in uno da verificare.
908c2ecf20Sopenharmony_ciMa, oltre a questo, gli sviluppatori non possono collaborare se non condividono
918c2ecf20Sopenharmony_cila stessa vista sulla storia del progetto; se riscrivete la storia dalla quale
928c2ecf20Sopenharmony_cialtri sviluppatori hanno attinto per i loro repositori, renderete la loro vita
938c2ecf20Sopenharmony_cimolto più difficile.  Quindi tenete conto di questa semplice regola generale:
948c2ecf20Sopenharmony_cila storia che avete esposto ad altri, generalmente, dovrebbe essere vista come
958c2ecf20Sopenharmony_ciimmutabile.
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ciDunque, una volta che il vostro insieme di patch è stato reso disponibile
988c2ecf20Sopenharmony_cipubblicamente non dovrebbe essere più sovrascritto.  Git tenterà di imporre
998c2ecf20Sopenharmony_ciquesta regola, e si rifiuterà di pubblicare nuove patch che non risultino
1008c2ecf20Sopenharmony_ciessere dirette discendenti di quelle pubblicate in precedenza (in altre parole,
1018c2ecf20Sopenharmony_cipatch che non condividono la stessa storia).  È possibile ignorare questo
1028c2ecf20Sopenharmony_cicontrollo, e ci saranno momenti in cui sarà davvero necessario riscrivere
1038c2ecf20Sopenharmony_ciun ramo già pubblicato.  Un esempio è linux-next dove le patch vengono
1048c2ecf20Sopenharmony_cispostate da un ramo all'altro al fine di evitare conflitti.  Ma questo tipo
1058c2ecf20Sopenharmony_cid'azione dovrebbe essere un'eccezione.  Questo è uno dei motivi per cui lo
1068c2ecf20Sopenharmony_cisviluppo dovrebbe avvenire in rami privati (che possono essere sovrascritti
1078c2ecf20Sopenharmony_ciquando lo si ritiene necessario) e reso pubblico solo quando è in uno stato
1088c2ecf20Sopenharmony_ciavanzato.
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ciMan mano che il ramo principale (o altri rami su cui avete basato le
1118c2ecf20Sopenharmony_cimodifiche) avanza, diventa allettante l'idea di integrare tutte le patch
1128c2ecf20Sopenharmony_ciper rimanere sempre aggiornati.  Per un ramo privato, il *rebase* può essere
1138c2ecf20Sopenharmony_ciun modo semplice per rimanere aggiornati, ma questa non è un'opzione nel
1148c2ecf20Sopenharmony_cimomento in cui il vostro ramo è stato esposto al mondo intero.
1158c2ecf20Sopenharmony_ci*Merge* occasionali possono essere considerati di buon senso, ma quando
1168c2ecf20Sopenharmony_cidiventano troppo frequenti confondono inutilmente la storia.  La tecnica
1178c2ecf20Sopenharmony_cisuggerita in questi casi è quella di fare *merge* raramente, e più in generale
1188c2ecf20Sopenharmony_cisolo nei momenti di rilascio (per esempio gli -rc del ramo principale).
1198c2ecf20Sopenharmony_ciSe siete nervosi circa alcune patch in particolare, potete sempre fare
1208c2ecf20Sopenharmony_cidei *merge* di test in un ramo privato.  In queste situazioni git "rerere"
1218c2ecf20Sopenharmony_cipuò essere utile; questo strumento si ricorda come i conflitti di *merge*
1228c2ecf20Sopenharmony_cifurono risolti in passato cosicché non dovrete fare lo stesso lavoro due volte.
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ciUna delle lamentele più grosse e ricorrenti sull'uso di strumenti come git
1258c2ecf20Sopenharmony_ciè il grande movimento di patch da un repositorio all'altro che rende
1268c2ecf20Sopenharmony_cifacile l'integrazione nel ramo principale di modifiche mediocri, il tutto
1278c2ecf20Sopenharmony_cisotto il naso dei revisori.  Gli sviluppatori del kernel tendono ad essere
1288c2ecf20Sopenharmony_ciscontenti quando vedono succedere queste cose; preparare un ramo git con
1298c2ecf20Sopenharmony_cipatch che non hanno ricevuto alcuna revisione o completamente avulse, potrebbe
1308c2ecf20Sopenharmony_ciinfluire sulla vostra capacita di proporre, in futuro, l'integrazione dei
1318c2ecf20Sopenharmony_civostri rami.  Citando Linus
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci::
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci	Potete inviarmi le vostre patch, ma per far si che io integri una
1368c2ecf20Sopenharmony_ci	vostra modifica da git, devo sapere che voi sappiate cosa state
1378c2ecf20Sopenharmony_ci	facendo, e ho bisogno di fidarmi *senza* dover passare tutte
1388c2ecf20Sopenharmony_ci	le modifiche manualmente una per una.
1398c2ecf20Sopenharmony_ci
1408c2ecf20Sopenharmony_ci(http://lwn.net/Articles/224135/).
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ciPer evitare queste situazioni, assicuratevi che tutte le patch in un ramo
1438c2ecf20Sopenharmony_cisiano strettamente correlate al tema delle modifiche; un ramo "driver fixes"
1448c2ecf20Sopenharmony_cinon dovrebbe fare modifiche al codice principale per la gestione della memoria.
1458c2ecf20Sopenharmony_ciE, più importante ancora, non usate un repositorio git per tentare di
1468c2ecf20Sopenharmony_cievitare il processo di revisione.  Pubblicate un sommario di quello che il
1478c2ecf20Sopenharmony_civostro ramo contiene sulle liste di discussione più opportune, e , quando
1488c2ecf20Sopenharmony_cisarà il momento, richiedete che il vostro ramo venga integrato in linux-next.
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ciSe e quando altri inizieranno ad inviarvi patch per essere incluse nel
1518c2ecf20Sopenharmony_civostro repositorio, non dovete dimenticare di revisionarle.  Inoltre
1528c2ecf20Sopenharmony_ciassicuratevi di mantenerne le informazioni di paternità; al riguardo git "am"
1538c2ecf20Sopenharmony_cifa del suo meglio, ma potreste dover aggiungere una riga "From:" alla patch
1548c2ecf20Sopenharmony_cinel caso in cui sia arrivata per vie traverse.
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ciQuando richiedete l'integrazione, siate certi di fornire tutte le informazioni:
1578c2ecf20Sopenharmony_cidov'è il vostro repositorio, quale ramo integrare, e quali cambiamenti si
1588c2ecf20Sopenharmony_ciotterranno dall'integrazione.  Il comando git request-pull può essere d'aiuto;
1598c2ecf20Sopenharmony_cipreparerà una richiesta nel modo in cui gli altri sviluppatori se l'aspettano,
1608c2ecf20Sopenharmony_cie verificherà che vi siate ricordati di pubblicare quelle patch su un
1618c2ecf20Sopenharmony_ciserver pubblico.
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ciRevisionare le patch
1648c2ecf20Sopenharmony_ci--------------------
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ciAlcuni lettori potrebbero avere obiezioni sulla presenza di questa sezione
1678c2ecf20Sopenharmony_cinegli "argomenti avanzati" sulla base che anche gli sviluppatori principianti
1688c2ecf20Sopenharmony_cidovrebbero revisionare le patch.  É certamente vero che non c'è modo
1698c2ecf20Sopenharmony_cimigliore di imparare come programmare per il kernel che guardare il codice
1708c2ecf20Sopenharmony_cipubblicato dagli altri.  In aggiunta, i revisori sono sempre troppo pochi;
1718c2ecf20Sopenharmony_ciguardando il codice potete apportare un significativo contributo all'intero
1728c2ecf20Sopenharmony_ciprocesso.
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ciRevisionare il codice potrebbe risultare intimidatorio, specialmente per i
1758c2ecf20Sopenharmony_cinuovi arrivati che potrebbero sentirsi un po' nervosi nel questionare
1768c2ecf20Sopenharmony_ciil codice - in pubblico - pubblicato da sviluppatori più esperti.  Perfino
1778c2ecf20Sopenharmony_ciil codice scritto dagli sviluppatori più esperti può essere migliorato.
1788c2ecf20Sopenharmony_ciForse il suggerimento migliore per i revisori (tutti) è questo: formulate
1798c2ecf20Sopenharmony_cii commenti come domande e non come critiche.  Chiedere "Come viene rilasciato
1808c2ecf20Sopenharmony_ciil *lock* in questo percorso?" funziona sempre molto meglio che
1818c2ecf20Sopenharmony_ci"qui la sincronizzazione è sbagliata".
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_ciDiversi sviluppatori revisioneranno il codice con diversi punti di vista.
1848c2ecf20Sopenharmony_ciAlcuni potrebbero concentrarsi principalmente sullo stile del codice e se
1858c2ecf20Sopenharmony_cialcune linee hanno degli spazio bianchi di troppo.  Altri si chiederanno
1868c2ecf20Sopenharmony_cise accettare una modifica interamente è una cosa positiva per il kernel
1878c2ecf20Sopenharmony_cio no.  E altri ancora si focalizzeranno sui problemi di sincronizzazione,
1888c2ecf20Sopenharmony_cil'uso eccessivo di *stack*, problemi di sicurezza, duplicazione del codice
1898c2ecf20Sopenharmony_ciin altri contesti, documentazione, effetti negativi sulle prestazioni, cambi
1908c2ecf20Sopenharmony_ciall'ABI dello spazio utente, eccetera.  Qualunque tipo di revisione è ben
1918c2ecf20Sopenharmony_ciaccetta e di valore, se porta ad avere un codice migliore nel kernel.
192