162306a36Sopenharmony_ci.. include:: ../disclaimer-ita.rst
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci:Original: :ref:`Documentation/process/7.AdvancedTopics.rst <development_advancedtopics>`
462306a36Sopenharmony_ci:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci.. _it_development_advancedtopics:
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciArgomenti avanzati
962306a36Sopenharmony_ci==================
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciA questo punto, si spera, dovreste avere un'idea su come funziona il processo
1262306a36Sopenharmony_cidi sviluppo.  Ma rimane comunque molto da imparare!  Questo capitolo copre
1362306a36Sopenharmony_cialcuni argomenti che potrebbero essere utili per gli sviluppatori che stanno
1462306a36Sopenharmony_ciper diventare parte integrante del processo di sviluppo del kernel.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciGestire le modifiche con git
1762306a36Sopenharmony_ci-----------------------------
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciL'uso di un sistema distribuito per il controllo delle versioni del kernel
2062306a36Sopenharmony_ciebbe iniziò nel 2002 quando Linux iniziò a provare il programma proprietario
2162306a36Sopenharmony_ciBitKeeper.  Nonostante l'uso di BitKeeper fosse opinabile, di certo il suo
2262306a36Sopenharmony_ciapproccio alla gestione dei sorgenti non lo era.  Un sistema distribuito per
2362306a36Sopenharmony_ciil controllo delle versioni accelerò immediatamente lo sviluppo del kernel.
2462306a36Sopenharmony_ciOggigiorno, ci sono diverse alternative libere a BitKeeper.  Per il meglio o il
2562306a36Sopenharmony_cipeggio, il progetto del kernel ha deciso di usare git per gestire i sorgenti.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciGestire le modifiche con git può rendere la vita dello sviluppatore molto
2862306a36Sopenharmony_cipiù facile, specialmente quando il volume delle modifiche cresce.
2962306a36Sopenharmony_ciGit ha anche i suoi lati taglienti che possono essere pericolosi; è uno
3062306a36Sopenharmony_cistrumento giovane e potente che è ancora in fase di civilizzazione da parte
3162306a36Sopenharmony_cidei suoi sviluppatori.  Questo documento non ha lo scopo di insegnare l'uso
3262306a36Sopenharmony_cidi git ai suoi lettori; ci sarebbe materiale a sufficienza per un lungo
3362306a36Sopenharmony_cidocumento al riguardo.  Invece, qui ci concentriamo in particolare su come
3462306a36Sopenharmony_cigit è parte del processo di sviluppo del kernel.  Gli sviluppatori che
3562306a36Sopenharmony_cidesiderassero diventare agili con git troveranno più informazioni ai
3662306a36Sopenharmony_ciseguenti indirizzi:
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	https://git-scm.com/
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	https://www.kernel.org/pub/software/scm/git/docs/user-manual.html
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cie su varie guide che potrete trovare su internet.
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciLa prima cosa da fare prima di usarlo per produrre patch che saranno
4562306a36Sopenharmony_cidisponibili ad altri, è quella di leggere i siti qui sopra e di acquisire una
4662306a36Sopenharmony_cibase solida su come funziona git.  Uno sviluppatore che sappia usare git
4762306a36Sopenharmony_cidovrebbe essere capace di ottenere una copia del repositorio principale,
4862306a36Sopenharmony_ciesplorare la storia della revisione, registrare le modifiche, usare i rami,
4962306a36Sopenharmony_cieccetera.  Una certa comprensione degli strumenti git per riscrivere la storia
5062306a36Sopenharmony_ci(come ``rebase``) è altrettanto utile.  Git ha i propri concetti e la propria
5162306a36Sopenharmony_citerminologia; un nuovo utente dovrebbe conoscere *refs*, *remote branch*,
5262306a36Sopenharmony_ci*index*, *fast-forward merge*, *push* e *pull*, *detached head*, eccetera.
5362306a36Sopenharmony_ciIl tutto potrebbe essere un po' intimidatorio visto da fuori, ma con un po'
5462306a36Sopenharmony_cidi studio i concetti non saranno così difficili da capire.
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciUtilizzare git per produrre patch da sottomettere via email può essere
5762306a36Sopenharmony_ciun buon esercizio da fare mentre si sta prendendo confidenza con lo strumento.
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciQuando sarete in grado di creare rami git che siano guardabili da altri,
6062306a36Sopenharmony_civi servirà, ovviamente, un server dal quale sia possibile attingere le vostre
6162306a36Sopenharmony_cimodifiche.  Se avete un server accessibile da Internet, configurarlo per
6262306a36Sopenharmony_cieseguire git-daemon è relativamente semplice .  Altrimenti, iniziano a
6362306a36Sopenharmony_cisvilupparsi piattaforme che offrono spazi pubblici, e gratuiti (Github,
6462306a36Sopenharmony_ciper esempio).  Gli sviluppatori permanenti possono ottenere un account
6562306a36Sopenharmony_cisu kernel.org, ma non è proprio facile da ottenere; per maggiori informazioni
6662306a36Sopenharmony_ciconsultate la pagina web https://kernel.org/faq/.
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciIn git è normale avere a che fare con tanti rami.  Ogni linea di sviluppo
6962306a36Sopenharmony_cipuò essere separata in "rami per argomenti" e gestiti indipendentemente.
7062306a36Sopenharmony_ciIn git i rami sono facilissimi, per cui non c'è motivo per non usarli
7162306a36Sopenharmony_ciin libertà.  In ogni caso, non dovreste sviluppare su alcun ramo dal
7262306a36Sopenharmony_ciquale altri potrebbero attingere.  I rami disponibili pubblicamente dovrebbero
7362306a36Sopenharmony_ciessere creati con attenzione; integrate patch dai rami di sviluppo
7462306a36Sopenharmony_cisolo quando sono complete e pronte ad essere consegnate - non prima.
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ciGit offre alcuni strumenti che vi permettono di riscrivere la storia del
7762306a36Sopenharmony_civostro sviluppo.  Una modifica errata (diciamo, una che rompe la bisezione,
7862306a36Sopenharmony_cioppure che ha un qualche tipo di baco evidente) può essere corretta sul posto
7962306a36Sopenharmony_cio fatta sparire completamente dalla storia.  Una serie di patch può essere
8062306a36Sopenharmony_ciriscritta come se fosse stata scritta in cima al ramo principale di oggi,
8162306a36Sopenharmony_cianche se ci avete lavorato per mesi.  Le modifiche possono essere spostate
8262306a36Sopenharmony_ciin modo trasparente da un ramo ad un altro.  E così via.  Un uso giudizioso
8362306a36Sopenharmony_cidi git per revisionare la storia può aiutare nella creazione di una serie
8462306a36Sopenharmony_cidi patch pulite e con meno problemi.
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ciUn uso eccessivo può portare ad altri tipi di problemi, tuttavia, oltre
8762306a36Sopenharmony_cialla semplice ossessione per la creazione di una storia del progetto che sia
8862306a36Sopenharmony_ciperfetta.  Riscrivere la storia riscriverà le patch contenute in quella
8962306a36Sopenharmony_cistoria, trasformando un kernel verificato (si spera) in uno da verificare.
9062306a36Sopenharmony_ciMa, oltre a questo, gli sviluppatori non possono collaborare se non condividono
9162306a36Sopenharmony_cila stessa vista sulla storia del progetto; se riscrivete la storia dalla quale
9262306a36Sopenharmony_cialtri sviluppatori hanno attinto per i loro repositori, renderete la loro vita
9362306a36Sopenharmony_cimolto più difficile.  Quindi tenete conto di questa semplice regola generale:
9462306a36Sopenharmony_cila storia che avete esposto ad altri, generalmente, dovrebbe essere vista come
9562306a36Sopenharmony_ciimmutabile.
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciDunque, una volta che il vostro insieme di patch è stato reso disponibile
9862306a36Sopenharmony_cipubblicamente non dovrebbe essere più sovrascritto.  Git tenterà di imporre
9962306a36Sopenharmony_ciquesta regola, e si rifiuterà di pubblicare nuove patch che non risultino
10062306a36Sopenharmony_ciessere dirette discendenti di quelle pubblicate in precedenza (in altre parole,
10162306a36Sopenharmony_cipatch che non condividono la stessa storia).  È possibile ignorare questo
10262306a36Sopenharmony_cicontrollo, e ci saranno momenti in cui sarà davvero necessario riscrivere
10362306a36Sopenharmony_ciun ramo già pubblicato.  Un esempio è linux-next dove le patch vengono
10462306a36Sopenharmony_cispostate da un ramo all'altro al fine di evitare conflitti.  Ma questo tipo
10562306a36Sopenharmony_cid'azione dovrebbe essere un'eccezione.  Questo è uno dei motivi per cui lo
10662306a36Sopenharmony_cisviluppo dovrebbe avvenire in rami privati (che possono essere sovrascritti
10762306a36Sopenharmony_ciquando lo si ritiene necessario) e reso pubblico solo quando è in uno stato
10862306a36Sopenharmony_ciavanzato.
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciMan mano che il ramo principale (o altri rami su cui avete basato le
11162306a36Sopenharmony_cimodifiche) avanza, diventa allettante l'idea di integrare tutte le patch
11262306a36Sopenharmony_ciper rimanere sempre aggiornati.  Per un ramo privato, il *rebase* può essere
11362306a36Sopenharmony_ciun modo semplice per rimanere aggiornati, ma questa non è un'opzione nel
11462306a36Sopenharmony_cimomento in cui il vostro ramo è stato esposto al mondo intero.
11562306a36Sopenharmony_ci*Merge* occasionali possono essere considerati di buon senso, ma quando
11662306a36Sopenharmony_cidiventano troppo frequenti confondono inutilmente la storia.  La tecnica
11762306a36Sopenharmony_cisuggerita in questi casi è quella di fare *merge* raramente, e più in generale
11862306a36Sopenharmony_cisolo nei momenti di rilascio (per esempio gli -rc del ramo principale).
11962306a36Sopenharmony_ciSe siete nervosi circa alcune patch in particolare, potete sempre fare
12062306a36Sopenharmony_cidei *merge* di test in un ramo privato.  In queste situazioni git "rerere"
12162306a36Sopenharmony_cipuò essere utile; questo strumento si ricorda come i conflitti di *merge*
12262306a36Sopenharmony_cifurono risolti in passato cosicché non dovrete fare lo stesso lavoro due volte.
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ciUna delle lamentele più grosse e ricorrenti sull'uso di strumenti come git
12562306a36Sopenharmony_ciè il grande movimento di patch da un repositorio all'altro che rende
12662306a36Sopenharmony_cifacile l'integrazione nel ramo principale di modifiche mediocri, il tutto
12762306a36Sopenharmony_cisotto il naso dei revisori.  Gli sviluppatori del kernel tendono ad essere
12862306a36Sopenharmony_ciscontenti quando vedono succedere queste cose; preparare un ramo git con
12962306a36Sopenharmony_cipatch che non hanno ricevuto alcuna revisione o completamente avulse, potrebbe
13062306a36Sopenharmony_ciinfluire sulla vostra capacita di proporre, in futuro, l'integrazione dei
13162306a36Sopenharmony_civostri rami.  Citando Linus
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci::
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci	Potete inviarmi le vostre patch, ma per far si che io integri una
13662306a36Sopenharmony_ci	vostra modifica da git, devo sapere che voi sappiate cosa state
13762306a36Sopenharmony_ci	facendo, e ho bisogno di fidarmi *senza* dover passare tutte
13862306a36Sopenharmony_ci	le modifiche manualmente una per una.
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci(https://lwn.net/Articles/224135/).
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ciPer evitare queste situazioni, assicuratevi che tutte le patch in un ramo
14362306a36Sopenharmony_cisiano strettamente correlate al tema delle modifiche; un ramo "driver fixes"
14462306a36Sopenharmony_cinon dovrebbe fare modifiche al codice principale per la gestione della memoria.
14562306a36Sopenharmony_ciE, più importante ancora, non usate un repositorio git per tentare di
14662306a36Sopenharmony_cievitare il processo di revisione.  Pubblicate un sommario di quello che il
14762306a36Sopenharmony_civostro ramo contiene sulle liste di discussione più opportune, e , quando
14862306a36Sopenharmony_cisarà il momento, richiedete che il vostro ramo venga integrato in linux-next.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ciSe e quando altri inizieranno ad inviarvi patch per essere incluse nel
15162306a36Sopenharmony_civostro repositorio, non dovete dimenticare di revisionarle.  Inoltre
15262306a36Sopenharmony_ciassicuratevi di mantenerne le informazioni di paternità; al riguardo git "am"
15362306a36Sopenharmony_cifa del suo meglio, ma potreste dover aggiungere una riga "From:" alla patch
15462306a36Sopenharmony_cinel caso in cui sia arrivata per vie traverse.
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ciQuando richiedete l'integrazione, siate certi di fornire tutte le informazioni:
15762306a36Sopenharmony_cidov'è il vostro repositorio, quale ramo integrare, e quali cambiamenti si
15862306a36Sopenharmony_ciotterranno dall'integrazione.  Il comando git request-pull può essere d'aiuto;
15962306a36Sopenharmony_cipreparerà una richiesta nel modo in cui gli altri sviluppatori se l'aspettano,
16062306a36Sopenharmony_cie verificherà che vi siate ricordati di pubblicare quelle patch su un
16162306a36Sopenharmony_ciserver pubblico.
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ciRevisionare le patch
16462306a36Sopenharmony_ci--------------------
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ciAlcuni lettori potrebbero avere obiezioni sulla presenza di questa sezione
16762306a36Sopenharmony_cinegli "argomenti avanzati" sulla base che anche gli sviluppatori principianti
16862306a36Sopenharmony_cidovrebbero revisionare le patch.  É certamente vero che non c'è modo
16962306a36Sopenharmony_cimigliore di imparare come programmare per il kernel che guardare il codice
17062306a36Sopenharmony_cipubblicato dagli altri.  In aggiunta, i revisori sono sempre troppo pochi;
17162306a36Sopenharmony_ciguardando il codice potete apportare un significativo contributo all'intero
17262306a36Sopenharmony_ciprocesso.
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ciRevisionare il codice potrebbe risultare intimidatorio, specialmente per i
17562306a36Sopenharmony_cinuovi arrivati che potrebbero sentirsi un po' nervosi nel questionare
17662306a36Sopenharmony_ciil codice - in pubblico - pubblicato da sviluppatori più esperti.  Perfino
17762306a36Sopenharmony_ciil codice scritto dagli sviluppatori più esperti può essere migliorato.
17862306a36Sopenharmony_ciForse il suggerimento migliore per i revisori (tutti) è questo: formulate
17962306a36Sopenharmony_cii commenti come domande e non come critiche.  Chiedere "Come viene rilasciato
18062306a36Sopenharmony_ciil *lock* in questo percorso?" funziona sempre molto meglio che
18162306a36Sopenharmony_ci"qui la sincronizzazione è sbagliata".
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ciDiversi sviluppatori revisioneranno il codice con diversi punti di vista.
18462306a36Sopenharmony_ciAlcuni potrebbero concentrarsi principalmente sullo stile del codice e se
18562306a36Sopenharmony_cialcune linee hanno degli spazio bianchi di troppo.  Altri si chiederanno
18662306a36Sopenharmony_cise accettare una modifica interamente è una cosa positiva per il kernel
18762306a36Sopenharmony_cio no.  E altri ancora si focalizzeranno sui problemi di sincronizzazione,
18862306a36Sopenharmony_cil'uso eccessivo di *stack*, problemi di sicurezza, duplicazione del codice
18962306a36Sopenharmony_ciin altri contesti, documentazione, effetti negativi sulle prestazioni, cambi
19062306a36Sopenharmony_ciall'ABI dello spazio utente, eccetera.  Qualunque tipo di revisione è ben
19162306a36Sopenharmony_ciaccetta e di valore, se porta ad avere un codice migliore nel kernel.
192