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