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