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