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