cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

6.Followthrough.rst (13808B)


      1.. include:: ../disclaimer-ita.rst
      2
      3:Original: :ref:`Documentation/process/6.Followthrough.rst <development_followthrough>`
      4:Translator: Alessia Mantegazza <amantegazza@vaga.pv.it>
      5
      6.. _it_development_followthrough:
      7
      8=============
      9Completamento
     10=============
     11
     12A questo punto, avete seguito le linee guida fino a questo punto e, con
     13l'aggiunta delle vostre capacità ingegneristiche, avete pubblicato una serie
     14perfetta di patch.  Uno dei più grandi errori che possono essere commessi
     15persino da sviluppatori kernel esperti è quello di concludere che il
     16lavoro sia ormai finito.  In verità, la pubblicazione delle patch
     17simboleggia una transizione alla fase successiva del processo, con,
     18probabilmente, ancora un po' di lavoro da fare.
     19
     20È raro che una modifica sia così bella alla sua prima pubblicazione che non
     21ci sia alcuno spazio di miglioramento.  Il programma di sviluppo del kernel
     22riconosce questo fatto e quindi, è fortemente orientato al miglioramento
     23del codice pubblicato.  Voi, in qualità di autori del codice, dovrete
     24lavorare con la comunità del kernel per assicurare che il vostro codice
     25mantenga gli standard qualitativi richiesti.  Un fallimento in questo
     26processo è quasi come impedire l'inclusione delle vostre patch nel
     27ramo principale.
     28
     29Lavorare con i revisori
     30=======================
     31
     32Una patch che abbia una certa rilevanza avrà ricevuto numerosi commenti
     33da parte di altri sviluppatori dato che avranno revisionato il codice.
     34Lavorare con i revisori può rivelarsi, per molti sviluppatori, la parte
     35più intimidatoria del processo di sviluppo del kernel.  La vita può esservi
     36resa molto più facile se tenete presente alcuni dettagli:
     37
     38 - Se avete descritto la vostra modifica correttamente, i revisori ne
     39   comprenderanno il valore e il perché vi siete presi il disturbo di
     40   scriverla.  Ma tale valore non li tratterrà dal porvi una domanda
     41   fondamentale: come verrà mantenuto questo codice nel kernel nei prossimi
     42   cinque o dieci anni?  Molti dei cambiamenti che potrebbero esservi
     43   richiesti - da piccoli problemi di stile a sostanziali ristesure -
     44   vengono dalla consapevolezza che Linux resterà in circolazione e in
     45   continuo sviluppo ancora per diverse decadi.
     46
     47 - La revisione del codice è un duro lavoro, ed è un mestiere poco
     48   riconosciuto; le persone ricordano chi ha scritto il codice, ma meno
     49   fama è attribuita a chi lo ha revisionato.  Quindi i revisori potrebbero
     50   divenire burberi, specialmente quando vendono i medesimi errori venire
     51   fatti ancora e ancora.  Se ricevete una revisione che vi sembra abbia
     52   un tono arrabbiato, insultante o addirittura offensivo, resistente alla
     53   tentazione di rispondere a tono.  La revisione riguarda il codice e non
     54   la persona, e i revisori non vi stanno attaccando personalmente.
     55
     56 - Similarmente, i revisori del codice non stanno cercando di promuovere
     57   i loro interessi a vostre spese.  Gli sviluppatori del kernel spesso si
     58   aspettano di lavorare sul kernel per anni, ma sanno che il loro datore
     59   di lavoro può cambiare.  Davvero, senza praticamente eccezioni, loro
     60   stanno lavorando per la creazione del miglior kernel possibile; non
     61   stanno cercando di creare un disagio ad aziende concorrenti.
     62
     63Quello che si sta cercando di dire è che, quando i revisori vi inviano degli
     64appunti dovete fare attenzione alle osservazioni tecniche che vi stanno
     65facendo.  Non lasciate che il loro modo di esprimersi o il vostro orgoglio
     66impediscano che ciò accada.  Quando avete dei suggerimenti sulla revisione,
     67prendetevi il tempo per comprendere cosa il revisore stia cercando di
     68comunicarvi.  Se possibile, sistemate le cose che il revisore vi chiede di
     69modificare.  E rispondete al revisore ringraziandolo e spiegando come
     70intendete fare.
     71
     72Notate che non dovete per forza essere d'accordo con ogni singola modifica
     73suggerita dai revisori.  Se credete che il revisore non abbia compreso
     74il vostro codice, spiegateglielo.  Se avete un'obiezione tecnica da fargli
     75su di una modifica suggerita, spiegatela inserendo anche la vostra soluzione
     76al problema.  Se la vostra spiegazione ha senso, il revisore la accetterà.
     77Tuttavia, la vostra motivazione potrebbe non essere del tutto persuasiva,
     78specialmente se altri iniziano ad essere d'accordo con il revisore.
     79Prendetevi quindi un po' di tempo per pensare ancora alla cosa. Può risultare
     80facile essere accecati dalla propria soluzione al punto che non realizzate che
     81c'è qualcosa di fondamentalmente sbagliato o, magari, non state nemmeno
     82risolvendo il problema giusto.
     83
     84Andrew Morton suggerisce che ogni suggerimento di revisione che non è
     85presente nella modifica del codice dovrebbe essere inserito in un commento
     86aggiuntivo; ciò può essere d'aiuto ai futuri revisori nell'evitare domande
     87che sorgono al primo sguardo.
     88
     89Un errore fatale è quello di ignorare i commenti di revisione nella speranza
     90che se ne andranno.  Non andranno via.  Se pubblicherete nuovamente il
     91codice senza aver risposto ai commenti ricevuti, probabilmente le vostre
     92modifiche non andranno da nessuna parte.
     93
     94Parlando di ripubblicazione del codice: per favore tenete a mente che i
     95revisori non ricorderanno tutti i dettagli del codice che avete pubblicato
     96l'ultima volta. Quindi è sempre una buona idea quella di ricordare ai
     97revisori le questioni sollevate precedetemene e come le avete risolte.
     98I revisori non dovrebbero star lì a cercare all'interno degli archivi per
     99famigliarizzare con ciò che è stato detto l'ultima volta; se li aiutate
    100in questo senso, saranno di umore migliore quando riguarderanno il vostro
    101codice.
    102
    103Se invece avete cercato di far tutto correttamente ma le cose continuano
    104a non andar bene?  Molti disaccordi di natura tecnica possono essere risolti
    105attraverso la discussione, ma ci sono volte dove qualcuno deve prendere
    106una decisione.  Se credete veramente che tale decisione andrà contro di voi
    107ingiustamente, potete sempre tentare di rivolgervi a qualcuno più
    108in alto di voi.  Per cose di questo genere la persona con più potere è
    109Andrew Morton.  Andrew è una figura molto rispettata all'interno della
    110comunità di sviluppo del kernel; lui può spesso sbrogliare situazioni che
    111sembrano irrimediabilmente bloccate.  Rivolgersi ad Andrew non deve essere
    112fatto alla leggera, e non deve essere fatto prima di aver esplorato tutte
    113le altre alternative.  E tenete a mente, ovviamente, che nemmeno lui
    114potrebbe non essere d'accordo con voi.
    115
    116Cosa accade poi
    117===============
    118
    119Se la modifica è ritenuta un elemento valido da essere aggiunta al kernel,
    120e una volta che la maggior parte degli appunti dei revisori sono stati
    121sistemati, il passo successivo solitamente è quello di entrare in un
    122sottosistema gestito da un manutentore.  Come ciò avviene dipende dal
    123sottosistema medesimo; ogni manutentore ha il proprio modo di fare le cose.
    124In particolare, ci potrebbero essere diversi sorgenti - uno, magari, dedicato
    125alle modifiche pianificate per la finestra di fusione successiva, e un altro
    126per il lavoro di lungo periodo.
    127
    128Per le modifiche proposte in aree per le quali non esiste un sottosistema
    129preciso (modifiche di gestione della memoria, per esempio), i sorgenti di
    130ripiego finiscono per essere -mm.  Ed anche le modifiche che riguardano
    131più sottosistemi possono finire in quest'ultimo.
    132
    133L'inclusione nei sorgenti di un sottosistema può comportare per una patch,
    134un alto livello di visibilità.  Ora altri sviluppatori che stanno lavorando
    135in quei medesimi sorgenti avranno le vostre modifiche.  I sottosistemi
    136solitamente riforniscono anche Linux-next, rendendo i propri contenuti
    137visibili all'intera comunità di sviluppo.  A questo punto, ci sono buone
    138possibilità per voi di ricevere ulteriori commenti da un nuovo gruppo di
    139revisori; anche a questi commenti dovrete rispondere come avete già fatto per
    140gli altri.
    141
    142Ciò che potrebbe accadere a questo punto, in base alla natura della vostra
    143modifica, riguarda eventuali conflitti con il lavoro svolto da altri.
    144Nella peggiore delle situazioni, i conflitti più pesanti tra modifiche possono
    145concludersi con la messa a lato di alcuni dei lavori svolti cosicché le
    146modifiche restanti possano funzionare ed essere integrate.  Altre volte, la
    147risoluzione dei conflitti richiederà del lavoro con altri sviluppatori e,
    148possibilmente, lo spostamento di alcune patch da dei sorgenti a degli altri
    149in modo da assicurare che tutto sia applicato in modo pulito.  Questo lavoro
    150può rivelarsi una spina nel fianco, ma consideratevi fortunati: prima
    151dell'avvento dei sorgenti linux-next, questi conflitti spesso emergevano solo
    152durante l'apertura della finestra di integrazione e dovevano essere smaltiti
    153in fretta.  Ora essi possono essere risolti comodamente, prima dell'apertura
    154della finestra.
    155
    156Un giorno, se tutto va bene, vi collegherete e vedrete che la vostra patch
    157è stata inserita nel ramo principale de kernel. Congratulazioni!  Terminati
    158i festeggiamenti (nel frattempo avrete inserito il vostro nome nel file
    159MAINTAINERS) vale la pena ricordare una piccola cosa, ma importante: il
    160lavoro non è ancora finito.  L'inserimento nel ramo principale porta con se
    161nuove sfide.
    162
    163Cominciamo con il dire che ora la visibilità della vostra modifica è
    164ulteriormente cresciuta.  Ci potrebbe portare ad una nuova fase di
    165commenti dagli sviluppatori che non erano ancora a conoscenza della vostra
    166patch.  Ignorarli potrebbe essere allettante dato che non ci sono più
    167dubbi sull'integrazione della modifica.  Resistete a tale tentazione, dovete
    168mantenervi disponibili agli sviluppatori che hanno domande o suggerimenti
    169per voi.
    170
    171Ancora più importante: l'inclusione nel ramo principale mette il vostro
    172codice nelle mani di un gruppo di *tester* molto più esteso.  Anche se avete
    173contribuito ad un driver per un hardware che non è ancora disponibile, sarete
    174sorpresi da quante persone inseriranno il vostro codice nei loro kernel.
    175E, ovviamente, dove ci sono *tester*, ci saranno anche dei rapporti su
    176eventuali bachi.
    177
    178La peggior specie di rapporti sono quelli che indicano delle regressioni.
    179Se la vostra modifica causa una regressione, avrete un gran numero di
    180occhi puntati su di voi; la regressione deve essere sistemata il prima
    181possibile.  Se non vorrete o non sarete capaci di sistemarla (e nessuno
    182lo farà per voi), la vostra modifica sarà quasi certamente rimossa durante
    183la fase di stabilizzazione.  Oltre alla perdita di tutto il lavoro svolto
    184per far si che la vostra modifica fosse inserita nel ramo principale,
    185l'avere una modifica rimossa a causa del fallimento nel sistemare una
    186regressione, potrebbe rendere più difficile per voi far accettare
    187il vostro lavoro in futuro.
    188
    189Dopo che ogni regressione è stata affrontata, ci potrebbero essere altri
    190bachi ordinari da "sconfiggere".  Il periodo di stabilizzazione è la
    191vostra migliore opportunità per sistemare questi bachi e assicurarvi che
    192il debutto del vostro codice nel ramo principale del kernel sia il più solido
    193possibile.  Quindi, per favore, rispondete ai rapporti sui bachi e ponete
    194rimedio, se possibile, a tutti i problemi.  È a questo che serve il periodo
    195di stabilizzazione; potete iniziare creando nuove fantastiche modifiche
    196una volta che ogni problema con le vecchie sia stato risolto.
    197
    198Non dimenticate che esistono altre pietre miliari che possono generare
    199rapporti sui bachi: il successivo rilascio stabile, quando una distribuzione
    200importante usa una versione del kernel nel quale è presente la vostra
    201modifica, eccetera.  Il continuare a rispondere a questi rapporti è fonte di
    202orgoglio per il vostro lavoro.  Se questa non è una sufficiente motivazione,
    203allora, è anche consigliabile considera che la comunità di sviluppo ricorda
    204gli sviluppatori che hanno perso interesse per il loro codice una volta
    205integrato.  La prossima volta che pubblicherete una patch, la comunità
    206la valuterà anche sulla base del fatto che non sarete disponibili a
    207prendervene cura anche nel futuro.
    208
    209
    210Altre cose che posso accadere
    211=============================
    212
    213Un giorno, potreste aprire la vostra email e vedere che qualcuno vi ha
    214inviato una patch per il vostro codice.  Questo, dopo tutto, è uno dei
    215vantaggi di avere il vostro codice "là fuori".  Se siete d'accordo con
    216la modifica, potrete anche inoltrarla ad un manutentore di sottosistema
    217(assicuratevi di includere la riga "From:" cosicché l'attribuzione sia
    218corretta, e aggiungete una vostra firma "Signed-off-by"), oppure inviate
    219un "Acked-by:" e lasciate che l'autore originale la invii.
    220
    221Se non siete d'accordo con la patch, inviate una risposta educata
    222spiegando il perché.  Se possibile, dite all'autore quali cambiamenti
    223servirebbero per rendere la patch accettabile da voi.  C'è una certa
    224riluttanza nell'inserire modifiche con un conflitto fra autore
    225e manutentore del codice, ma solo fino ad un certo punto.  Se siete visti
    226come qualcuno che blocca un buon lavoro senza motivo, quelle patch vi
    227passeranno oltre e andranno nel ramo principale in ogni caso. Nel kernel
    228Linux, nessuno ha potere di veto assoluto su alcun codice.  Eccezione
    229fatta per Linus, forse.
    230
    231In rarissime occasioni, potreste vedere qualcosa di completamente diverso:
    232un altro sviluppatore che pubblica una soluzione differente al vostro
    233problema.  A questo punto, c'è una buona probabilità che una delle due
    234modifiche non verrà integrata, e il "c'ero prima io" non è considerato
    235un argomento tecnico rilevante.  Se la modifica di qualcun'altro rimpiazza
    236la vostra ed entra nel ramo principale, esiste un unico modo di reagire:
    237siate contenti che il vostro problema sia stato risolto e andate avanti con
    238il vostro lavoro.  L'avere un vostro lavoro spintonato da parte in questo
    239modo può essere avvilente e scoraggiante, ma la comunità ricorderà come
    240avrete reagito anche dopo che avrà dimenticato quale fu la modifica accettata.