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