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

submitting-patches.rst (38009B)


      1.. include:: ../disclaimer-ita.rst
      2
      3:Original: :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
      4:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
      5
      6.. _it_submittingpatches:
      7
      8Inviare patch: la guida essenziale per vedere il vostro codice nel kernel
      9=========================================================================
     10
     11Una persona o un'azienda che volesse inviare una patch al kernel potrebbe
     12sentirsi scoraggiata dal processo di sottomissione, specialmente quando manca
     13una certa familiarità col "sistema".  Questo testo è una raccolta di
     14suggerimenti che aumenteranno significativamente le probabilità di vedere le
     15vostre patch accettate.
     16
     17Questo documento contiene un vasto numero di suggerimenti concisi. Per maggiori
     18dettagli su come funziona il processo di sviluppo del kernel leggete
     19Documentation/translations/it_IT/process/development-process.rst. Leggete anche
     20Documentation/translations/it_IT/process/submit-checklist.rst per una lista di
     21punti da verificare prima di inviare del codice. Se state inviando un driver,
     22allora leggete anche
     23Documentation/translations/it_IT/process/submitting-drivers.rst; per delle patch
     24relative alle associazioni per Device Tree leggete
     25Documentation/translations/it_IT/process/submitting-patches.rst.
     26
     27Questa documentazione assume che sappiate usare ``git`` per preparare le patch.
     28Se non siete pratici di ``git``, allora è bene che lo impariate;
     29renderà la vostra vita di sviluppatore del kernel molto più semplice.
     30
     31Ottenere i sorgenti attuali
     32---------------------------
     33
     34Se non avete un repositorio coi sorgenti del kernel più recenti, allora usate
     35``git`` per ottenerli.  Vorrete iniziare col repositorio principale che può
     36essere recuperato col comando::
     37
     38  git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
     39
     40Notate, comunque, che potreste non voler sviluppare direttamente coi sorgenti
     41principali del kernel.  La maggior parte dei manutentori hanno i propri
     42sorgenti e desiderano che le patch siano preparate basandosi su di essi.
     43Guardate l'elemento **T:** per un determinato sottosistema nel file MAINTANERS
     44che troverete nei sorgenti, o semplicemente chiedete al manutentore nel caso
     45in cui i sorgenti da usare non siano elencati il quel file.
     46
     47.. _it_describe_changes:
     48
     49Descrivete le vostre modifiche
     50------------------------------
     51
     52Descrivete il vostro problema. Esiste sempre un problema che via ha spinto
     53ha fare il vostro lavoro, che sia la correzione di un baco da una riga o una
     54nuova funzionalità da 5000 righe di codice.  Convincete i revisori che vale
     55la pena risolvere il vostro problema e che ha senso continuare a leggere oltre
     56al primo paragrafo.
     57
     58Descrivete ciò che sarà visibile agli utenti.  Chiari incidenti nel sistema
     59e blocchi sono abbastanza convincenti, ma non tutti i bachi sono così evidenti.
     60Anche se il problema è stato scoperto durante la revisione del codice,
     61descrivete l'impatto che questo avrà sugli utenti.  Tenete presente che
     62la maggior parte delle installazioni Linux usa un kernel che arriva dai
     63sorgenti stabili o dai sorgenti di una distribuzione particolare che prende
     64singolarmente le patch dai sorgenti principali; quindi, includete tutte
     65le informazioni che possono essere utili a capire le vostre modifiche:
     66le circostanze che causano il problema, estratti da dmesg, descrizioni di
     67un incidente di sistema, prestazioni di una regressione, picchi di latenza,
     68blocchi, eccetera.
     69
     70Quantificare le ottimizzazioni e i compromessi.  Se affermate di aver
     71migliorato le prestazioni, il consumo di memoria, l'impatto sollo stack,
     72o la dimensione del file binario, includete dei numeri a supporto della
     73vostra dichiarazione.  Ma ricordatevi di descrivere anche eventuali costi
     74che non sono ovvi.  Solitamente le ottimizzazioni non sono gratuite, ma sono
     75un compromesso fra l'uso di CPU, la memoria e la leggibilità; o, quando si
     76parla di ipotesi euristiche, fra differenti carichi.  Descrivete i lati
     77negativi che vi aspettate dall'ottimizzazione cosicché i revisori possano
     78valutare i costi e i benefici.
     79
     80Una volta che il problema è chiaro, descrivete come lo risolvete andando
     81nel dettaglio tecnico.  È molto importante che descriviate la modifica
     82in un inglese semplice cosicché i revisori possano verificare che il codice si
     83comporti come descritto.
     84
     85I manutentori vi saranno grati se scrivete la descrizione della patch in un
     86formato che sia compatibile con il gestore dei sorgenti usato dal kernel,
     87``git``, come un "commit log".  Leggete :ref:`it_explicit_in_reply_to`.
     88
     89Risolvete solo un problema per patch.  Se la vostra descrizione inizia ad
     90essere lunga, potrebbe essere un segno che la vostra patch necessita d'essere
     91divisa. Leggete :ref:`split_changes`.
     92
     93Quando inviate o rinviate una patch o una serie, includete la descrizione
     94completa delle modifiche e la loro giustificazione.  Non limitatevi a dire che
     95questa è la versione N della patch (o serie).  Non aspettatevi che i
     96manutentori di un sottosistema vadano a cercare le versioni precedenti per
     97cercare la descrizione da aggiungere.  In pratica, la patch (o serie) e la sua
     98descrizione devono essere un'unica cosa.  Questo aiuta i manutentori e i
     99revisori.  Probabilmente, alcuni revisori non hanno nemmeno ricevuto o visto
    100le versioni precedenti della patch.
    101
    102Descrivete le vostro modifiche usando l'imperativo, per esempio "make xyzzy
    103do frotz" piuttosto che "[This patch] makes xyzzy do frotz" or "[I] changed
    104xyzzy to do frotz", come se steste dando ordini al codice di cambiare il suo
    105comportamento.
    106
    107Se la patch corregge un baco conosciuto, fare riferimento a quel baco inserendo
    108il suo numero o il suo URL.  Se la patch è la conseguenza di una discussione
    109su una lista di discussione, allora fornite l'URL all'archivio di quella
    110discussione;  usate i collegamenti a https://lore.kernel.org/ con il
    111``Message-Id``, in questo modo vi assicurerete che il collegamento non diventi
    112invalido nel tempo.
    113
    114Tuttavia, cercate di rendere la vostra spiegazione comprensibile anche senza
    115far riferimento a fonti esterne.  In aggiunta ai collegamenti a bachi e liste
    116di discussione, riassumente i punti più importanti della discussione che hanno
    117portato alla creazione della patch.
    118
    119Se volete far riferimento a uno specifico commit, non usate solo
    120l'identificativo SHA-1.  Per cortesia, aggiungete anche la breve riga
    121riassuntiva del commit per rendere la chiaro ai revisori l'oggetto.
    122Per esempio::
    123
    124	Commit e21d2170f36602ae2708 ("video: remove unnecessary
    125	platform_set_drvdata()") removed the unnecessary
    126	platform_set_drvdata(), but left the variable "dev" unused,
    127	delete it.
    128
    129Dovreste anche assicurarvi di usare almeno i primi 12 caratteri
    130dell'identificativo SHA-1.  Il repositorio del kernel ha *molti* oggetti e
    131questo rende possibile la collisione fra due identificativi con pochi
    132caratteri.  Tenete ben presente che anche se oggi non ci sono collisioni con il
    133vostro identificativo a 6 caratteri, potrebbero essercene fra 5 anni da oggi.
    134
    135Se la vostra patch corregge un baco in un commit specifico, per esempio avete
    136trovato un problema usando ``git bisect``, per favore usate l'etichetta
    137'Fixes:' indicando i primi 12 caratteri dell'identificativo SHA-1 seguiti
    138dalla riga riassuntiva.  Per esempio::
    139
    140	Fixes: e21d2170f366 ("video: remove unnecessary platform_set_drvdata()")
    141
    142La seguente configurazione di ``git config`` può essere usata per formattare
    143i risultati dei comandi ``git log`` o ``git show`` come nell'esempio
    144precedente::
    145
    146	[core]
    147		abbrev = 12
    148	[pretty]
    149		fixes = Fixes: %h (\"%s\")
    150
    151Un esempio::
    152
    153       $ git log -1 --pretty=fixes 54a4f0239f2e
    154       Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
    155
    156.. _it_split_changes:
    157
    158Separate le vostre modifiche
    159----------------------------
    160
    161Separate ogni **cambiamento logico** in patch distinte.
    162
    163Per esempio, se i vostri cambiamenti per un singolo driver includono
    164sia delle correzioni di bachi che miglioramenti alle prestazioni,
    165allora separateli in due o più patch.  Se i vostri cambiamenti includono
    166un aggiornamento dell'API e un nuovo driver che lo sfrutta, allora separateli
    167in due patch.
    168
    169D'altro canto, se fate una singola modifica su più file, raggruppate tutte
    170queste modifiche in una singola patch.  Dunque, un singolo cambiamento logico
    171è contenuto in una sola patch.
    172
    173Il punto da ricordare è che ogni modifica dovrebbe fare delle modifiche
    174che siano facilmente comprensibili e che possano essere verificate dai revisori.
    175Ogni patch dovrebbe essere giustificabile di per sé.
    176
    177Se al fine di ottenere un cambiamento completo una patch dipende da un'altra,
    178va bene.  Semplicemente scrivete una nota nella descrizione della patch per
    179farlo presente: **"this patch depends on patch X"**.
    180
    181Quando dividete i vostri cambiamenti in una serie di patch, prestate
    182particolare attenzione alla verifica di ogni patch della serie; per ognuna
    183il kernel deve compilare ed essere eseguito correttamente.  Gli sviluppatori
    184che usano ``git bisect`` per scovare i problemi potrebbero finire nel mezzo
    185della vostra serie in un punto qualsiasi; non vi saranno grati se nel mezzo
    186avete introdotto dei bachi.
    187
    188Se non potete condensare la vostra serie di patch in una più piccola, allora
    189pubblicatene una quindicina alla volta e aspettate che vengano revisionate
    190ed integrate.
    191
    192
    1934) Verificate lo stile delle vostre modifiche
    194---------------------------------------------
    195
    196Controllate che la vostra patch non violi lo stile del codice, maggiori
    197dettagli sono disponibili in Documentation/translations/it_IT/process/coding-style.rst.
    198Non farlo porta semplicemente a una perdita di tempo da parte dei revisori e
    199voi vedrete la vostra patch rifiutata, probabilmente senza nemmeno essere stata
    200letta.
    201
    202Un'eccezione importante si ha quando del codice viene spostato da un file
    203ad un altro -- in questo caso non dovreste modificare il codice spostato
    204per nessun motivo, almeno non nella patch che lo sposta.  Questo separa
    205chiaramente l'azione di spostare il codice e il vostro cambiamento.
    206Questo aiuta enormemente la revisione delle vere differenze e permette agli
    207strumenti di tenere meglio la traccia della storia del codice.
    208
    209Prima di inviare una patch, verificatene lo stile usando l'apposito
    210verificatore (scripts/checkpatch.pl).  Da notare, comunque, che il verificator
    211di stile dovrebbe essere visto come una guida, non come un sostituto al
    212giudizio umano.  Se il vostro codice è migliore nonostante una violazione
    213dello stile, probabilmente è meglio lasciarlo com'è.
    214
    215Il verificatore ha tre diversi livelli di severità:
    216 - ERROR: le cose sono molto probabilmente sbagliate
    217 - WARNING: le cose necessitano d'essere revisionate con attenzione
    218 - CHECK: le cose necessitano di un pensierino
    219
    220Dovreste essere in grado di giustificare tutte le eventuali violazioni rimaste
    221nella vostra patch.
    222
    223
    2245) Selezionate i destinatari della vostra patch
    225-----------------------------------------------
    226
    227Dovreste sempre inviare una copia della patch ai manutentori dei sottosistemi
    228interessati dalle modifiche; date un'occhiata al file MAINTAINERS e alla storia
    229delle revisioni per scoprire chi si occupa del codice.  Lo script
    230scripts/get_maintainer.pl può esservi d'aiuto.  Se non riuscite a trovare un
    231manutentore per il sottosistema su cui state lavorando, allora Andrew Morton
    232(akpm@linux-foundation.org) sarà la vostra ultima possibilità.
    233
    234Normalmente, dovreste anche scegliere una lista di discussione a cui inviare la
    235vostra serie di patch. La lista di discussione linux-kernel@vger.kernel.org
    236dovrebbe essere usata per inviare tutte le patch, ma il traffico è tale per cui
    237diversi sviluppatori la trascurano. Guardate nel file MAINTAINERS per trovare la
    238lista di discussione dedicata ad un sottosistema; probabilmente lì la vostra
    239patch riceverà molta più attenzione. Tuttavia, per favore, non spammate le liste
    240di discussione che non sono interessate al vostro lavoro.
    241
    242Molte delle liste di discussione relative al kernel vengono ospitate su
    243vger.kernel.org; potete trovare un loro elenco alla pagina
    244http://vger.kernel.org/vger-lists.html.  Tuttavia, ci sono altre liste di
    245discussione ospitate altrove.
    246
    247Non inviate più di 15 patch alla volta sulle liste di discussione vger!!!
    248
    249L'ultimo giudizio sull'integrazione delle modifiche accettate spetta a
    250Linux Torvalds.  Il suo indirizzo e-mail è <torvalds@linux-foundation.org>.
    251Riceve moltissime e-mail, e, a questo punto, solo poche patch passano
    252direttamente attraverso il suo giudizio; quindi, dovreste fare del vostro
    253meglio per -evitare di- inviargli e-mail.
    254
    255Se avete una patch che corregge un baco di sicurezza che potrebbe essere
    256sfruttato, inviatela a security@kernel.org.  Per bachi importanti, un breve
    257embargo potrebbe essere preso in considerazione per dare il tempo alle
    258distribuzioni di prendere la patch e renderla disponibile ai loro utenti;
    259in questo caso, ovviamente, la patch non dovrebbe essere inviata su alcuna
    260lista di discussione pubblica. Leggete anche
    261Documentation/admin-guide/security-bugs.rst.
    262
    263Patch che correggono bachi importanti su un kernel già rilasciato, dovrebbero
    264essere inviate ai manutentori dei kernel stabili aggiungendo la seguente riga::
    265
    266  Cc: stable@vger.kernel.org
    267
    268nella vostra patch, nell'area dedicata alle firme (notate, NON come destinatario
    269delle e-mail).  In aggiunta a questo file, dovreste leggere anche
    270Documentation/translations/it_IT/process/stable-kernel-rules.rst.
    271
    272Se le modifiche hanno effetti sull'interfaccia con lo spazio utente, per favore
    273inviate una patch per le pagine man ai manutentori di suddette pagine (elencati
    274nel file MAINTAINERS), o almeno una notifica circa la vostra modifica,
    275cosicché l'informazione possa trovare la sua strada nel manuale.  Le modifiche
    276all'API dello spazio utente dovrebbero essere inviate in copia anche a
    277linux-api@vger.kernel.org.
    278
    279Niente: MIME, links, compressione, allegati.  Solo puro testo
    280-------------------------------------------------------------
    281
    282Linus e gli altri sviluppatori del kernel devono poter commentare
    283le modifiche che sottomettete.  Per uno sviluppatore è importante
    284essere in grado di "citare" le vostre modifiche, usando normali
    285programmi di posta elettronica, cosicché sia possibile commentare
    286una porzione specifica del vostro codice.
    287
    288Per questa ragione tutte le patch devono essere inviate via e-mail
    289come testo. Il modo più facile, e quello raccomandato, è con ``git
    290send-email``.  Al sito https://git-send-email.io è disponibile una
    291guida interattiva sull'uso di ``git send-email``.
    292
    293Se decidete di non usare ``git send-email``:
    294
    295.. warning::
    296
    297  Se decidete di copiare ed incollare la patch nel corpo dell'e-mail, state
    298  attenti che il vostro programma non corrompa il contenuto con andate
    299  a capo automatiche.
    300
    301La patch non deve essere un allegato MIME, compresso o meno.  Molti
    302dei più popolari programmi di posta elettronica non trasmettono un allegato
    303MIME come puro testo, e questo rende impossibile commentare il vostro codice.
    304Inoltre, un allegato MIME rende l'attività di Linus più laboriosa, diminuendo
    305così la possibilità che il vostro allegato-MIME venga accettato.
    306
    307Eccezione: se il vostro servizio di posta storpia le patch, allora qualcuno
    308potrebbe chiedervi di rinviarle come allegato MIME.
    309
    310Leggete Documentation/translations/it_IT/process/email-clients.rst
    311per dei suggerimenti sulla configurazione del programmi di posta elettronica
    312per l'invio di patch intatte.
    313
    314Rispondere ai commenti di revisione
    315-----------------------------------
    316
    317In risposta alla vostra email, quasi certamente i revisori vi
    318invieranno dei commenti su come migliorare la vostra patch.  Dovete
    319rispondere a questi commenti; ignorare i revisori è un ottimo modo per
    320essere ignorati.  Riscontri o domande che non conducono ad una
    321modifica del codice quasi certamente dovrebbero portare ad un commento
    322nel changelog cosicché il prossimo revisore potrà meglio comprendere
    323cosa stia accadendo.
    324
    325Assicuratevi di dire ai revisori quali cambiamenti state facendo e di
    326ringraziarli per il loro tempo.  Revisionare codice è un lavoro faticoso e che
    327richiede molto tempo, e a volte i revisori diventano burberi.  Tuttavia, anche
    328in questo caso, rispondete con educazione e concentratevi sul problema che
    329hanno evidenziato.
    330
    331Leggete Documentation/translations/it_IT/process/email-clients.rst per
    332le raccomandazioni sui programmi di posta elettronica e l'etichetta da usare
    333sulle liste di discussione.
    334
    335Non scoraggiatevi - o impazientitevi
    336------------------------------------
    337
    338Dopo che avete inviato le vostre modifiche, siate pazienti e aspettate.
    339I revisori sono persone occupate e potrebbero non ricevere la vostra patch
    340immediatamente.
    341
    342Un tempo, le patch erano solite scomparire nel vuoto senza alcun commento,
    343ma ora il processo di sviluppo funziona meglio.  Dovreste ricevere commenti
    344in una settimana o poco più; se questo non dovesse accadere, assicuratevi di
    345aver inviato le patch correttamente.  Aspettate almeno una settimana prima di
    346rinviare le modifiche o sollecitare i revisori - probabilmente anche di più
    347durante la finestra d'integrazione.
    348
    349Potete anche rinviare la patch, o la serie di patch, dopo un paio di settimane
    350aggiungendo la parola "RESEND" nel titolo::
    351
    352    [PATCH Vx RESEND] sub/sys: Condensed patch summary
    353
    354Ma non aggiungete "RESEND" quando state sottomettendo una versione modificata
    355della vostra patch, o serie di patch - "RESEND" si applica solo alla
    356sottomissione di patch, o serie di patch, che non hanno subito modifiche
    357dall'ultima volta che sono state inviate.
    358
    359Aggiungete PATCH nell'oggetto
    360-----------------------------
    361
    362Dato l'alto volume di e-mail per Linus, e la lista linux-kernel, è prassi
    363prefiggere il vostro oggetto con [PATCH].  Questo permette a Linus e agli
    364altri sviluppatori del kernel di distinguere facilmente le patch dalle altre
    365discussioni.
    366
    367``git send-email`` lo fa automaticamente.
    368
    369
    370Firmate il vostro lavoro - Il certificato d'origine dello sviluppatore
    371----------------------------------------------------------------------
    372
    373Per migliorare la tracciabilità su "chi ha fatto cosa", specialmente per
    374quelle patch che per raggiungere lo stadio finale passano attraverso
    375diversi livelli di manutentori, abbiamo introdotto la procedura di "firma"
    376delle patch che vengono inviate per e-mail.
    377
    378La firma è una semplice riga alla fine della descrizione della patch che
    379certifica che l'avete scritta voi o che avete il diritto di pubblicarla
    380come patch open-source.  Le regole sono abbastanza semplici: se potete
    381certificare quanto segue:
    382
    383Il certificato d'origine dello sviluppatore 1.1
    384^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    385
    386Contribuendo a questo progetto, io certifico che:
    387
    388        (a) Il contributo è stato creato interamente, o in parte, da me e che
    389            ho il diritto di inviarlo in accordo con la licenza open-source
    390            indicata nel file; oppure
    391
    392        (b) Il contributo è basato su un lavoro precedente che, nei limiti
    393            della mia conoscenza, è coperto da un'appropriata licenza
    394            open-source che mi da il diritto di modificarlo e inviarlo,
    395            le cui modifiche sono interamente o in parte mie, in accordo con
    396            la licenza open-source (a meno che non abbia il permesso di usare
    397            un'altra licenza) indicata nel file; oppure
    398
    399        (c) Il contributo mi è stato fornito direttamente da qualcuno che
    400            ha certificato (a), (b) o (c) e non l'ho modificata.
    401
    402        (d) Capisco e concordo col fatto che questo progetto e i suoi
    403            contributi sono pubblici e che un registro dei contributi (incluse
    404            tutte le informazioni personali che invio con essi, inclusa la mia
    405            firma) verrà mantenuto indefinitamente e che possa essere
    406            ridistribuito in accordo con questo progetto o le licenze
    407            open-source coinvolte.
    408
    409poi dovete solo aggiungere una riga che dice::
    410
    411	Signed-off-by: Random J Developer <random@developer.example.org>
    412
    413usando il vostro vero nome (spiacenti, non si accettano pseudonimi o
    414contributi anonimi). Questo verrà fatto automaticamente se usate
    415``git commit -s``. Anche il ripristino di uno stato precedente dovrebbe
    416includere "Signed-off-by", se usate ``git revert -s`` questo verrà
    417fatto automaticamente.
    418
    419Alcune persone aggiungono delle etichette alla fine.  Per ora queste verranno
    420ignorate, ma potete farlo per meglio identificare procedure aziendali interne o
    421per aggiungere dettagli circa la firma.
    422
    423In seguito al SoB (Signed-off-by:) dell'autore ve ne sono altri da
    424parte di tutte quelle persone che si sono occupate della gestione e
    425del trasporto della patch. Queste però non sono state coinvolte nello
    426sviluppo, ma la loro sequenza d'apparizione ci racconta il percorso
    427**reale** che una patch a intrapreso dallo sviluppatore, fino al
    428manutentore, per poi giungere a Linus.
    429
    430
    431Quando utilizzare Acked-by:, Cc:, e Co-developed-by:
    432----------------------------------------------------
    433
    434L'etichetta Signed-off-by: indica che il firmatario è stato coinvolto nello
    435sviluppo della patch, o che era nel suo percorso di consegna.
    436
    437Se una persona non è direttamente coinvolta con la preparazione o gestione
    438della patch ma desidera firmare e mettere agli atti la loro approvazione,
    439allora queste persone possono chiedere di aggiungere al changelog della patch
    440una riga Acked-by:.
    441
    442Acked-by: viene spesso utilizzato dai manutentori del sottosistema in oggetto
    443quando quello stesso manutentore non ha contribuito né trasmesso la patch.
    444
    445Acked-by: non è formale come Signed-off-by:.  Questo indica che la persona ha
    446revisionato la patch e l'ha trovata accettabile.  Per cui, a volte, chi
    447integra le patch convertirà un "sì, mi sembra che vada bene" in un Acked-by:
    448(ma tenete presente che solitamente è meglio chiedere esplicitamente).
    449
    450Acked-by: non indica l'accettazione di un'intera patch.  Per esempio, quando
    451una patch ha effetti su diversi sottosistemi e ha un Acked-by: da un
    452manutentore di uno di questi, significa che il manutentore accetta quella
    453parte di codice relativa al sottosistema che mantiene.  Qui dovremmo essere
    454giudiziosi.  Quando si hanno dei dubbi si dovrebbe far riferimento alla
    455discussione originale negli archivi della lista di discussione.
    456
    457Se una persona ha avuto l'opportunità di commentare la patch, ma non lo ha
    458fatto, potete aggiungere l'etichetta ``Cc:`` alla patch.  Questa è l'unica
    459etichetta che può essere aggiunta senza che la persona in questione faccia
    460alcunché - ma dovrebbe indicare che la persona ha ricevuto una copia della
    461patch.  Questa etichetta documenta che terzi potenzialmente interessati sono
    462stati inclusi nella discussione.
    463
    464Co-developed-by: indica che la patch è stata cosviluppata da diversi
    465sviluppatori; viene usato per assegnare più autori (in aggiunta a quello
    466associato all'etichetta From:) quando più persone lavorano ad una patch.  Dato
    467che Co-developed-by: implica la paternità della patch, ogni Co-developed-by:
    468dev'essere seguito immediatamente dal Signed-off-by: del corrispondente
    469coautore. Qui si applica la procedura di base per sign-off, in pratica
    470l'ordine delle etichette Signed-off-by: dovrebbe riflettere il più possibile
    471l'ordine cronologico della storia della patch, indipendentemente dal fatto che
    472la paternità venga assegnata via From: o Co-developed-by:. Da notare che
    473l'ultimo Signed-off-by: dev'essere quello di colui che ha sottomesso la patch.
    474
    475Notate anche che l'etichetta From: è opzionale quando l'autore in From: è
    476anche la persona (e indirizzo email) indicato nel From: dell'intestazione
    477dell'email.
    478
    479Esempio di una patch sottomessa dall'autore in From:::
    480
    481	<changelog>
    482
    483	Co-developed-by: First Co-Author <first@coauthor.example.org>
    484	Signed-off-by: First Co-Author <first@coauthor.example.org>
    485	Co-developed-by: Second Co-Author <second@coauthor.example.org>
    486	Signed-off-by: Second Co-Author <second@coauthor.example.org>
    487	Signed-off-by: From Author <from@author.example.org>
    488
    489Esempio di una patch sottomessa dall'autore Co-developed-by:::
    490
    491	From: From Author <from@author.example.org>
    492
    493	<changelog>
    494
    495	Co-developed-by: Random Co-Author <random@coauthor.example.org>
    496	Signed-off-by: Random Co-Author <random@coauthor.example.org>
    497	Signed-off-by: From Author <from@author.example.org>
    498	Co-developed-by: Submitting Co-Author <sub@coauthor.example.org>
    499	Signed-off-by: Submitting Co-Author <sub@coauthor.example.org>
    500
    501Utilizzare Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: e Fixes:
    502-------------------------------------------------------------------------
    503
    504L'etichetta Reported-by da credito alle persone che trovano e riportano i bachi
    505e si spera che questo possa ispirarli ad aiutarci nuovamente in futuro.
    506Rammentate che se il baco è stato riportato in privato, dovrete chiedere il
    507permesso prima di poter utilizzare l'etichetta Reported-by.
    508
    509L'etichetta Tested-by: indica che la patch è stata verificata con successo
    510(su un qualche sistema) dalla persona citata.  Questa etichetta informa i
    511manutentori che qualche verifica è stata fatta, fornisce un mezzo per trovare
    512persone che possano verificare il codice in futuro, e garantisce che queste
    513stesse persone ricevano credito per il loro lavoro.
    514
    515Reviewd-by:, invece, indica che la patch è stata revisionata ed è stata
    516considerata accettabile in accordo con la dichiarazione dei revisori:
    517
    518Dichiarazione di svista dei revisori
    519^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    520
    521Offrendo la mia etichetta Reviewed-by, dichiaro quanto segue:
    522
    523	 (a) Ho effettuato una revisione tecnica di questa patch per valutarne
    524	     l'adeguatezza ai fini dell'inclusione nel ramo principale del
    525	     kernel.
    526
    527	 (b) Tutti i problemi e le domande riguardanti la patch sono stati
    528	     comunicati al mittente.  Sono soddisfatto dalle risposte
    529	     del mittente.
    530
    531	 (c) Nonostante ci potrebbero essere cose migliorabili in queste
    532	     sottomissione, credo che sia, in questo momento, (1) una modifica
    533	     di interesse per il kernel, e (2) libera da problemi che
    534	     potrebbero metterne in discussione l'integrazione.
    535
    536	 (d) Nonostante abbia revisionato la patch e creda che vada bene,
    537	     non garantisco (se non specificato altrimenti) che questa
    538	     otterrà quello che promette o funzionerà correttamente in tutte
    539	     le possibili situazioni.
    540
    541L'etichetta Reviewed-by è la dichiarazione di un parere sulla bontà di
    542una modifica che si ritiene appropriata e senza alcun problema tecnico
    543importante.  Qualsiasi revisore interessato (quelli che lo hanno fatto)
    544possono offrire il proprio Reviewed-by per la patch.  Questa etichetta serve
    545a dare credito ai revisori e a informare i manutentori sul livello di revisione
    546che è stato fatto sulla patch.  L'etichetta Reviewd-by, quando fornita da
    547revisori conosciuti per la loro conoscenza sulla materia in oggetto e per la
    548loro serietà nella revisione, accrescerà le probabilità che la vostra patch
    549venga integrate nel kernel.
    550
    551Quando si riceve una email sulla lista di discussione da un tester o
    552un revisore, le etichette Tested-by o Reviewd-by devono essere
    553aggiunte dall'autore quando invierà nuovamente la patch. Tuttavia, se
    554la patch è cambiata in modo significativo, queste etichette potrebbero
    555non avere più senso e quindi andrebbero rimosse. Solitamente si tiene traccia
    556della rimozione nel changelog della patch (subito dopo il separatore '---').
    557
    558L'etichetta Suggested-by: indica che l'idea della patch è stata suggerita
    559dalla persona nominata e le da credito. Tenete a mente che questa etichetta
    560non dovrebbe essere aggiunta senza un permesso esplicito, specialmente se
    561l'idea non è stata pubblicata in un forum pubblico.  Detto ciò, dando credito
    562a chi ci fornisce delle idee, si spera di poterli ispirare ad aiutarci
    563nuovamente in futuro.
    564
    565L'etichetta Fixes: indica che la patch corregge un problema in un commit
    566precedente.  Serve a chiarire l'origine di un baco, il che aiuta la revisione
    567del baco stesso.  Questa etichetta è di aiuto anche per i manutentori dei
    568kernel stabili al fine di capire quale kernel deve ricevere la correzione.
    569Questo è il modo suggerito per indicare che un baco è stato corretto nella
    570patch. Per maggiori dettagli leggete :ref:`it_describe_changes`
    571
    572Da notare che aggiungere un tag "Fixes:" non esime dalle regole
    573previste per i kernel stabili, e nemmeno dalla necessità di aggiungere
    574in copia conoscenza stable@vger.kernel.org su tutte le patch per
    575suddetti kernel.
    576
    577Il formato canonico delle patch
    578-------------------------------
    579
    580Questa sezione descrive il formato che dovrebbe essere usato per le patch.
    581Notate che se state usando un repositorio ``git`` per salvare le vostre patch
    582potere usare il comando ``git format-patch`` per ottenere patch nel formato
    583appropriato.  Lo strumento non crea il testo necessario, per cui, leggete
    584le seguenti istruzioni.
    585
    586L'oggetto di una patch canonica è la riga::
    587
    588    Subject: [PATCH 001/123] subsystem: summary phrase
    589
    590Il corpo di una patch canonica contiene i seguenti elementi:
    591
    592  - Una riga ``from`` che specifica l'autore della patch, seguita
    593    da una riga vuota (necessaria soltanto se la persona che invia la
    594    patch non ne è l'autore).
    595
    596  - Il corpo della spiegazione, con linee non più lunghe di 75 caratteri,
    597    che verrà copiato permanentemente nel changelog per descrivere la patch.
    598
    599  - Una riga vuota
    600
    601  - Le righe ``Signed-off-by:``, descritte in precedenza, che finiranno
    602    anch'esse nel changelog.
    603
    604  - Una linea di demarcazione contenente semplicemente ``---``.
    605
    606  - Qualsiasi altro commento che non deve finire nel changelog.
    607
    608  - Le effettive modifiche al codice (il prodotto di ``diff``).
    609
    610Il formato usato per l'oggetto permette ai programmi di posta di usarlo
    611per ordinare le patch alfabeticamente - tutti i programmi di posta hanno
    612questa funzionalità - dato che al numero sequenziale si antepongono degli zeri;
    613in questo modo l'ordine numerico ed alfabetico coincidono.
    614
    615Il ``subsystem`` nell'oggetto dell'email dovrebbe identificare l'area
    616o il sottosistema modificato dalla patch.
    617
    618La ``summary phrase`` nell'oggetto dell'email dovrebbe descrivere brevemente
    619il contenuto della patch.  La ``summary phrase`` non dovrebbe essere un nome
    620di file. Non utilizzate la stessa ``summary phrase`` per tutte le patch in
    621una serie (dove una ``serie di patch`` è una sequenza ordinata di diverse
    622patch correlate).
    623
    624Ricordatevi che la ``summary phrase`` della vostra email diventerà un
    625identificatore globale ed unico per quella patch.  Si propaga fino al
    626changelog ``git``.  La ``summary phrase`` potrà essere usata in futuro
    627dagli sviluppatori per riferirsi a quella patch.  Le persone vorranno
    628cercare la ``summary phrase`` su internet per leggere le discussioni che la
    629riguardano.  Potrebbe anche essere l'unica cosa che le persone vedranno
    630quando, in due o tre mesi, riguarderanno centinaia di patch usando strumenti
    631come ``gitk`` o ``git log --oneline``.
    632
    633Per queste ragioni, dovrebbe essere lunga fra i 70 e i 75 caratteri, e deve
    634descrivere sia cosa viene modificato, sia il perché sia necessario. Essere
    635brevi e descrittivi è una bella sfida, ma questo è quello che fa un riassunto
    636ben scritto.
    637
    638La ``summary phrase`` può avere un'etichetta (*tag*) di prefisso racchiusa fra
    639le parentesi quadre "Subject: [PATCH <tag>...] <summary phrase>".
    640Le etichette non verranno considerate come parte della frase riassuntiva, ma
    641indicano come la patch dovrebbe essere trattata.  Fra le etichette più comuni
    642ci sono quelle di versione che vengono usate quando una patch è stata inviata
    643più volte (per esempio, "v1, v2, v3"); oppure "RFC" per indicare che si
    644attendono dei commenti (*Request For Comments*).
    645
    646Se ci sono quattro patch nella serie, queste dovrebbero essere
    647enumerate così: 1/4, 2/4, 3/4, 4/4.  Questo assicura che gli
    648sviluppatori capiranno l'ordine in cui le patch dovrebbero essere
    649applicate, e per tracciare quelle che hanno revisionate o che hanno
    650applicato.
    651
    652Un paio di esempi di oggetti::
    653
    654    Subject: [PATCH 2/5] ext2: improve scalability of bitmap searching
    655    Subject: [PATCH v2 01/27] x86: fix eflags tracking
    656    Subject: [PATCH v2] sub/sys: Condensed patch summary
    657    Subject: [PATCH v2 M/N] sub/sys: Condensed patch summary
    658
    659La riga ``from`` dev'essere la prima nel corpo del messaggio ed è nel
    660formato:
    661
    662        From: Patch Author <author@example.com>
    663
    664La riga ``from`` indica chi verrà accreditato nel changelog permanente come
    665l'autore della patch.  Se la riga ``from`` è mancante, allora per determinare
    666l'autore da inserire nel changelog verrà usata la riga ``From``
    667nell'intestazione dell'email.
    668
    669Il corpo della spiegazione verrà incluso nel changelog permanente, per cui
    670deve aver senso per un lettore esperto che è ha dimenticato i dettagli della
    671discussione che hanno portato alla patch.  L'inclusione di informazioni
    672sui problemi oggetto dalla patch (messaggi del kernel, messaggi di oops,
    673eccetera) è particolarmente utile per le persone che potrebbero cercare fra
    674i messaggi di log per la patch che li tratta. Il testo dovrebbe essere scritto
    675con abbastanza dettagli da far capire al lettore **perché** quella
    676patch fu creata, e questo a distanza di settimane, mesi, o addirittura
    677anni.
    678
    679Se la patch corregge un errore di compilazione, non sarà necessario
    680includere proprio _tutto_ quello che è uscito dal compilatore;
    681aggiungete solo quello che è necessario per far si che la vostra patch
    682venga trovata.  Come nella ``summary phrase``, è importante essere sia
    683brevi che descrittivi.
    684
    685La linea di demarcazione ``---`` serve essenzialmente a segnare dove finisce
    686il messaggio di changelog.
    687
    688Aggiungere il ``diffstat`` dopo ``---`` è un buon uso di questo spazio, per
    689mostrare i file che sono cambiati, e il numero di file aggiunto o rimossi.
    690Un ``diffstat`` è particolarmente utile per le patch grandi. Se
    691includete un ``diffstat`` dopo ``---``, usate le opzioni ``-p 1 -w70``
    692cosicché i nomi dei file elencati non occupino troppo spazio
    693(facilmente rientreranno negli 80 caratteri, magari con qualche
    694indentazione).  (``git`` genera di base dei diffstat adatti).
    695
    696I commenti che sono importanti solo per i manutentori, quindi
    697inadatti al changelog permanente, dovrebbero essere messi qui.  Un
    698buon esempio per questo tipo di commenti potrebbe essere il cosiddetto
    699``patch changelogs`` che descrivere le differenze fra le versioni
    700della patch.
    701
    702Queste informazioni devono andare **dopo** la linea ``---`` che separa
    703il *changelog* dal resto della patch. Le informazioni riguardanti la
    704versione di una patch non sono parte del *chagelog* che viene incluso
    705in git. Queste sono informazioni utili solo ai revisori. Se venissero
    706messe sopra la riga, qualcuno dovrà fare del lavoro manuale per
    707rimuoverle; cosa che invece viene fatta automaticamente quando vengono
    708messe correttamente oltre la riga.::
    709
    710  <commit message>
    711  ...
    712  Signed-off-by: Author <author@mail>
    713  ---
    714  V2 -> V3: Removed redundant helper function
    715  V1 -> V2: Cleaned up coding style and addressed review comments
    716
    717  path/to/file | 5+++--
    718  ...
    719
    720Maggiori dettagli sul formato delle patch nei riferimenti qui di seguito.
    721
    722Aggiungere i *backtrace* nei messaggi di commit
    723^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    724
    725I *backtrace* aiutano a documentare la sequenza di chiamate a funzione
    726che portano ad un problema. Tuttavia, non tutti i *backtrace* sono
    727davvero utili. Per esempio, le sequenze iniziali di avvio sono uniche
    728e ovvie. Copiare integralmente l'output di ``dmesg`` aggiunge tante
    729informazioni che distraggono dal vero problema (per esempio, i
    730marcatori temporali, la lista dei moduli, la lista dei registri, lo
    731stato dello stack).
    732
    733Quindi, per rendere utile un *backtrace* dovreste eliminare le
    734informazioni inutili, cosicché ci si possa focalizzare sul
    735problema. Ecco un esempio di un *backtrace* essenziale::
    736
    737  unchecked MSR access error: WRMSR to 0xd51 (tried to write 0x0000000000000064)
    738  at rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20)
    739  Call Trace:
    740  mba_wrmsr
    741  update_domains
    742  rdtgroup_mkdir
    743
    744.. _it_explicit_in_reply_to:
    745
    746Usare esplicitamente In-Reply-To nell'intestazione
    747--------------------------------------------------
    748
    749Aggiungere manualmente In-Reply-To: nell'intestazione dell'e-mail
    750potrebbe essere d'aiuto per associare una patch ad una discussione
    751precedente, per esempio per collegare la correzione di un baco con l'e-mail
    752che lo riportava.  Tuttavia, per serie di patch multiple è generalmente
    753sconsigliato l'uso di In-Reply-To: per collegare precedenti versioni.
    754In questo modo versioni multiple di una patch non diventeranno un'ingestibile
    755giungla di riferimenti all'interno dei programmi di posta.  Se un collegamento
    756è utile, potete usare https://lore.kernel.org/ per ottenere i collegamenti
    757ad una versione precedente di una serie di patch (per esempio, potete usarlo
    758per l'email introduttiva alla serie).
    759
    760Riferimenti
    761-----------
    762
    763Andrew Morton, "La patch perfetta" (tpp).
    764  <http://www.ozlabs.org/~akpm/stuff/tpp.txt>
    765
    766Jeff Garzik, "Formato per la sottomissione di patch per il kernel Linux"
    767  <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
    768
    769Greg Kroah-Hartman, "Come scocciare un manutentore di un sottosistema"
    770  <http://www.kroah.com/log/linux/maintainer.html>
    771
    772  <http://www.kroah.com/log/linux/maintainer-02.html>
    773
    774  <http://www.kroah.com/log/linux/maintainer-03.html>
    775
    776  <http://www.kroah.com/log/linux/maintainer-04.html>
    777
    778  <http://www.kroah.com/log/linux/maintainer-05.html>
    779
    780  <http://www.kroah.com/log/linux/maintainer-06.html>
    781
    782No!!!! Basta gigantesche bombe patch alle persone sulla lista linux-kernel@vger.kernel.org!
    783  <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
    784
    785Kernel Documentation/translations/it_IT/process/coding-style.rst.
    786
    787E-mail di Linus Torvalds sul formato canonico di una patch:
    788  <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
    789
    790Andi Kleen, "Su come sottomettere patch del kernel"
    791  Alcune strategie su come sottomettere modifiche toste o controverse.
    792
    793  http://halobates.de/on-submitting-patches.pdf