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