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