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

5.Posting.rst (18337B)


      1.. include:: ../disclaimer-ita.rst
      2
      3:Original: :ref:`Documentation/process/5.Posting.rst <development_posting>`
      4:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
      5
      6.. _it_development_posting:
      7
      8Pubblicare modifiche
      9====================
     10
     11Prima o poi arriva il momento in cui il vostro lavoro è pronto per essere
     12presentato alla comunità per una revisione ed eventualmente per la sua
     13inclusione nel ramo principale del kernel.  Com'era prevedibile,
     14la comunità di sviluppo del kernel ha elaborato un insieme di convenzioni
     15e di procedure per la pubblicazione delle patch; seguirle renderà la vita
     16più facile a tutti quanti.  Questo documento cercherà di coprire questi
     17argomenti con un ragionevole livello di dettaglio; più informazioni possono
     18essere trovare nella cartella 'Documentation', nei file
     19:ref:`translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`,
     20:ref:`translations/it_IT/process/submitting-drivers.rst <it_submittingdrivers>`, e
     21:ref:`translations/it_IT/process/submit-checklist.rst <it_submitchecklist>`.
     22
     23
     24Quando pubblicarle
     25------------------
     26
     27C'è sempre una certa resistenza nel pubblicare patch finché non sono
     28veramente "pronte".  Per semplici patch questo non è un problema.
     29Ma quando il lavoro è di una certa complessità, c'è molto da guadagnare
     30dai riscontri che la comunità può darvi prima che completiate il lavoro.
     31Dovreste considerare l'idea di pubblicare un lavoro incompleto, o anche
     32preparare un ramo git disponibile agli sviluppatori interessati, cosicché
     33possano stare al passo col vostro lavoro in qualunque momento.
     34
     35Quando pubblicate del codice che non è considerato pronto per l'inclusione,
     36è bene che lo diciate al momento della pubblicazione.  Inoltre, aggiungete
     37informazioni sulle cose ancora da sviluppare e sui problemi conosciuti.
     38Poche persone guarderanno delle patch che si sa essere fatte a metà,
     39ma quelli che lo faranno penseranno di potervi aiutare a condurre il vostro
     40sviluppo nella giusta direzione.
     41
     42
     43Prima di creare patch
     44---------------------
     45
     46Ci sono un certo numero di cose che dovreste fare prima di considerare
     47l'invio delle patch alla comunità di sviluppo.  Queste cose includono:
     48
     49 - Verificare il codice fino al massimo che vi è consentito. Usate gli
     50   strumenti di debug del kernel, assicuratevi che il kernel compili con
     51   tutte le più ragionevoli combinazioni d'opzioni, usate cross-compilatori
     52   per compilare il codice per differenti architetture, eccetera.
     53
     54 - Assicuratevi che il vostro codice sia conforme alla linee guida del
     55   kernel sullo stile del codice.
     56
     57 - La vostra patch ha delle conseguenze in termini di prestazioni?
     58   Se è così, dovreste eseguire dei *benchmark* che mostrino il loro
     59   impatto (anche positivo); un riassunto dei risultati dovrebbe essere
     60   incluso nella patch.
     61
     62 - Siate certi d'avere i diritti per pubblicare il codice.  Se questo
     63   lavoro è stato fatto per un datore di lavoro, egli avrà dei diritti su
     64   questo lavoro e dovrà quindi essere d'accordo alla sua pubblicazione
     65   con una licenza GPL
     66
     67Come regola generale, pensarci un po' di più prima di inviare il codice
     68ripaga quasi sempre lo sforzo.
     69
     70
     71Preparazione di una patch
     72-------------------------
     73
     74La preparazione delle patch per la pubblicazione può richiedere una quantità
     75di lavoro significativa, ma, ripetiamolo ancora, generalmente sconsigliamo
     76di risparmiare tempo in questa fase, anche sul breve periodo.
     77
     78Le patch devono essere preparate per una specifica versione del kernel.
     79Come regola generale, una patch dovrebbe basarsi sul ramo principale attuale
     80così come lo si trova nei sorgenti git di Linus.  Quando vi basate sul ramo
     81principale, cominciate da un punto di rilascio ben noto - uno stabile o
     82un -rc - piuttosto che creare il vostro ramo da quello principale in un punto
     83a caso.
     84
     85Per facilitare una revisione e una verifica più estesa, potrebbe diventare
     86necessaria la produzione di versioni per -mm, linux-next o i sorgenti di un
     87sottosistema.  Basare questa patch sui suddetti sorgenti potrebbe richiedere
     88un lavoro significativo nella risoluzione dei conflitti e nella correzione dei
     89cambiamenti di API; questo potrebbe variare a seconda dell'area d'interesse
     90della vostra patch e da quello che succede altrove nel kernel.
     91
     92Solo le modifiche più semplici dovrebbero essere preparate come una singola
     93patch; tutto il resto dovrebbe essere preparato come una serie logica di
     94modifiche.  Spezzettare le patch è un po' un'arte; alcuni sviluppatori
     95passano molto tempo nel capire come farlo in modo che piaccia alla comunità.
     96Ci sono alcune regole spannometriche, che comunque possono aiutare
     97considerevolmente:
     98
     99 - La serie di patch che pubblicherete, quasi sicuramente, non sarà
    100   come quella che trovate nel vostro sistema di controllo di versione.
    101   Invece, le vostre modifiche dovranno essere considerate nella loro forma
    102   finale, e quindi separate in parti che abbiano un senso.  Gli sviluppatori
    103   sono interessati in modifiche che siano discrete e indipendenti, non
    104   alla strada che avete percorso per ottenerle.
    105
    106 - Ogni modifica logicamente indipendente dovrebbe essere preparata come una
    107   patch separata.  Queste modifiche possono essere piccole ("aggiunto un
    108   campo in questa struttura") o grandi (l'aggiunta di un driver nuovo,
    109   per esempio), ma dovrebbero essere concettualmente piccole da permettere
    110   una descrizione in una sola riga.  Ogni patch dovrebbe fare modifiche
    111   specifiche che si possano revisionare indipendentemente e di cui si possa
    112   verificare la veridicità.
    113
    114 - Giusto per riaffermare quando detto sopra: non mischiate diversi tipi di
    115   modifiche nella stessa patch.  Se una modifica corregge un baco critico
    116   per la sicurezza, riorganizza alcune strutture, e riformatta il codice,
    117   ci sono buone probabilità che venga ignorata e che la correzione importante
    118   venga persa.
    119
    120 - Ogni modifica dovrebbe portare ad un kernel che compila e funziona
    121   correttamente; se la vostra serie di patch si interrompe a metà il
    122   risultato dovrebbe essere comunque un kernel funzionante.  L'applicazione
    123   parziale di una serie di patch è uno scenario comune nel quale il
    124   comando "git bisect" viene usato per trovare delle regressioni; se il
    125   risultato è un kernel guasto, renderete la vita degli sviluppatori più
    126   difficile così come quella di chi s'impegna nel nobile lavoro di
    127   scovare i problemi.
    128
    129 - Però, non strafate.  Una volta uno sviluppatore pubblicò una serie di 500
    130   patch che modificavano un unico file - un atto che non lo rese la persona
    131   più popolare sulla lista di discussione del kernel.  Una singola patch
    132   può essere ragionevolmente grande fintanto che contenga un singolo
    133   cambiamento *logico*.
    134
    135 - Potrebbe essere allettante l'idea di aggiungere una nuova infrastruttura
    136   come una serie di patch, ma di lasciare questa infrastruttura inutilizzata
    137   finché l'ultima patch della serie non abilita tutto quanto.  Quando è
    138   possibile, questo dovrebbe essere evitato; se questa serie aggiunge delle
    139   regressioni, "bisect" indicherà quest'ultima patch come causa del
    140   problema anche se il baco si trova altrove.  Possibilmente, quando una
    141   patch aggiunge del nuovo codice dovrebbe renderlo attivo immediatamente.
    142
    143Lavorare per creare la serie di patch perfetta potrebbe essere frustrante
    144perché richiede un certo tempo e soprattutto dopo che il "vero lavoro" è
    145già stato fatto.  Quando ben fatto, comunque, è tempo ben speso.
    146
    147
    148Formattazione delle patch e i changelog
    149---------------------------------------
    150
    151Quindi adesso avete una serie perfetta di patch pronte per la pubblicazione,
    152ma il lavoro non è davvero finito.  Ogni patch deve essere preparata con
    153un messaggio che spieghi al resto del mondo, in modo chiaro e veloce,
    154il suo scopo.  Per ottenerlo, ogni patch sarà composta dai seguenti elementi:
    155
    156 - Un campo opzionale "From" col nome dell'autore della patch.  Questa riga
    157   è necessaria solo se state passando la patch di qualcun altro via email,
    158   ma nel dubbio non fa di certo male aggiungerlo.
    159
    160 - Una descrizione di una riga che spieghi cosa fa la patch.  Questo
    161   messaggio dovrebbe essere sufficiente per far comprendere al lettore lo
    162   scopo della patch senza altre informazioni.  Questo messaggio,
    163   solitamente, presenta in testa il nome del sottosistema a cui si riferisce,
    164   seguito dallo scopo della patch.  Per esempio:
    165
    166   ::
    167
    168	gpio: fix build on CONFIG_GPIO_SYSFS=n
    169
    170 - Una riga bianca seguita da una descrizione dettagliata della patch.
    171   Questa descrizione può essere lunga tanto quanto serve; dovrebbe spiegare
    172   cosa fa e perché dovrebbe essere aggiunta al kernel.
    173
    174 - Una o più righe etichette, con, minimo, una riga *Signed-off-by:*
    175   col nome dall'autore della patch.  Queste etichette verranno descritte
    176   meglio più avanti.
    177
    178Gli elementi qui sopra, assieme, formano il changelog di una patch.
    179Scrivere un buon changelog è cruciale ma è spesso un'arte trascurata;
    180vale la pena spendere qualche parola in più al riguardo.  Quando scrivete
    181un changelog dovreste tenere ben presente che molte persone leggeranno
    182le vostre parole.  Queste includono i manutentori di un sotto-sistema, e i
    183revisori che devono decidere se la patch debba essere inclusa o no,
    184le distribuzioni e altri manutentori che cercano di valutare se la patch
    185debba essere applicata su kernel più vecchi, i cacciatori di bachi che si
    186chiederanno se la patch è la causa di un problema che stanno cercando,
    187gli utenti che vogliono sapere com'è cambiato il kernel, e molti altri.
    188Un buon changelog fornisce le informazioni necessarie a tutte queste
    189persone nel modo più diretto e conciso possibile.
    190
    191A questo scopo, la riga riassuntiva dovrebbe descrivere gli effetti della
    192modifica e la motivazione della patch nel modo migliore possibile nonostante
    193il limite di una sola riga.  La descrizione dettagliata può spiegare meglio
    194i temi e fornire maggiori informazioni.  Se una patch corregge un baco,
    195citate, se possibile, il commit che lo introdusse (e per favore, quando
    196citate un commit aggiungete sia il suo identificativo che il titolo),
    197Se il problema è associabile ad un file di log o all' output del compilatore,
    198includeteli al fine d'aiutare gli altri a trovare soluzioni per lo stesso
    199problema.  Se la modifica ha lo scopo di essere di supporto a sviluppi
    200successivi, ditelo.  Se le API interne vengono cambiate, dettagliate queste
    201modifiche e come gli altri dovrebbero agire per applicarle.  In generale,
    202più riuscirete ad entrare nei panni di tutti quelli che leggeranno il
    203vostro changelog, meglio sarà il changelog (e il kernel nel suo insieme).
    204
    205Non serve dirlo, un changelog dovrebbe essere il testo usato nel messaggio
    206di commit in un sistema di controllo di versione.  Sarà seguito da:
    207
    208 - La patch stessa, nel formato unificato per patch ("-u").  Usare
    209   l'opzione "-p" assocerà alla modifica il nome della funzione alla quale
    210   si riferisce, rendendo il risultato più facile da leggere per gli altri.
    211
    212Dovreste evitare di includere nelle patch delle modifiche per file
    213irrilevanti (quelli generati dal processo di generazione, per esempio, o i file
    214di backup del vostro editor).  Il file "dontdiff" nella cartella Documentation
    215potrà esservi d'aiuto su questo punto; passatelo a diff con l'opzione "-X".
    216
    217Le etichette sopra menzionante sono usate per descrivere come i vari
    218sviluppatori sono stati associati allo sviluppo di una patch.  Sono descritte
    219in dettaglio nel documento :ref:`translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`;
    220quello che segue è un breve riassunto.  Ognuna di queste righe ha il seguente
    221formato:
    222
    223::
    224
    225	tag: Full Name <email address>  optional-other-stuff
    226
    227Le etichette in uso più comuni sono:
    228
    229 - Signed-off-by: questa è la certificazione che lo sviluppatore ha il diritto
    230   di sottomettere la patch per l'integrazione nel kernel.  Questo rappresenta
    231   il consenso verso il certificato d'origine degli sviluppatori, il testo
    232   completo potrà essere trovato in
    233   :ref:`Documentation/translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`.
    234   Codice che non presenta una firma appropriata non potrà essere integrato.
    235
    236 - Co-developed-by: indica che la patch è stata cosviluppata da diversi
    237   sviluppatori; viene usato per assegnare più autori (in aggiunta a quello
    238   associato all'etichetta From:) quando più persone lavorano ad una patch.
    239   Ogni Co-developed-by: dev'essere seguito immediatamente da un Signed-off-by:
    240   del corrispondente coautore.  Maggiori dettagli ed esempi sono disponibili
    241   in :ref:`Documentation/translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`.
    242
    243 - Acked-by: indica il consenso di un altro sviluppatore (spesso il manutentore
    244   del codice in oggetto) all'integrazione della patch nel kernel.
    245
    246 - Tested-by: menziona la persona che ha verificato la patch e l'ha trovata
    247   funzionante.
    248
    249 - Reviwed-by: menziona lo sviluppatore che ha revisionato la patch; per
    250   maggiori dettagli leggete la dichiarazione dei revisori in
    251   :ref:`Documentation/translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`
    252
    253 - Reported-by: menziona l'utente che ha riportato il problema corretto da
    254   questa patch; quest'etichetta viene usata per dare credito alle persone
    255   che hanno verificato il codice e ci hanno fatto sapere quando le cose non
    256   funzionavano correttamente.
    257
    258 - Cc: la persona menzionata ha ricevuto una copia della patch ed ha avuto
    259   l'opportunità di commentarla.
    260
    261State attenti ad aggiungere queste etichette alla vostra patch: solo
    262"Cc:" può essere aggiunta senza il permesso esplicito della persona menzionata.
    263
    264Inviare la modifica
    265-------------------
    266
    267Prima di inviare la vostra patch, ci sarebbero ancora un paio di cose di cui
    268dovreste aver cura:
    269
    270 - Siete sicuri che il vostro programma di posta non corromperà le patch?
    271   Le patch che hanno spazi bianchi in libertà o andate a capo aggiunti
    272   dai programmi di posta non funzioneranno per chi le riceve, e spesso
    273   non verranno nemmeno esaminate in dettaglio.  Se avete un qualsiasi dubbio,
    274   inviate la patch a voi stessi e verificate che sia integra.
    275
    276   :ref:`Documentation/translations/it_IT/process/email-clients.rst <it_email_clients>`
    277   contiene alcuni suggerimenti utili sulla configurazione dei programmi
    278   di posta al fine di inviare patch.
    279
    280 - Siete sicuri che la vostra patch non contenga sciocchi errori?  Dovreste
    281   sempre processare le patch con scripts/checkpatch.pl e correggere eventuali
    282   problemi riportati.  Per favore tenete ben presente che checkpatch.pl non è
    283   più intelligente di voi, nonostante sia il risultato di un certa quantità di
    284   ragionamenti su come debba essere una patch per il kernel.  Se seguire
    285   i suggerimenti di checkpatch.pl rende il codice peggiore, allora non fatelo.
    286
    287Le patch dovrebbero essere sempre inviate come testo puro.  Per favore non
    288inviatele come allegati; questo rende molto più difficile, per i revisori,
    289citare parti della patch che si vogliono commentare.  Invece, mettete la vostra
    290patch direttamente nel messaggio.
    291
    292Quando inviate le patch, è importante inviarne una copia a tutte le persone che
    293potrebbero esserne interessate.  Al contrario di altri progetti, il kernel
    294incoraggia le persone a peccare nell'invio di tante copie; non presumente che
    295le persone interessate vedano i vostri messaggi sulla lista di discussione.
    296In particolare le copie dovrebbero essere inviate a:
    297
    298 - I manutentori dei sottosistemi affetti della modifica.  Come descritto
    299   in precedenza, il file MAINTAINERS è il primo luogo dove cercare i nomi
    300   di queste persone.
    301
    302 - Altri sviluppatori che hanno lavorato nello stesso ambiente - specialmente
    303   quelli che potrebbero lavorarci proprio ora.  Usate git potrebbe essere
    304   utile per vedere chi altri ha modificato i file su cui state lavorando.
    305
    306 - Se state rispondendo a un rapporto su un baco, o a una richiesta di
    307   funzionalità, includete anche gli autori di quei rapporti/richieste.
    308
    309 - Inviate una copia alle liste di discussione interessate, o, se nient'altro
    310   è adatto, alla lista linux-kernel
    311
    312 - Se state correggendo un baco, pensate se la patch dovrebbe essere inclusa
    313   nel prossimo rilascio stabile.  Se è così, la lista di discussione
    314   stable@vger.kernel.org dovrebbe riceverne una copia.  Aggiungete anche
    315   l'etichetta "Cc: stable@vger.kernel.org" nella patch stessa; questo
    316   permetterà alla squadra *stable* di ricevere una notifica quando questa
    317   correzione viene integrata nel ramo principale.
    318
    319Quando scegliete i destinatari della patch, è bene avere un'idea di chi
    320pensiate che sia colui che, eventualmente, accetterà la vostra patch e
    321la integrerà.  Nonostante sia possibile inviare patch direttamente a
    322Linus Torvalds, e lasciare che sia lui ad integrarle,solitamente non è la
    323strada migliore da seguire.  Linus è occupato, e ci sono dei manutentori di
    324sotto-sistema che controllano una parte specifica del kernel.  Solitamente,
    325vorreste che siano questi manutentori ad integrare le vostre patch.  Se non
    326c'è un chiaro manutentore, l'ultima spiaggia è spesso Andrew Morton.
    327
    328Le patch devono avere anche un buon oggetto.  Il tipico formato per l'oggetto
    329di una patch assomiglia a questo:
    330
    331::
    332
    333	[PATCH nn/mm] subsys: one-line description of the patch
    334
    335dove "nn" è il numero ordinale della patch, "mm" è il numero totale delle patch
    336nella serie, e "subsys" è il nome del sottosistema interessato.  Chiaramente,
    337nn/mm può essere omesso per una serie composta da una singola patch.
    338
    339Se avete una significative serie di patch, è prassi inviare una descrizione
    340introduttiva come parte zero.  Tuttavia questa convenzione non è universalmente
    341seguita; se la usate, ricordate che le informazioni nell'introduzione non
    342faranno parte del changelog del kernel.  Quindi per favore, assicuratevi che
    343ogni patch abbia un changelog completo.
    344
    345In generale, la seconda parte e quelle successive di una patch "composta"
    346dovrebbero essere inviate come risposta alla prima, cosicché vengano viste
    347come un unico *thread*.  Strumenti come git e quilt hanno comandi per inviare
    348gruppi di patch con la struttura appropriata.  Se avete una serie lunga
    349e state usando git, per favore state alla larga dall'opzione --chain-reply-to
    350per evitare di creare un annidamento eccessivo.