Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

doc:it_IT: add some process/* translations

This patch does not translate entirely the subfolder "process/"
but only part of it (to begin with).

In order to avoid broken links, I included empty documents
for those which are not yet translated.

In order to be able to refer to all documents in "process/",
I added a sphinx label to those which had not one.

Translated documents:
- howto
- 1.Intro
- clang-format
- coding-style
- kernel-driver-statement
- magic-number
- volatile-considered-harmful
- development-process

Signed-off-by: Federico Vaga <federico.vaga@vaga.pv.it>
Signed-off-by: Alessia Mantegazza <amantegazza@vaga.pv.it>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>

authored by

Federico Vaga and committed by
Jonathan Corbet
edba5eec 2a1e03ca

+3154 -1
+2
Documentation/process/1.Intro.rst
··· 1 + .. _development_process_intro: 2 + 1 3 Introduction 2 4 ============ 3 5
+3
Documentation/process/adding-syscalls.rst
··· 1 + 2 + .. _addsyscalls: 3 + 1 4 Adding a New System Call 2 5 ======================== 3 6
+2
Documentation/process/howto.rst
··· 1 + .. _process_howto: 2 + 1 3 HOWTO do Linux kernel development 2 4 ================================= 3 5
+2
Documentation/process/kernel-driver-statement.rst
··· 1 + .. _process_statement_driver: 2 + 1 3 Kernel Driver Statement 2 4 ----------------------- 3 5
+3 -1
Documentation/process/kernel-enforcement-statement.rst
··· 1 - Linux Kernel Enforcement Statement 1 + .. _process_statement_kernel: 2 + 3 + Linux Kernel Enforcement Statement 2 4 ---------------------------------- 3 5 4 6 As developers of the Linux kernel, we have a keen interest in how our software
+2
Documentation/process/magic-number.rst
··· 1 + .. _magicnumbers: 2 + 1 3 Linux magic numbers 2 4 =================== 3 5
+12
Documentation/translations/it_IT/admin-guide/README.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/admin-guide/README.rst <readme>` 4 + 5 + .. _it_readme: 6 + 7 + Rilascio del kernel Linux 4.x <http://kernel.org/> 8 + =================================================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/admin-guide/security-bugs.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/admin-guide/security-bugs.rst <securitybugs>` 4 + 5 + .. _it_securitybugs: 6 + 7 + Bachi di sicurezza 8 + ================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+1
Documentation/translations/it_IT/index.rst
··· 86 86 .. toctree:: 87 87 :maxdepth: 2 88 88 89 + process/index 89 90 doc-guide/index 90 91 kernel-hacking/index 91 92
+297
Documentation/translations/it_IT/process/1.Intro.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/1.Intro.rst <development_process_intro>` 4 + :Translator: Alessia Mantegazza <amantegazza@vaga.pv.it> 5 + 6 + .. _it_development_intro: 7 + 8 + Introduzione 9 + ============ 10 + 11 + Riepilogo generale 12 + ------------------ 13 + 14 + Il resto di questa sezione riguarda la sfera del processo di sviluppo del 15 + kernel e quella sorta di frustrazioni che gli sviluppatori e i loro datori 16 + di lavoro affrontano. Ci sono molte ragioni per le quali del codice per il 17 + kernel debba essere incorporato nel kernel ufficiale, fra le quali: 18 + disponibilità immediata agli utilizzatori, supporto della comunità in 19 + differenti modalità, e la capacità di influenzare la direzione dello sviluppo 20 + kernel. 21 + Il codice che contribuisce al kernel Linux deve essere reso disponibile sotto 22 + una licenza GPL-compatibile. 23 + 24 + La sezione :ref:`it_development_process` introduce il processo di sviluppo, 25 + il ciclo di rilascio del kernel, ed i meccanismi della finestra 26 + d'incorporazione. Il capitolo copre le varie fasi di una modifica: sviluppo, 27 + revisione e ciclo d'incorporazione. Ci sono alcuni dibattiti su strumenti e 28 + liste di discussione. Gli sviluppatori che sono in attesa di poter sviluppare 29 + qualcosa per il kernel sono invitati ad individuare e sistemare bachi come 30 + esercizio iniziale. 31 + 32 + La sezione :ref: `it_development_early_stage` copre i primi stadi della 33 + pianificazione di un progetto di sviluppo, con particolare enfasi sul 34 + coinvolgimento della comunità, il prima possibile. 35 + 36 + La sezione :ref:`it_development_coding` riguarda il processo di scrittura 37 + del codice. Qui, sono esposte le diverse insidie che sono state già affrontate 38 + da altri sviluppatori. Il capitolo copre anche alcuni dei requisiti per le 39 + modifiche, ed esiste un'introduzione ad alcuni strumenti che possono aiutarvi 40 + nell'assicurarvi che le modifiche per il kernel siano corrette. 41 + 42 + La sezione :ref:`it_development_posting` parla del processo di pubblicazione 43 + delle modifiche per la revisione. Per essere prese in considerazione dalla 44 + comunità di sviluppo, le modifiche devono essere propriamente formattate ed 45 + esposte, e devono essere inviate nel posto giusto. Seguire i consigli presenti 46 + in questa sezione dovrebbe essere d'aiuto nell'assicurare la migliore 47 + accoglienza possibile del vostro lavoro. 48 + 49 + La sezione :ref: `it_development_followthrough` copre ciò che accade dopo 50 + la pubblicazione delle modifiche; a questo punto il lavoro è lontano 51 + dall'essere concluso. Lavorare con i revisori è una parte cruciale del 52 + processo di sviluppo; questa sezione offre una serie di consigli su come 53 + evitare problemi in questa importante fase. Gli sviluppatori sono diffidenti 54 + nell'affermare che il lavoro è concluso quando una modifica è incorporata nei 55 + sorgenti principali. 56 + 57 + La sezione :ref::`it_development_advancedtopics` introduce un paio di argomenti 58 + "avanzati": gestire modifiche con git e controllare le modifiche pubblicate da 59 + altri. 60 + 61 + La sezione :ref: `it_development_conclusion` chiude il documento con dei 62 + riferimenti ad altre fonti che forniscono ulteriori informazioni sullo sviluppo 63 + del kernel. 64 + 65 + Di cosa parla questo documento 66 + ------------------------------ 67 + 68 + Il kernel Linux, ha oltre 8 milioni di linee di codice e ben oltre 1000 69 + contributori ad ogni rilascio; è uno dei più vasti e più attivi software 70 + liberi progettati mai esistiti. Sin dal sul modesto inizio nel 1991, 71 + questo kernel si è evoluto nel miglior componente per sistemi operativi 72 + che fanno funzionare piccoli riproduttori musicali, PC, grandi super computer 73 + e tutte le altre tipologie di sistemi fra questi estremi. È una soluzione 74 + robusta, efficiente ed adattabile a praticamente qualsiasi situazione. 75 + 76 + Con la crescita di Linux è arrivato anche un aumento di sviluppatori 77 + (ed aziende) desiderosi di partecipare a questo sviluppo. I produttori di 78 + hardware vogliono assicurarsi che il loro prodotti siano supportati da Linux, 79 + rendendo questi prodotti attrattivi agli utenti Linux. I produttori di 80 + sistemi integrati, che usano Linux come componente di un prodotto integrato, 81 + vogliono che Linux sia capace ed adeguato agli obiettivi ed il più possibile 82 + alla mano. Fornitori ed altri produttori di software che basano i propri 83 + prodotti su Linux hanno chiaro interesse verso capacità, prestazioni ed 84 + affidabilità del kernel Linux. E gli utenti finali, anche, spesso vorrebbero 85 + cambiare Linux per renderlo più aderente alle proprie necessità. 86 + 87 + Una delle caratteristiche più coinvolgenti di Linux è quella dell'accessibilità 88 + per gli sviluppatori; chiunque con le capacità richieste può migliorare 89 + Linux ed influenzarne la direzione di sviluppo. Prodotti non open-source non 90 + possono offrire questo tipo di apertura, che è una caratteristica del softwere 91 + libero. Ma, anzi, il kernel è persino più aperto rispetto a molti altri 92 + progetti di software libero. Un classico ciclo di sviluppo trimestrale può 93 + coinvolgere 1000 sviluppatori che lavorano per più di 100 differenti aziende 94 + (o per nessuna azienda). 95 + 96 + Lavorare con la comunità di sviluppo del kernel non è particolarmente 97 + difficile. Ma, ciononostante, diversi potenziali contributori hanno trovato 98 + delle difficoltà quando hanno cercato di lavorare sul kernel. La comunità del 99 + kernel utilizza un proprio modo di operare che gli permette di funzionare 100 + agevolmente (e genera un prodotto di alta qualità) in un ambiente dove migliaia 101 + di stringhe di codice sono modificate ogni giorni. Quindi non deve sorprendere 102 + che il processo di sviluppo del kernel differisca notevolmente dai metodi di 103 + sviluppo privati. 104 + 105 + Il processo di sviluppo del Kernel può, dall'altro lato, risultare 106 + intimidatorio e strano ai nuovi sviluppatori, ma ha dietro di se buone ragioni 107 + e solide esperienze. Uno sviluppatore che non comprenda i modi della comunità 108 + del kernel (o, peggio, che cerchi di aggirarli o violarli) avrà un'esperienza 109 + deludente nel proprio bagagliaio. La comunità di sviluppo, sebbene sia utile 110 + a coloro che cercano di imparare, ha poco tempo da dedicare a coloro che non 111 + ascoltano o coloro che non sono interessati al processo di sviluppo. 112 + 113 + Si spera che coloro che leggono questo documento saranno in grado di evitare 114 + queste esperienze spiacevoli. C'è molto materiale qui, ma lo sforzo della 115 + lettura sarà ripagato in breve tempo. La comunità di sviluppo ha sempre 116 + bisogno di sviluppatori che vogliano aiutare a rendere il kernel migliore; 117 + il testo seguente potrebbe esservi d'aiuto - o essere d'aiuto ai vostri 118 + collaboratori- per entrare a far parte della nostra comunità. 119 + 120 + Crediti 121 + ------- 122 + 123 + Questo documento è stato scritto da Jonathan Corbet, corbet@lwn.net. 124 + È stato migliorato da Johannes Berg, James Berry, Alex Chiang, Roland 125 + Dreier, Randy Dunlap, Jake Edge, Jiri Kosina, Matt Mackall, Arthur Marsh, 126 + Amanda McPherson, Andrew Morton, Andrew Price, Tsugikazu Shibata e Jochen Voß. 127 + 128 + Questo lavoro è stato supportato dalla Linux Foundation; un ringraziamento 129 + speciale ad Amanda McPherson, che ha visto il valore di questo lavoro e lo ha 130 + reso possibile. 131 + 132 + L'importanza d'avere il codice nei sorgenti principali 133 + ------------------------------------------------------ 134 + 135 + Alcune aziende e sviluppatori ogni tanto si domandano perchè dovrebbero 136 + preoccuparsi di apprendere come lavorare con la comunità del kernel e di 137 + inserire il loro codice nel ramo di sviluppo principale (per ramo principale 138 + s'intende quello mantenuto da Linus Torvalds e usato come base dai 139 + distributori Linux). Nel breve termine, contribuire al codice può sembrare 140 + un costo inutile; può sembra più facile tenere separato il proprio codice e 141 + supportare direttamente i suoi utilizzatori. La verità è che il tenere il 142 + codice separato ("fuori dai sorgenti", *"out-of-tree"*) è un falso risparmio. 143 + 144 + Per dimostrare i costi di un codice "fuori dai sorgenti", eccovi 145 + alcuni aspetti rilevanti del processo di sviluppo kernel; la maggior parte 146 + di essi saranno approfonditi dettagliatamente più avanti in questo documento. 147 + Pensate: 148 + 149 + - Il codice che è stato inserito nel ramo principale del kernel è disponibile 150 + a tutti gli utilizzatori Linux. Sarà automaticamente presente in tutte le 151 + distribuzioni che lo consentono. Non c'è bisogno di: driver per dischi, 152 + scaricare file, o della scocciatura del dover supportare diverse versoni di 153 + diverse distribuzioni; funziona già tutto, per gli sviluppatori e per gli 154 + utilizzatori. L'inserimento nel ramo principale risolve un gran numero di 155 + problemi di distribuzione e di supporto. 156 + 157 + - Nonostante gli sviluppatori kernel si sforzino di tenere stabile 158 + l'interfaccia dello spazio utente, quella interna al kernel è in continuo 159 + cambiamento. La mancanza di un'interfaccia interna è deliberatamente una 160 + decisione di progettazione; ciò permette che i miglioramenti fondamentali 161 + vengano fatti in un qualsiasi momento e che risultino fatti con un codice di 162 + alta qualità. Ma una delle conseguenze di questa politica è che qualsiasi 163 + codice "fuori dai sorgenti" richiede costante manutenzione per renderlo 164 + funzionante coi kernel più recenti. Tenere un codice "fuori dai sorgenti" 165 + richiede una mole di lavoro significativa solo per farlo funzionare. 166 + 167 + Invece, il codice che si trova nel ramo principale non necessita di questo 168 + tipo di lavoro poiché ad ogni sviluppatore che faccia una modifica alle 169 + interfacce viene richiesto di sistemare anche il codice che utilizza che 170 + utilizza quell'interfaccia. Quindi, il codice che è stato inserito nel 171 + ramo principale ha dei costi di mantenimento significativamente più bassi. 172 + 173 + - Oltre a ciò, spesso il codice che è all'interno del kernel sarà migliorato da 174 + altri sviluppatori. Dare pieni poteri alla vostra comunità di utenti e ai 175 + clienti può portare a sorprendenti risultati che migliorano i vostri 176 + prodotti. 177 + 178 + - Il codice kernel è soggetto a revisioni, sia prima che dopo l'inserimento 179 + nel ramo principale. Non importa quanto forti fossero le abilità dello 180 + sviluppatore originale, il processo di revisione trovà il modo di migliore 181 + il codice. Spesso la revisione trova bachi importanti e problemi di 182 + sicurezza. Questo è particolarmente vero per il codice che è stato 183 + sviluppato in un ambiete chiuso; tale codice ottiene un forte beneficio 184 + dalle revisioni provenienti da sviluppatori esteri. Il codice 185 + "fuori dai sorgenti", invece, è un codice di bassa qualità. 186 + 187 + - La partecipazione al processo di sviluppo costituisce la vostra via per 188 + influenzare la direzione di sviluppo del kernel. Gli utilizzatori che 189 + "reclamano da bordo campo" sono ascoltati, ma gli sviluppatori attivi 190 + hanno una voce più forte - e la capacità di implementare modifiche che 191 + renderanno il kernel più funzionale alle loro necessità. 192 + 193 + - Quando il codice è gestito separatamente, esiste sempre la possibilità che 194 + terze parti contribuiscano con una differente implementazione che fornisce 195 + le stesse funzionalità. Se dovesse accadere, l'inserimento del codice 196 + diventerà molto più difficile - fino all'impossibilità. Poi, dovrete far 197 + fronte a delle alternative poco piacevoli, come: (1) mantenere un elemento 198 + non standard "fuori dai sorgenti" per un tempo indefinito, o (2) abbandonare 199 + il codice e far migrare i vostri utenti alla versione "nei sorgenti". 200 + 201 + - Contribuire al codice è l'azione fondamentale che fa funzione tutto il 202 + processo. Contribuendo attraverso il vostro codice potete aggiungere nuove 203 + funzioni al kernel e fornire competenze ed esempi che saranno utili ad 204 + altri sviluppatori. Se avete sviluppato del codice Linux (o state pensando 205 + di farlo), avete chiaramente interesse nel far proseguire il successo di 206 + questa piattaforma. Contribuire al codice è une delle migliori vie per 207 + aiutarne il successo. 208 + 209 + Il ragionamento sopra citato si applica ad ogni codice "fuori dai sorgenti" 210 + dal kernel, incluso il codice proprietario distribuito solamente in formato 211 + binario. Ci sono, comunque, dei fattori aggiuntivi che dovrebbero essere 212 + tenuti in conto prima di prendere in considerazione qualsiasi tipo di 213 + distribuzione binaria di codice kernel. Questo include che: 214 + 215 + - Le questioni legali legate alla distribuzione di moduli kernel proprietari 216 + sono molto nebbiose; parecchi detentori di copyright sul kernel credono che 217 + molti moduli binari siano prodotti derivati del kernel e che, come risultato, 218 + la loro diffusione sia una violazione della licenza generale di GNU (della 219 + quale si parlerà più avanti). Il vostro ideatore non è un avvocato, e 220 + niente in questo documento può essere considerato come un consiglio legale. 221 + Il vero stato legale dei moduli proprietari può essere determinato 222 + esclusivamente da un giudice. Ma l'incertezza che perseguita quei moduli 223 + è lì comunque. 224 + 225 + - I moduli binari aumentano di molto la difficoltà di fare debugging del 226 + kernel, al punto che la maggior parte degli sviluppatori del kernel non 227 + vorranno nemmeno tentare. Quindi la diffusione di moduli esclusivamente 228 + binari renderà difficile ai vostri utilizzatori trovare un supporto dalla 229 + comunità. 230 + 231 + - Il supporto è anche difficile per i distributori di moduli binari che devono 232 + fornire una versione del modulo per ogni distribuzione e per ogni versione 233 + del kernel che vogliono supportate. Per fornire una copertura ragionevole e 234 + comprensiva, può essere richiesto di produrre dozzine di singoli moduli. 235 + E inoltre i vostri utilizzatori dovranno aggiornare il vostro modulo 236 + separatamente ogni volta che aggiornano il loro kernel. 237 + 238 + - Tutto ciò che è stato detto prima riguardo alla revisione del codice si 239 + applica doppiamente al codice proprietario. Dato che questo codice non é 240 + del tutto disponibile, non può essere revisionato dalla comunità e avrà, 241 + senza dubbio, seri problemi. 242 + 243 + I produttori di sistemi integrati, in particolare, potrebbero esser tentati 244 + dall'evitare molto di ciò che è stato detto in questa sezione, credendo che 245 + stiano distribuendo un prodotto finito che utilizza una versione del kernel 246 + immutabile e che non richiede un ulteriore sviluppo dopo il rilascio. Questa 247 + idea non comprende il valore di una vasta revisione del codice e il valore 248 + del permettere ai propri utenti di aggiungere funzionalità al vostro prodotto. 249 + Ma anche questi prodotti, hanno una vita commerciale limitata, dopo la quale 250 + deve essere rilasciata una nuova versione. A quel punto, i produttori il cui 251 + codice è nel ramo principale di sviluppo avranno un codice ben mantenuto e 252 + saranno in una posizione migliore per ottenere velocemente un nuovo prodotto 253 + pronto per essere distribuito. 254 + 255 + 256 + Licenza 257 + ------- 258 + 259 + IL codice Linux utilizza diverse licenze, ma il codice completo deve essere 260 + compatibile con la seconda versione della licenza GNU General Public License 261 + (GPLv2), che è la licenza che copre la distribuzione del kernel. 262 + Nella pratica, ciò significa che tutti i contributi al codice sono coperti 263 + anche'essi dalla GPLv2 (con, opzionalmente, una dicitura che permette la 264 + possibilità di distribuirlo con licenze più recenti di GPL) o dalla licenza 265 + three-clause BSD. Qualsiasi contributo che non è coperto da una licenza 266 + compatibile non verrà accettata nel kernel. 267 + 268 + Per il codice sottomesso al kernel non è necessario (o richiesto) la 269 + concessione del Copyright. Tutto il codice inserito nel ramo principale del 270 + kernel conserva la sua proprietà originale; ne risulta che ora il kernel abbia 271 + migliaia di proprietari. 272 + 273 + Una conseguenza di questa organizzazione della proprietà è che qualsiasi 274 + tentativo di modifica della licenza del kernel è destinata ad quasi sicuro 275 + fallimento. Esistono alcuni scenari pratici nei quali il consenso di tutti 276 + i detentori di copyright può essere ottenuto (o il loro codice verrà rimosso 277 + dal kernel). Quindi, in sostanza, non esiste la possibilità che si giunga ad 278 + una versione 3 della licenza GPL nel prossimo futuro. 279 + 280 + È imperativo che tutto il codice che contribuisce al kernel sia legittimamente 281 + software libero. Per questa ragione, un codice proveniente da un contributore 282 + anonimo (o sotto pseudonimo) non verrà accettato. È richiesto a tutti i 283 + contributori di firmare il proprio codice, attestando così che quest'ultimo 284 + può essere distribuito insieme al kernel sotto la licenza GPL. Il codice che 285 + non è stato licenziato come software libero dal proprio creatore, o che 286 + potrebbe creare problemi di copyright per il kernel (come il codice derivante 287 + da processi di ingegneria inversa senza le opportune tutele), non può essere 288 + diffuso. 289 + 290 + Domande relative a questioni legate al copyright sono frequenti nelle liste 291 + di discussione dedicate allo sviluppo di Linux. Tali quesiti, normalmente, 292 + non riceveranno alcuna risposta, ma una cosa deve essere tenuta presente: 293 + le persone che risponderanno a quelle domande non sono avvocati e non possono 294 + fornire supporti legali. Se avete questioni legali relative ai sorgenti 295 + del codice Linux, non esiste alternativa che quella di parlare con un 296 + avvocato esperto nel settore. Fare affidamento sulle risposte ottenute da 297 + una lista di discussione tecnica è rischioso.
+12
Documentation/translations/it_IT/process/2.Process.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/2.Process.rst <development_process>` 4 + 5 + .. _it_development_process: 6 + 7 + Come funziona il processo di sviluppo 8 + ===================================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/3.Early-stage.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/3.Early-stage.rst <development_early_stage>` 4 + 5 + .. _it_development_early_stage: 6 + 7 + Primi passi della pianificazione 8 + ================================ 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/4.Coding.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/4.Coding.rst <development_coding>` 4 + 5 + .. _it_development_coding: 6 + 7 + Scrivere codice corretto 8 + ======================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/5.Posting.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/4.Posting.rst <development_posting>` 4 + 5 + .. _it_development_posting: 6 + 7 + Pubblicare modifiche 8 + ==================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+10
Documentation/translations/it_IT/process/6.Followthrough.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/6.Followthrough.rst <development_followthrough>` 4 + 5 + Completamento 6 + ============= 7 + 8 + .. warning:: 9 + 10 + TODO ancora da tradurre
+13
Documentation/translations/it_IT/process/7.AdvancedTopics.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/7.AdvancedTopics.rst <development_advancedtopics>` 4 + 5 + 6 + .. _it_development_advancedtopics: 7 + 8 + Argomenti avanzati 9 + ================== 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/8.Conclusion.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/8.Conclusion.rst <development_conclusion>` 4 + 5 + .. _it_development_conclusion: 6 + 7 + Per maggiori informazioni 8 + ========================= 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/adding-syscalls.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/adding-syscalls.rst <addsyscalls>` 4 + 5 + .. _it_addsyscalls: 6 + 7 + Aggiungere una nuova chiamata di sistema 8 + ======================================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+13
Documentation/translations/it_IT/process/applying-patches.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/applying-patches.rst <applying_patches>` 4 + 5 + 6 + .. _it_applying_patches: 7 + 8 + Applicare modifiche al kernel Linux 9 + =================================== 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/changes.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/changes.rst <changes>` 4 + 5 + .. _it_changes: 6 + 7 + Requisiti minimi per compilare il kernel 8 + ++++++++++++++++++++++++++++++++++++++++ 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+197
Documentation/translations/it_IT/process/clang-format.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/clang-format.rst <clangformat>` 4 + :Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5 + 6 + .. _it_clangformat: 7 + 8 + clang-format 9 + ============ 10 + ``clang-format`` è uno strumento per formattare codice C/C++/... secondo 11 + un gruppo di regole ed euristiche. Come tutti gli strumenti, non è perfetto 12 + e non copre tutti i singoli casi, ma è abbastanza buono per essere utile. 13 + 14 + ``clang-format`` può essere usato per diversi fini: 15 + 16 + - Per riformattare rapidamente un blocco di codice secondo lo stile del 17 + kernel. Particolarmente utile quando si sposta del codice e lo si 18 + allinea/ordina. Vedere it_clangformatreformat_. 19 + 20 + - Identificare errori di stile, refusi e possibili miglioramenti nei 21 + file che mantieni, le modifiche che revisioni, le differenze, 22 + eccetera. Vedere it_clangformatreview_. 23 + 24 + - Ti aiuta a seguire lo stile del codice, particolarmente utile per i 25 + nuovi arrivati o per coloro che lavorano allo stesso tempo su diversi 26 + progetti con stili di codifica differenti. 27 + 28 + Il suo file di configurazione è ``.clang-format`` e si trova nella cartella 29 + principale dei sorgenti del kernel. Le regole scritte in quel file tentano 30 + di approssimare le lo stile di codifica del kernel. Si tenta anche di seguire 31 + il più possibile 32 + :ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`. 33 + Dato che non tutto il kernel segue lo stesso stile, potreste voler aggiustare 34 + le regole di base per un particolare sottosistema o cartella. Per farlo, 35 + potete sovrascriverle scrivendole in un altro file ``.clang-format`` in 36 + una sottocartella. 37 + 38 + Questo strumento è già stato incluso da molto tempo nelle distribuzioni 39 + Linux più popolari. Cercate ``clang-format`` nel vostro repositorio. 40 + Altrimenti, potete scaricare una versione pre-generata dei binari di LLVM/clang 41 + oppure generarlo dai codici sorgenti: 42 + 43 + http://releases.llvm.org/download.html 44 + 45 + Troverete più informazioni ai seguenti indirizzi: 46 + 47 + https://clang.llvm.org/docs/ClangFormat.html 48 + 49 + https://clang.llvm.org/docs/ClangFormatStyleOptions.html 50 + 51 + 52 + .. _it_clangformatreview: 53 + 54 + Revisionare lo stile di codifica per file e modifiche 55 + ----------------------------------------------------- 56 + 57 + Eseguendo questo programma, potrete revisionare un intero sottosistema, 58 + cartella o singoli file alla ricerca di errori di stile, refusi o 59 + miglioramenti. 60 + 61 + Per farlo, potete eseguire qualcosa del genere:: 62 + 63 + # Make sure your working directory is clean! 64 + clang-format -i kernel/*.[ch] 65 + 66 + E poi date un'occhiata a *git diff*. 67 + 68 + Osservare le righe di questo diff è utile a migliorare/aggiustare 69 + le opzioni di stile nel file di configurazione; così come per verificare 70 + le nuove funzionalità/versioni di ``clang-format``. 71 + 72 + ``clang-format`` è in grado di leggere diversi diff unificati, quindi 73 + potrete revisionare facilmente delle modifiche e *git diff*. 74 + La documentazione si trova al seguente indirizzo: 75 + 76 + https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting 77 + 78 + Per evitare che ``clang-format`` formatti alcune parti di un file, potete 79 + scrivere nel codice:: 80 + 81 + int formatted_code; 82 + // clang-format off 83 + void unformatted_code ; 84 + // clang-format on 85 + void formatted_code_again; 86 + 87 + Nonostante si attraente l'idea di utilizzarlo per mantenere un file 88 + sempre in sintonia con ``clang-format``, specialmente per file nuovi o 89 + se siete un manutentore, ricordatevi che altre persone potrebbero usare 90 + una versione diversa di ``clang-format`` oppure non utilizzarlo del tutto. 91 + Quindi, dovreste trattenervi dall'usare questi marcatori nel codice del 92 + kernel; almeno finché non vediamo che ``clang-format`` è diventato largamente 93 + utilizzato. 94 + 95 + 96 + .. _it_clangformatreformat: 97 + 98 + Riformattare blocchi di codice 99 + ------------------------------ 100 + 101 + Utilizzando dei plugin per il vostro editor, potete riformattare una 102 + blocco (selezione) di codice con una singola combinazione di tasti. 103 + Questo è particolarmente utile: quando si riorganizza il codice, per codice 104 + complesso, macro multi-riga (e allineare le loro "barre"), eccetera. 105 + 106 + Ricordatevi che potete sempre aggiustare le modifiche in quei casi dove 107 + questo strumento non ha fatto un buon lavoro. Ma come prima approssimazione, 108 + può essere davvero molto utile. 109 + 110 + Questo programma si integra con molti dei più popolari editor. Alcuni di 111 + essi come vim, emacs, BBEdit, Visaul Studio, lo supportano direttamente. 112 + Al seguente indirizzo troverete le istruzioni: 113 + 114 + https://clang.llvm.org/docs/ClangFormat.html 115 + 116 + Per Atom, Eclipse, Sublime Text, Visual Studio Code, XCode e altri editor 117 + e IDEs dovreste essere in grado di trovare dei plugin pronti all'uso. 118 + 119 + Per questo caso d'uso, considerate l'uso di un secondo ``.clang-format`` 120 + che potete personalizzare con le vostre opzioni. 121 + Consultare it_clangformatextra_. 122 + 123 + 124 + .. _it_clangformatmissing: 125 + 126 + Cose non supportate 127 + ------------------- 128 + 129 + ``clang-format`` non ha il supporto per alcune cose che sono comuni nel 130 + codice del kernel. Sono facili da ricordare; quindi, se lo usate 131 + regolarmente, imparerete rapidamente a evitare/ignorare certi problemi. 132 + 133 + In particolare, quelli più comuni che noterete sono: 134 + 135 + - Allineamento di ``#define`` su una singola riga, per esempio:: 136 + 137 + #define TRACING_MAP_BITS_DEFAULT 11 138 + #define TRACING_MAP_BITS_MAX 17 139 + #define TRACING_MAP_BITS_MIN 7 140 + 141 + contro:: 142 + 143 + #define TRACING_MAP_BITS_DEFAULT 11 144 + #define TRACING_MAP_BITS_MAX 17 145 + #define TRACING_MAP_BITS_MIN 7 146 + 147 + - Allineamento dei valori iniziali, per esempio:: 148 + 149 + static const struct file_operations uprobe_events_ops = { 150 + .owner = THIS_MODULE, 151 + .open = probes_open, 152 + .read = seq_read, 153 + .llseek = seq_lseek, 154 + .release = seq_release, 155 + .write = probes_write, 156 + }; 157 + 158 + contro:: 159 + 160 + static const struct file_operations uprobe_events_ops = { 161 + .owner = THIS_MODULE, 162 + .open = probes_open, 163 + .read = seq_read, 164 + .llseek = seq_lseek, 165 + .release = seq_release, 166 + .write = probes_write, 167 + }; 168 + 169 + 170 + .. _it_clangformatextra: 171 + 172 + Funzionalità e opzioni aggiuntive 173 + --------------------------------- 174 + 175 + Al fine di minimizzare le differenze fra il codice attuale e l'output 176 + del programma, alcune opzioni di stile e funzionalità non sono abilitate 177 + nella configurazione base. In altre parole, lo scopo è di rendere le 178 + differenze le più piccole possibili, permettendo la semplificazione 179 + della revisione di file, differenze e modifiche. 180 + 181 + In altri casi (per esempio un particolare sottosistema/cartella/file), lo 182 + stile del kernel potrebbe essere diverso e abilitare alcune di queste 183 + opzioni potrebbe dare risultati migliori. 184 + 185 + Per esempio: 186 + 187 + - Allineare assegnamenti (``AlignConsecutiveAssignments``). 188 + 189 + - Allineare dichiarazioni (``AlignConsecutiveDeclarations``). 190 + 191 + - Riorganizzare il testo nei commenti (``ReflowComments``). 192 + 193 + - Ordinare gli ``#include`` (``SortIncludes``). 194 + 195 + Piuttosto che per interi file, solitamente sono utili per la riformattazione 196 + di singoli blocchi. In alternativa, potete creare un altro file 197 + ``.clang-format`` da utilizzare con il vostro editor/IDE.
+12
Documentation/translations/it_IT/process/code-of-conduct.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/code-of-conduct.rst <code_of_conduct>` 4 + 5 + .. _it_code_of_conduct: 6 + 7 + Accordo dei contributori sul codice di condotta 8 + +++++++++++++++++++++++++++++++++++++++++++++++ 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+1094
Documentation/translations/it_IT/process/coding-style.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/coding-style.rst <codingstyle>` 4 + :Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5 + 6 + .. _it_codingstyle: 7 + 8 + Stile del codice per il kernel Linux 9 + ==================================== 10 + 11 + Questo è un breve documento che descrive lo stile di codice preferito per 12 + il kernel Linux. Lo stile di codifica è molto personale e non voglio 13 + **forzare** nessuno ad accettare il mio, ma questo stile è quello che 14 + dev'essere usato per qualsiasi cosa che io sia in grado di mantenere, e l'ho 15 + preferito anche per molte altre cose. Per favore, almeno tenete in 16 + considerazione le osservazioni espresse qui. 17 + 18 + La prima cosa che suggerisco è quella di stamparsi una copia degli standard 19 + di codifica GNU e di NON leggerla. Bruciatela, è un grande gesto simbolico. 20 + 21 + Comunque, ecco i punti: 22 + 23 + 1) Indentazione 24 + --------------- 25 + 26 + La tabulazione (tab) è di 8 caratteri e così anche le indentazioni. Ci sono 27 + alcuni movimenti di eretici che vorrebbero l'indentazione a 4 (o perfino 2!) 28 + caratteri di profondità, che è simile al tentativo di definire il valore del 29 + pi-greco a 3. 30 + 31 + Motivazione: l'idea dell'indentazione è di definire chiaramente dove un blocco 32 + di controllo inizia e finisce. Specialmente quando siete rimasti a guardare lo 33 + schermo per 20 ore a file, troverete molto più facile capire i livelli di 34 + indentazione se questi sono larghi. 35 + 36 + Ora, alcuni rivendicano che un'indentazione da 8 caratteri sposta il codice 37 + troppo a destra e che quindi rende difficile la lettura su schermi a 80 38 + caratteri. La risposta a questa affermazione è che se vi servono più di 3 39 + livelli di indentazione, siete comunque fregati e dovreste correggere il vostro 40 + programma. 41 + 42 + In breve, l'indentazione ad 8 caratteri rende più facile la lettura, e in 43 + aggiunta vi avvisa quando state annidando troppo le vostre funzioni. 44 + Tenete ben a mente questo avviso. 45 + 46 + Al fine di facilitare l'indentazione del costrutto switch, si preferisce 47 + allineare sulla stessa colonna la parola chiave ``switch`` e i suoi 48 + subordinati ``case``. In questo modo si evita una doppia indentazione per 49 + i ``case``. Un esempio.: 50 + 51 + .. code-block:: c 52 + 53 + switch (suffix) { 54 + case 'G': 55 + case 'g': 56 + mem <<= 30; 57 + break; 58 + case 'M': 59 + case 'm': 60 + mem <<= 20; 61 + break; 62 + case 'K': 63 + case 'k': 64 + mem <<= 10; 65 + /* fall through */ 66 + default: 67 + break; 68 + } 69 + 70 + A meno che non vogliate nascondere qualcosa, non mettete più istruzioni sulla 71 + stessa riga: 72 + 73 + .. code-block:: c 74 + 75 + if (condition) do_this; 76 + do_something_everytime; 77 + 78 + né mettete più assegnamenti sulla stessa riga. Lo stile del kernel 79 + è ultrasemplice. Evitate espressioni intricate. 80 + 81 + Al di fuori dei commenti, della documentazione ed escludendo i Kconfig, gli 82 + spazi non vengono mai usati per l'indentazione, e l'esempio qui sopra è 83 + volutamente errato. 84 + 85 + Procuratevi un buon editor di testo e non lasciate spazi bianchi alla fine 86 + delle righe. 87 + 88 + 89 + 2) Spezzare righe lunghe e stringhe 90 + ----------------------------------- 91 + 92 + Lo stile del codice riguarda la leggibilità e la manutenibilità utilizzando 93 + strumenti comuni. 94 + 95 + Il limite delle righe è di 80 colonne e questo e un limite fortemente 96 + desiderato. 97 + 98 + Espressioni più lunghe di 80 colonne saranno spezzettate in pezzi più piccoli, 99 + a meno che eccedere le 80 colonne non aiuti ad aumentare la leggibilità senza 100 + nascondere informazioni. I pezzi derivati sono sostanzialmente più corti degli 101 + originali e vengono posizionati più a destra. Lo stesso si applica, nei file 102 + d'intestazione, alle funzioni con una lista di argomenti molto lunga. Tuttavia, 103 + non spezzettate mai le stringhe visibili agli utenti come i messaggi di 104 + printk, questo perché inibireste la possibilità d'utilizzare grep per cercarle. 105 + 106 + 3) Posizionamento di parentesi graffe e spazi 107 + --------------------------------------------- 108 + 109 + Un altro problema che s'affronta sempre quando si parla di stile in C è 110 + il posizionamento delle parentesi graffe. Al contrario della dimensione 111 + dell'indentazione, non ci sono motivi tecnici sulla base dei quali scegliere 112 + una strategia di posizionamento o un'altra; ma il modo qui preferito, 113 + come mostratoci dai profeti Kernighan e Ritchie, è quello di 114 + posizionare la parentesi graffa di apertura per ultima sulla riga, e quella 115 + di chiusura per prima su una nuova riga, così: 116 + 117 + .. code-block:: c 118 + 119 + if (x is true) { 120 + we do y 121 + } 122 + 123 + Questo è valido per tutte le espressioni che non siano funzioni (if, switch, 124 + for, while, do). Per esempio: 125 + 126 + .. code-block:: c 127 + 128 + switch (action) { 129 + case KOBJ_ADD: 130 + return "add"; 131 + case KOBJ_REMOVE: 132 + return "remove"; 133 + case KOBJ_CHANGE: 134 + return "change"; 135 + default: 136 + return NULL; 137 + } 138 + 139 + Tuttavia, c'è il caso speciale, le funzioni: queste hanno la parentesi graffa 140 + di apertura all'inizio della riga successiva, quindi: 141 + 142 + .. code-block:: c 143 + 144 + int function(int x) 145 + { 146 + body of function 147 + } 148 + 149 + Eretici da tutto il mondo affermano che questa incoerenza è ... 150 + insomma ... incoerente, ma tutte le persone ragionevoli sanno che (a) 151 + K&R hanno **ragione** e (b) K&R hanno ragione. A parte questo, le funzioni 152 + sono comunque speciali (non potete annidarle in C). 153 + 154 + Notate che la graffa di chiusura è da sola su una riga propria, ad 155 + **eccezione** di quei casi dove è seguita dalla continuazione della stessa 156 + espressione, in pratica ``while`` nell'espressione do-while, oppure ``else`` 157 + nell'espressione if-else, come questo: 158 + 159 + .. code-block:: c 160 + 161 + do { 162 + body of do-loop 163 + } while (condition); 164 + 165 + e 166 + 167 + .. code-block:: c 168 + 169 + if (x == y) { 170 + .. 171 + } else if (x > y) { 172 + ... 173 + } else { 174 + .... 175 + } 176 + 177 + Motivazione: K&R. 178 + 179 + Inoltre, notate che questo posizionamento delle graffe minimizza il numero 180 + di righe vuote senza perdere di leggibilità. In questo modo, dato che le 181 + righe sul vostro schermo non sono una risorsa illimitata (pensate ad uno 182 + terminale con 25 righe), avrete delle righe vuote da riempire con dei 183 + commenti. 184 + 185 + Non usate inutilmente le graffe dove una singola espressione è sufficiente. 186 + 187 + .. code-block:: c 188 + 189 + if (condition) 190 + action(); 191 + 192 + e 193 + 194 + .. code-block:: none 195 + 196 + if (condition) 197 + do_this(); 198 + else 199 + do_that(); 200 + 201 + Questo non vale nel caso in cui solo un ramo dell'espressione if-else 202 + contiene una sola espressione; in quest'ultimo caso usate le graffe per 203 + entrambe i rami: 204 + 205 + .. code-block:: c 206 + 207 + if (condition) { 208 + do_this(); 209 + do_that(); 210 + } else { 211 + otherwise(); 212 + } 213 + 214 + Inoltre, usate le graffe se un ciclo contiene più di una semplice istruzione: 215 + 216 + .. code-block:: c 217 + 218 + while (condition) { 219 + if (test) 220 + do_something(); 221 + } 222 + 223 + 3.1) Spazi 224 + ********** 225 + 226 + Lo stile del kernel Linux per quanto riguarda gli spazi, dipende 227 + (principalmente) dalle funzioni e dalle parole chiave. Usate una spazio dopo 228 + (quasi tutte) le parole chiave. L'eccezioni più evidenti sono sizeof, typeof, 229 + alignof, e __attribute__, il cui aspetto è molto simile a quello delle 230 + funzioni (e in Linux, solitamente, sono usate con le parentesi, anche se il 231 + linguaggio non lo richiede; come ``sizeof info`` dopo aver dichiarato 232 + ``struct fileinfo info``). 233 + 234 + Quindi utilizzate uno spazio dopo le seguenti parole chiave:: 235 + 236 + if, switch, case, for, do, while 237 + 238 + ma non con sizeof, typeof, alignof, o __attribute__. Ad esempio, 239 + 240 + .. code-block:: c 241 + 242 + 243 + s = sizeof(struct file); 244 + 245 + Non aggiungete spazi attorno (dentro) ad un'espressione fra parentesi. Questo 246 + esempio è **brutto**: 247 + 248 + .. code-block:: c 249 + 250 + 251 + s = sizeof( struct file ); 252 + 253 + Quando dichiarate un puntatore ad una variabile o una funzione che ritorna un 254 + puntatore, il posto suggerito per l'asterisco ``*`` è adiacente al nome della 255 + variabile o della funzione, e non adiacente al nome del tipo. Esempi: 256 + 257 + .. code-block:: c 258 + 259 + 260 + char *linux_banner; 261 + unsigned long long memparse(char *ptr, char **retptr); 262 + char *match_strdup(substring_t *s); 263 + 264 + Usate uno spazio attorno (da ogni parte) alla maggior parte degli operatori 265 + binari o ternari, come i seguenti:: 266 + 267 + = + - < > * / % | & ^ <= >= == != ? : 268 + 269 + ma non mettete spazi dopo gli operatori unari:: 270 + 271 + & * + - ~ ! sizeof typeof alignof __attribute__ defined 272 + 273 + nessuno spazio dopo l'operatore unario suffisso di incremento o decremento:: 274 + 275 + ++ -- 276 + 277 + nessuno spazio dopo l'operatore unario prefisso di incremento o decremento:: 278 + 279 + ++ -- 280 + 281 + e nessuno spazio attorno agli operatori dei membri di una struttura ``.`` e 282 + ``->``. 283 + 284 + Non lasciate spazi bianchi alla fine delle righe. Alcuni editor con 285 + l'indentazione ``furba`` inseriranno gli spazi bianchi all'inizio di una nuova 286 + riga in modo appropriato, quindi potrete scrivere la riga di codice successiva 287 + immediatamente. Tuttavia, alcuni di questi stessi editor non rimuovono 288 + questi spazi bianchi quando non scrivete nulla sulla nuova riga, ad esempio 289 + perché volete lasciare una riga vuota. Il risultato è che finirete per avere 290 + delle righe che contengono spazi bianchi in coda. 291 + 292 + Git vi avviserà delle modifiche che aggiungono questi spazi vuoti di fine riga, 293 + e può opzionalmente rimuoverli per conto vostro; tuttavia, se state applicando 294 + una serie di modifiche, questo potrebbe far fallire delle modifiche successive 295 + perché il contesto delle righe verrà cambiato. 296 + 297 + 4) Assegnare nomi 298 + ----------------- 299 + 300 + C è un linguaggio spartano, e così dovrebbero esserlo i vostri nomi. Al 301 + contrario dei programmatori Modula-2 o Pascal, i programmatori C non usano 302 + nomi graziosi come ThisVariableIsATemporaryCounter. Un programmatore C 303 + chiamerebbe questa variabile ``tmp``, che è molto più facile da scrivere e 304 + non è una delle più difficili da capire. 305 + 306 + TUTTAVIA, nonostante i nomi con notazione mista siano da condannare, i nomi 307 + descrittivi per variabili globali sono un dovere. Chiamare una funzione 308 + globale ``pippo`` è un insulto. 309 + 310 + Le variabili GLOBALI (da usare solo se vi servono **davvero**) devono avere 311 + dei nomi descrittivi, così come le funzioni globali. Se avete una funzione 312 + che conta gli utenti attivi, dovreste chiamarla ``count_active_users()`` o 313 + qualcosa di simile, **non** dovreste chiamarla ``cntusr()``. 314 + 315 + Codificare il tipo di funzione nel suo nome (quella cosa chiamata notazione 316 + ungherese) fa male al cervello - il compilatore conosce comunque il tipo e 317 + può verificarli, e inoltre confonde i programmatori. Non c'è da 318 + sorprendersi che MicroSoft faccia programmi bacati. 319 + 320 + Le variabili LOCALI dovrebbero avere nomi corti, e significativi. Se avete 321 + un qualsiasi contatore di ciclo, probabilmente sarà chiamato ``i``. 322 + Chiamarlo ``loop_counter`` non è produttivo, non ci sono possibilità che 323 + ``i`` possa non essere capito. Analogamente, ``tmp`` può essere una qualsiasi 324 + variabile che viene usata per salvare temporaneamente un valore. 325 + 326 + Se avete paura di fare casino coi nomi delle vostre variabili locali, allora 327 + avete un altro problema che è chiamato sindrome dello squilibrio dell'ormone 328 + della crescita delle funzioni. Vedere il capitolo 6 (funzioni). 329 + 330 + 5) Definizione di tipi (typedef) 331 + -------------------------------- 332 + 333 + Per favore non usate cose come ``vps_t``. 334 + Usare il typedef per strutture e puntatori è uno **sbaglio**. Quando vedete: 335 + 336 + .. code-block:: c 337 + 338 + vps_t a; 339 + 340 + nei sorgenti, cosa significa? 341 + Se, invece, dicesse: 342 + 343 + .. code-block:: c 344 + 345 + struct virtual_container *a; 346 + 347 + potreste dire cos'è effettivamente ``a``. 348 + 349 + Molte persone pensano che la definizione dei tipi ``migliori la leggibilità``. 350 + Non molto. Sono utili per: 351 + 352 + (a) gli oggetti completamente opachi (dove typedef viene proprio usato allo 353 + scopo di **nascondere** cosa sia davvero l'oggetto). 354 + 355 + Esempio: ``pte_t`` eccetera sono oggetti opachi che potete usare solamente 356 + con le loro funzioni accessorie. 357 + 358 + .. note:: 359 + Gli oggetti opachi e le ``funzioni accessorie`` non sono, di per se, 360 + una bella cosa. Il motivo per cui abbiamo cose come pte_t eccetera è 361 + che davvero non c'è alcuna informazione portabile. 362 + 363 + (b) i tipi chiaramente interi, dove l'astrazione **aiuta** ad evitare 364 + confusione sul fatto che siano ``int`` oppure ``long``. 365 + 366 + u8/u16/u32 sono typedef perfettamente accettabili, anche se ricadono 367 + nella categoria (d) piuttosto che in questa. 368 + 369 + .. note:: 370 + 371 + Ancora - dev'esserci una **ragione** per farlo. Se qualcosa è 372 + ``unsigned long``, non c'è alcun bisogno di avere: 373 + 374 + typedef unsigned long myfalgs_t; 375 + 376 + ma se ci sono chiare circostanze in cui potrebbe essere ``unsigned int`` 377 + e in altre configurazioni ``unsigned long``, allora certamente typedef 378 + è una buona scelta. 379 + 380 + (c) quando di rado create letteralmente dei **nuovi** tipi su cui effettuare 381 + verifiche. 382 + 383 + (d) circostanze eccezionali, in cui si definiscono nuovi tipi identici a 384 + quelli definiti dallo standard C99. 385 + 386 + Nonostante ci voglia poco tempo per abituare occhi e cervello all'uso dei 387 + tipi standard come ``uint32_t``, alcune persone ne obiettano l'uso. 388 + 389 + Perciò, i tipi specifici di Linux ``u8/u16/u32/u64`` e i loro equivalenti 390 + con segno, identici ai tipi standard, sono permessi- tuttavia, non sono 391 + obbligatori per il nuovo codice. 392 + 393 + (e) i tipi sicuri nella spazio utente. 394 + 395 + In alcune strutture dati visibili dallo spazio utente non possiamo 396 + richiedere l'uso dei tipi C99 e nemmeno i vari ``u32`` descritti prima. 397 + Perciò, utilizziamo __u32 e tipi simili in tutte le strutture dati 398 + condivise con lo spazio utente. 399 + 400 + Magari ci sono altri casi validi, ma la regola di base dovrebbe essere di 401 + non usare MAI MAI un typedef a meno che non rientri in una delle regole 402 + descritte qui. 403 + 404 + In generale, un puntatore, o una struttura a cui si ha accesso diretto in 405 + modo ragionevole, non dovrebbero **mai** essere definite con un typedef. 406 + 407 + 6) Funzioni 408 + ----------- 409 + 410 + Le funzioni dovrebbero essere brevi e carine, e fare una cosa sola. Dovrebbero 411 + occupare uno o due schermi di testo (come tutti sappiamo, la dimensione 412 + di uno schermo secondo ISO/ANSI è di 80x24), e fare una cosa sola e bene. 413 + 414 + La massima lunghezza di una funziona è inversamente proporzionale alla sua 415 + complessità e al livello di indentazione di quella funzione. Quindi, se avete 416 + una funzione che è concettualmente semplice ma che è implementata come un 417 + lunga (ma semplice) sequenza di caso-istruzione, dove avete molte piccole cose 418 + per molti casi differenti, allora va bene avere funzioni più lunghe. 419 + 420 + Comunque, se avete una funzione complessa e sospettate che uno studente 421 + non particolarmente dotato del primo anno delle scuole superiori potrebbe 422 + non capire cosa faccia la funzione, allora dovreste attenervi strettamente ai 423 + limiti. Usate funzioni di supporto con nomi descrittivi (potete chiedere al 424 + compilatore di renderle inline se credete che sia necessario per le 425 + prestazioni, e probabilmente farà un lavoro migliore di quanto avreste potuto 426 + fare voi). 427 + 428 + Un'altra misura delle funzioni sono il numero di variabili locali. Non 429 + dovrebbero eccedere le 5-10, oppure state sbagliando qualcosa. Ripensate la 430 + funzione, e dividetela in pezzettini. Generalmente, un cervello umano può 431 + seguire facilmente circa 7 cose diverse, di più lo confonderebbe. Lo sai 432 + d'essere brillante, ma magari vorresti riuscire a capire cos'avevi fatto due 433 + settimane prima. 434 + 435 + Nei file sorgenti, separate le funzioni con una riga vuota. Se la funzione è 436 + esportata, la macro **EXPORT** per questa funzione deve seguire immediatamente 437 + la riga della parentesi graffa di chiusura. Ad esempio: 438 + 439 + .. code-block:: c 440 + 441 + int system_is_up(void) 442 + { 443 + return system_state == SYSTEM_RUNNING; 444 + } 445 + EXPORT_SYMBOL(system_is_up); 446 + 447 + Nei prototipi di funzione, includete i nomi dei parametri e i loro tipi. 448 + Nonostante questo non sia richiesto dal linguaggio C, in Linux viene preferito 449 + perché è un modo semplice per aggiungere informazioni importanti per il 450 + lettore. 451 + 452 + 7) Centralizzare il ritorno delle funzioni 453 + ------------------------------------------ 454 + 455 + Sebbene sia deprecata da molte persone, l'istruzione goto è impiegata di 456 + frequente dai compilatori sotto forma di salto incondizionato. 457 + 458 + L'istruzione goto diventa utile quando una funzione ha punti d'uscita multipli 459 + e vanno eseguite alcune procedure di pulizia in comune. Se non è necessario 460 + pulire alcunché, allora ritornate direttamente. 461 + 462 + Assegnate un nome all'etichetta di modo che suggerisca cosa fa la goto o 463 + perché esiste. Un esempio di un buon nome potrebbe essere ``out_free_buffer:`` 464 + se la goto libera (free) un ``buffer``. Evitate l'uso di nomi GW-BASIC come 465 + ``err1:`` ed ``err2:``, potreste doverli riordinare se aggiungete o rimuovete 466 + punti d'uscita, e inoltre rende difficile verificarne la correttezza. 467 + 468 + I motivo per usare le goto sono: 469 + 470 + - i salti incondizionati sono più facili da capire e seguire 471 + - l'annidamento si riduce 472 + - si evita di dimenticare, per errore, di aggiornare un singolo punto d'uscita 473 + - aiuta il compilatore ad ottimizzare il codice ridondante ;) 474 + 475 + .. code-block:: c 476 + 477 + int fun(int a) 478 + { 479 + int result = 0; 480 + char *buffer; 481 + 482 + buffer = kmalloc(SIZE, GFP_KERNEL); 483 + if (!buffer) 484 + return -ENOMEM; 485 + 486 + if (condition1) { 487 + while (loop1) { 488 + ... 489 + } 490 + result = 1; 491 + goto out_free_buffer; 492 + } 493 + ... 494 + out_free_buffer: 495 + kfree(buffer); 496 + return result; 497 + } 498 + 499 + Un baco abbastanza comune di cui bisogna prendere nota è il ``one err bugs`` 500 + che assomiglia a questo: 501 + 502 + .. code-block:: c 503 + 504 + err: 505 + kfree(foo->bar); 506 + kfree(foo); 507 + return ret; 508 + 509 + Il baco in questo codice è che in alcuni punti d'uscita la variabile ``foo`` è 510 + NULL. Normalmente si corregge questo baco dividendo la gestione dell'errore in 511 + due parti ``err_free_bar:`` e ``err_free_foo:``: 512 + 513 + .. code-block:: c 514 + 515 + err_free_bar: 516 + kfree(foo->bar); 517 + err_free_foo: 518 + kfree(foo); 519 + return ret; 520 + 521 + Idealmente, dovreste simulare condizioni d'errore per verificare i vostri 522 + percorsi d'uscita. 523 + 524 + 525 + 8) Commenti 526 + ----------- 527 + 528 + I commenti sono una buona cosa, ma c'è anche il rischio di esagerare. MAI 529 + spiegare COME funziona il vostro codice in un commento: è molto meglio 530 + scrivere il codice di modo che il suo funzionamento sia ovvio, inoltre 531 + spiegare codice scritto male è una perdita di tempo. 532 + 533 + Solitamente, i commenti devono dire COSA fa il codice, e non COME lo fa. 534 + Inoltre, cercate di evitare i commenti nel corpo della funzione: se la 535 + funzione è così complessa che dovete commentarla a pezzi, allora dovreste 536 + tornare al punto 6 per un momento. Potete mettere dei piccoli commenti per 537 + annotare o avvisare il lettore circa un qualcosa di particolarmente arguto 538 + (o brutto), ma cercate di non esagerare. Invece, mettete i commenti in 539 + testa alla funzione spiegando alle persone cosa fa, e possibilmente anche 540 + il PERCHÉ. 541 + 542 + Per favore, quando commentate una funzione dell'API del kernel usate il 543 + formato kernel-doc. Per maggiori dettagli, leggete i file in 544 + :ref::ref:`Documentation/translations/it_IT/doc-guide/ <it_doc_guide>` e in 545 + ``script/kernel-doc``. 546 + 547 + Lo stile preferito per i commenti più lunghi (multi-riga) è: 548 + 549 + .. code-block:: c 550 + 551 + /* 552 + * This is the preferred style for multi-line 553 + * comments in the Linux kernel source code. 554 + * Please use it consistently. 555 + * 556 + * Description: A column of asterisks on the left side, 557 + * with beginning and ending almost-blank lines. 558 + */ 559 + 560 + Per i file in net/ e in drivers/net/ lo stile preferito per i commenti 561 + più lunghi (multi-riga) è leggermente diverso. 562 + 563 + .. code-block:: c 564 + 565 + /* The preferred comment style for files in net/ and drivers/net 566 + * looks like this. 567 + * 568 + * It is nearly the same as the generally preferred comment style, 569 + * but there is no initial almost-blank line. 570 + */ 571 + 572 + È anche importante commentare i dati, sia per i tipi base che per tipi 573 + derivati. A questo scopo, dichiarate un dato per riga (niente virgole 574 + per una dichiarazione multipla). Questo vi lascerà spazio per un piccolo 575 + commento per spiegarne l'uso. 576 + 577 + 578 + 9) Avete fatto un pasticcio 579 + --------------------------- 580 + 581 + Va bene, li facciamo tutti. Probabilmente vi è stato detto dal vostro 582 + aiutante Unix di fiducia che ``GNU emacs`` formatta automaticamente il 583 + codice C per conto vostro, e avete notato che sì, in effetti lo fa, ma che 584 + i modi predefiniti non sono proprio allettanti (infatti, sono peggio che 585 + premere tasti a caso - un numero infinito di scimmie che scrivono in 586 + GNU emacs non faranno mai un buon programma). 587 + 588 + Quindi, potete sbarazzarvi di GNU emacs, o riconfigurarlo con valori più 589 + sensati. Per fare quest'ultima cosa, potete appiccicare il codice che 590 + segue nel vostro file .emacs: 591 + 592 + .. code-block:: none 593 + 594 + (defun c-lineup-arglist-tabs-only (ignored) 595 + "Line up argument lists by tabs, not spaces" 596 + (let* ((anchor (c-langelem-pos c-syntactic-element)) 597 + (column (c-langelem-2nd-pos c-syntactic-element)) 598 + (offset (- (1+ column) anchor)) 599 + (steps (floor offset c-basic-offset))) 600 + (* (max steps 1) 601 + c-basic-offset))) 602 + 603 + (add-hook 'c-mode-common-hook 604 + (lambda () 605 + ;; Add kernel style 606 + (c-add-style 607 + "linux-tabs-only" 608 + '("linux" (c-offsets-alist 609 + (arglist-cont-nonempty 610 + c-lineup-gcc-asm-reg 611 + c-lineup-arglist-tabs-only)))))) 612 + 613 + (add-hook 'c-mode-hook 614 + (lambda () 615 + (let ((filename (buffer-file-name))) 616 + ;; Enable kernel mode for the appropriate files 617 + (when (and filename 618 + (string-match (expand-file-name "~/src/linux-trees") 619 + filename)) 620 + (setq indent-tabs-mode t) 621 + (setq show-trailing-whitespace t) 622 + (c-set-style "linux-tabs-only"))))) 623 + 624 + Questo farà funzionare meglio emacs con lo stile del kernel per i file che 625 + si trovano nella cartella ``~/src/linux-trees``. 626 + 627 + Ma anche se doveste fallire nell'ottenere una formattazione sensata in emacs 628 + non tutto è perduto: usate ``indent``. 629 + 630 + Ora, ancora, GNU indent ha la stessa configurazione decerebrata di GNU emacs, 631 + ed è per questo che dovete passargli alcune opzioni da riga di comando. 632 + Tuttavia, non è così terribile, perché perfino i creatori di GNU indent 633 + riconoscono l'autorità di K&R (le persone del progetto GNU non sono cattive, 634 + sono solo mal indirizzate sull'argomento), quindi date ad indent le opzioni 635 + ``-kr -i8`` (che significa ``K&R, 8 caratteri di indentazione``), o utilizzate 636 + ``scripts/Lindent`` che indenterà usando l'ultimo stile. 637 + 638 + ``indent`` ha un sacco di opzioni, e specialmente quando si tratta di 639 + riformattare i commenti dovreste dare un'occhiata alle pagine man. 640 + Ma ricordatevi: ``indent`` non è un correttore per una cattiva programmazione. 641 + 642 + Da notare che potete utilizzare anche ``clang-format`` per aiutarvi con queste 643 + regole, per riformattare rapidamente ad automaticamente alcune parti del 644 + vostro codice, e per revisionare interi file al fine di identificare errori 645 + di stile, refusi e possibilmente anche delle migliorie. È anche utile per 646 + ordinare gli ``#include``, per allineare variabili/macro, per ridistribuire 647 + il testo e altre cose simili. 648 + Per maggiori dettagli, consultate il file 649 + :ref:`Documentation/translations/it_IT/process/clang-format.rst <it_clangformat>`. 650 + 651 + 652 + 10) File di configurazione Kconfig 653 + ---------------------------------- 654 + 655 + Per tutti i file di configurazione Kconfig* che si possono trovare nei 656 + sorgenti, l'indentazione è un po' differente. Le linee dopo un ``config`` 657 + sono indentate con un tab, mentre il testo descrittivo è indentato di 658 + ulteriori due spazi. Esempio:: 659 + 660 + config AUDIT 661 + bool "Auditing support" 662 + depends on NET 663 + help 664 + Enable auditing infrastructure that can be used with another 665 + kernel subsystem, such as SELinux (which requires this for 666 + logging of avc messages output). Does not do system-call 667 + auditing without CONFIG_AUDITSYSCALL. 668 + 669 + Le funzionalità davvero pericolose (per esempio il supporto alla scrittura 670 + per certi filesystem) dovrebbero essere dichiarate chiaramente come tali 671 + nella stringa di titolo:: 672 + 673 + config ADFS_FS_RW 674 + bool "ADFS write support (DANGEROUS)" 675 + depends on ADFS_FS 676 + ... 677 + 678 + Per la documentazione completa sui file di configurazione, consultate 679 + il documento Documentation/translations/it_IT/kbuild/kconfig-language.txt 680 + 681 + 682 + 11) Strutture dati 683 + ------------------ 684 + 685 + Le strutture dati che hanno una visibilità superiore al contesto del 686 + singolo thread in cui vengono create e distrutte, dovrebbero sempre 687 + avere un contatore di riferimenti. Nel kernel non esiste un 688 + *garbage collector* (e fuori dal kernel i *garbage collector* sono lenti 689 + e inefficienti), questo significa che **dovete** assolutamente avere un 690 + contatore di riferimenti per ogni cosa che usate. 691 + 692 + Avere un contatore di riferimenti significa che potete evitare la 693 + sincronizzazione e permette a più utenti di accedere alla struttura dati 694 + in parallelo - e non doversi preoccupare di una struttura dati che 695 + improvvisamente sparisce dalla loro vista perché il loro processo dormiva 696 + o stava facendo altro per un attimo. 697 + 698 + Da notare che la sincronizzazione **non** si sostituisce al conteggio dei 699 + riferimenti. La sincronizzazione ha lo scopo di mantenere le strutture 700 + dati coerenti, mentre il conteggio dei riferimenti è una tecnica di gestione 701 + della memoria. Solitamente servono entrambe le cose, e non vanno confuse fra 702 + di loro. 703 + 704 + Quando si hanno diverse classi di utenti, le strutture dati possono avere 705 + due livelli di contatori di riferimenti. Il contatore di classe conta 706 + il numero dei suoi utenti, e il contatore globale viene decrementato una 707 + sola volta quando il contatore di classe va a zero. 708 + 709 + Un esempio di questo tipo di conteggio dei riferimenti multi-livello può 710 + essere trovato nella gestore della memoria (``struct mm_sturct``: mm_user e 711 + mm_count), e nel codice dei filesystem (``struct super_block``: s_count e 712 + s_active). 713 + 714 + Ricordatevi: se un altro thread può trovare la vostra struttura dati, e non 715 + avete un contatore di riferimenti per essa, quasi certamente avete un baco. 716 + 717 + 12) Macro, enumerati e RTL 718 + --------------------------- 719 + 720 + I nomi delle macro che definiscono delle costanti e le etichette degli 721 + enumerati sono scritte in maiuscolo. 722 + 723 + .. code-block:: c 724 + 725 + #define CONSTANT 0x12345 726 + 727 + Gli enumerati sono da preferire quando si definiscono molte costanti correlate. 728 + 729 + I nomi delle macro in MAIUSCOLO sono preferibili ma le macro che assomigliano 730 + a delle funzioni possono essere scritte in minuscolo. 731 + 732 + Generalmente, le funzioni inline sono preferibili rispetto alle macro che 733 + sembrano funzioni. 734 + 735 + Le macro che contengono più istruzioni dovrebbero essere sempre chiuse in un 736 + blocco do - while: 737 + 738 + .. code-block:: c 739 + 740 + #define macrofun(a, b, c) \ 741 + do { \ 742 + if (a == 5) \ 743 + do_this(b, c); \ 744 + } while (0) 745 + 746 + Cose da evitare quando si usano le macro: 747 + 748 + 1) le macro che hanno effetti sul flusso del codice: 749 + 750 + .. code-block:: c 751 + 752 + #define FOO(x) \ 753 + do { \ 754 + if (blah(x) < 0) \ 755 + return -EBUGGERED; \ 756 + } while (0) 757 + 758 + sono **proprio** una pessima idea. Sembra una chiamata a funzione ma termina 759 + la funzione chiamante; non cercate di rompere il decodificatore interno di 760 + chi legge il codice. 761 + 762 + 2) le macro che dipendono dall'uso di una variabile locale con un nome magico: 763 + 764 + .. code-block:: c 765 + 766 + #define FOO(val) bar(index, val) 767 + 768 + potrebbe sembrare una bella cosa, ma è dannatamente confusionario quando uno 769 + legge il codice e potrebbe romperlo con una cambiamento che sembra innocente. 770 + 771 + 3) le macro con argomenti che sono utilizzati come l-values; questo potrebbe 772 + ritorcervisi contro se qualcuno, per esempio, trasforma FOO in una funzione 773 + inline. 774 + 775 + 4) dimenticatevi delle precedenze: le macro che definiscono espressioni devono 776 + essere racchiuse fra parentesi. State attenti a problemi simili con le macro 777 + parametrizzate. 778 + 779 + .. code-block:: c 780 + 781 + #define CONSTANT 0x4000 782 + #define CONSTEXP (CONSTANT | 3) 783 + 784 + 5) collisione nello spazio dei nomi quando si definisce una variabile locale in 785 + una macro che sembra una funzione: 786 + 787 + .. code-block:: c 788 + 789 + #define FOO(x) \ 790 + ({ \ 791 + typeof(x) ret; \ 792 + ret = calc_ret(x); \ 793 + (ret); \ 794 + }) 795 + 796 + ret è un nome comune per una variabile locale - __foo_ret difficilmente 797 + andrà in conflitto con una variabile già esistente. 798 + 799 + Il manuale di cpp si occupa esaustivamente delle macro. Il manuale di sviluppo 800 + di gcc copre anche l'RTL che viene usato frequentemente nel kernel per il 801 + linguaggio assembler. 802 + 803 + 13) Visualizzare i messaggi del kernel 804 + -------------------------------------- 805 + 806 + Agli sviluppatori del kernel piace essere visti come dotti. Tenete un occhio 807 + di riguardo per l'ortografia e farete una belle figura. In inglese, evitate 808 + l'uso di parole mozzate come ``dont``: usate ``do not`` oppure ``don't``. 809 + Scrivete messaggi concisi, chiari, e inequivocabili. 810 + 811 + I messaggi del kernel non devono terminare con un punto fermo. 812 + 813 + Scrivere i numeri fra parentesi (%d) non migliora alcunché e per questo 814 + dovrebbero essere evitati. 815 + 816 + Ci sono alcune macro per la diagnostica in <linux/device.h> che dovreste 817 + usare per assicurarvi che i messaggi vengano associati correttamente ai 818 + dispositivi e ai driver, e che siano etichettati correttamente: dev_err(), 819 + dev_warn(), dev_info(), e così via. Per messaggi che non sono associati ad 820 + alcun dispositivo, <linux/printk.h> definisce pr_info(), pr_warn(), pr_err(), 821 + eccetera. 822 + 823 + Tirar fuori un buon messaggio di debug può essere una vera sfida; e quando 824 + l'avete può essere d'enorme aiuto per risolvere problemi da remoto. 825 + Tuttavia, i messaggi di debug sono gestiti differentemente rispetto agli 826 + altri. Le funzioni pr_XXX() stampano incondizionatamente ma pr_debug() no; 827 + essa non viene compilata nella configurazione predefinita, a meno che 828 + DEBUG o CONFIG_DYNAMIC_DEBUG non vengono impostati. Questo vale anche per 829 + dev_dbg() e in aggiunta VERBOSE_DEBUG per aggiungere i messaggi dev_vdbg(). 830 + 831 + Molti sottosistemi hanno delle opzioni di debug in Kconfig che aggiungono 832 + -DDEBUG nei corrispettivi Makefile, e in altri casi aggiungono #define DEBUG 833 + in specifici file. Infine, quando un messaggio di debug dev'essere stampato 834 + incondizionatamente, per esempio perché siete già in una sezione di debug 835 + racchiusa in #ifdef, potete usare printk(KERN_DEBUG ...). 836 + 837 + 14) Assegnare memoria 838 + --------------------- 839 + 840 + Il kernel fornisce i seguenti assegnatori ad uso generico: 841 + kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc(), e vzalloc(). 842 + Per maggiori informazioni, consultate la documentazione dell'API. 843 + 844 + Il modo preferito per passare la dimensione di una struttura è il seguente: 845 + 846 + .. code-block:: c 847 + 848 + p = kmalloc(sizeof(*p), ...); 849 + 850 + La forma alternativa, dove il nome della struttura viene scritto interamente, 851 + peggiora la leggibilità e introduce possibili bachi quando il tipo di 852 + puntatore cambia tipo ma il corrispondente sizeof non viene aggiornato. 853 + 854 + Il valore di ritorno è un puntatore void, effettuare un cast su di esso è 855 + ridondante. La conversione fra un puntatore void e un qualsiasi altro tipo 856 + di puntatore è garantito dal linguaggio di programmazione C. 857 + 858 + Il modo preferito per assegnare un vettore è il seguente: 859 + 860 + .. code-block:: c 861 + 862 + p = kmalloc_array(n, sizeof(...), ...); 863 + 864 + Il modo preferito per assegnare un vettore a zero è il seguente: 865 + 866 + .. code-block:: c 867 + 868 + p = kcalloc(n, sizeof(...), ...); 869 + 870 + Entrambe verificano la condizione di overflow per la dimensione 871 + d'assegnamento n * sizeof(...), se accade ritorneranno NULL. 872 + 873 + 15) Il morbo inline 874 + ------------------- 875 + 876 + Sembra che ci sia la percezione errata che gcc abbia una qualche magica 877 + opzione "rendimi più veloce" chiamata ``inline``. In alcuni casi l'uso di 878 + inline è appropriato (per esempio in sostituzione delle macro, vedi 879 + capitolo 12), ma molto spesso non lo è. L'uso abbondante della parola chiave 880 + inline porta ad avere un kernel più grande, che si traduce in un sistema nel 881 + suo complesso più lento per via di una cache per le istruzioni della CPU più 882 + grande e poi semplicemente perché ci sarà meno spazio disponibile per una 883 + pagina di cache. Pensateci un attimo; una fallimento nella cache causa una 884 + ricerca su disco che può tranquillamente richiedere 5 millisecondi. Ci sono 885 + TANTI cicli di CPU che potrebbero essere usati in questi 5 millisecondi. 886 + 887 + Spesso le persone dicono che aggiungere inline a delle funzioni dichiarate 888 + static e utilizzare una sola volta è sempre una scelta vincente perché non 889 + ci sono altri compromessi. Questo è tecnicamente vero ma gcc è in grado di 890 + trasformare automaticamente queste funzioni in inline; i problemi di 891 + manutenzione del codice per rimuovere gli inline quando compare un secondo 892 + utente surclassano il potenziale vantaggio nel suggerire a gcc di fare una 893 + cosa che avrebbe fatto comunque. 894 + 895 + 16) Nomi e valori di ritorno delle funzioni 896 + ------------------------------------------- 897 + 898 + Le funzioni possono ritornare diversi tipi di valori, e uno dei più comuni 899 + è quel valore che indica se una funzione ha completato con successo o meno. 900 + Questo valore può essere rappresentato come un codice di errore intero 901 + (-Exxx = fallimento, 0 = successo) oppure un booleano di successo 902 + (0 = fallimento, non-zero = successo). 903 + 904 + Mischiare questi due tipi di rappresentazioni è un terreno fertile per 905 + i bachi più insidiosi. Se il linguaggio C includesse una forte distinzione 906 + fra gli interi e i booleani, allora il compilatore potrebbe trovare questi 907 + errori per conto nostro ... ma questo non c'è. Per evitare di imbattersi 908 + in questo tipo di baco, seguite sempre la seguente convenzione:: 909 + 910 + Se il nome di una funzione è un'azione o un comando imperativo, 911 + essa dovrebbe ritornare un codice di errore intero. Se il nome 912 + è un predicato, la funzione dovrebbe ritornare un booleano di 913 + "successo" 914 + 915 + Per esempio, ``add work`` è un comando, e la funzione add_work() ritorna 0 916 + in caso di successo o -EBUSY in caso di fallimento. Allo stesso modo, 917 + ``PCI device present`` è un predicato, e la funzione pci_dev_present() ritorna 918 + 1 se trova il dispositivo corrispondente con successo, altrimenti 0. 919 + 920 + Tutte le funzioni esportate (EXPORT) devono rispettare questa convenzione, e 921 + così dovrebbero anche tutte le funzioni pubbliche. Le funzioni private 922 + (static) possono non seguire questa convenzione, ma è comunque raccomandato 923 + che lo facciano. 924 + 925 + Le funzioni il cui valore di ritorno è il risultato di una computazione, 926 + piuttosto che l'indicazione sul successo di tale computazione, non sono 927 + soggette a questa regola. Solitamente si indicano gli errori ritornando un 928 + qualche valore fuori dai limiti. Un tipico esempio è quello delle funzioni 929 + che ritornano un puntatore; queste utilizzano NULL o ERR_PTR come meccanismo 930 + di notifica degli errori. 931 + 932 + 17) Non reinventate le macro del kernel 933 + --------------------------------------- 934 + 935 + Il file di intestazione include/linux/kernel.h contiene un certo numero 936 + di macro che dovreste usare piuttosto che implementarne una qualche variante. 937 + Per esempio, se dovete calcolare la lunghezza di un vettore, sfruttate la 938 + macro: 939 + 940 + .. code-block:: c 941 + 942 + #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 943 + 944 + Analogamente, se dovete calcolare la dimensione di un qualche campo di una 945 + struttura, usate 946 + 947 + .. code-block:: c 948 + 949 + #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 950 + 951 + Ci sono anche le macro min() e max() che, se vi serve, effettuano un controllo 952 + rigido sui tipi. Sentitevi liberi di leggere attentamente questo file 953 + d'intestazione per scoprire cos'altro è stato definito che non dovreste 954 + reinventare nel vostro codice. 955 + 956 + 18) Linee di configurazione degli editor e altre schifezze 957 + ----------------------------------------------------------- 958 + 959 + Alcuni editor possono interpretare dei parametri di configurazione integrati 960 + nei file sorgenti e indicati con dai marcatori speciali. Per esempio, emacs 961 + interpreta le linee marcate nel seguente modo: 962 + 963 + .. code-block:: c 964 + 965 + -*- mode: c -*- 966 + 967 + O come queste: 968 + 969 + .. code-block:: c 970 + 971 + /* 972 + Local Variables: 973 + compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" 974 + End: 975 + */ 976 + 977 + Vim interpreta i marcatori come questi: 978 + 979 + .. code-block:: c 980 + 981 + /* vim:set sw=8 noet */ 982 + 983 + Non includete nessuna di queste cose nei file sorgenti. Le persone hanno le 984 + proprie configurazioni personali per l'editor, e i vostri sorgenti non 985 + dovrebbero sovrascrivergliele. Questo vale anche per i marcatori 986 + d'indentazione e di modalità d'uso. Le persone potrebbero aver configurato una 987 + modalità su misura, oppure potrebbero avere qualche altra magia per far 988 + funzionare bene l'indentazione. 989 + 990 + 19) Inline assembly 991 + --------------------- 992 + 993 + Nel codice specifico per un'architettura, potreste aver bisogno di codice 994 + *inline assembly* per interfacciarvi col processore o con una funzionalità 995 + specifica della piattaforma. Non esitate a farlo quando è necessario. 996 + Comunque, non usatele gratuitamente quando il C può fare la stessa cosa. 997 + Potete e dovreste punzecchiare l'hardware in C quando è possibile. 998 + 999 + Considerate la scrittura di una semplice funzione che racchiude pezzi comuni 1000 + di codice assembler piuttosto che continuare a riscrivere delle piccole 1001 + varianti. Ricordatevi che l' *inline assembly* può utilizzare i parametri C. 1002 + 1003 + Il codice assembler più corposo e non banale dovrebbe andare nei file .S, 1004 + coi rispettivi prototipi C definiti nei file d'intestazione. I prototipi C 1005 + per le funzioni assembler dovrebbero usare ``asmlinkage``. 1006 + 1007 + Potreste aver bisogno di marcare il vostro codice asm come volatile al fine 1008 + d'evitare che GCC lo rimuova quando pensa che non ci siano effetti collaterali. 1009 + Non c'è sempre bisogno di farlo, e farlo quando non serve limita le 1010 + ottimizzazioni. 1011 + 1012 + Quando scrivete una singola espressione *inline assembly* contenente più 1013 + istruzioni, mettete ognuna di queste istruzioni in una stringa e riga diversa; 1014 + ad eccezione dell'ultima stringa/istruzione, ognuna deve terminare con ``\n\t`` 1015 + al fine di allineare correttamente l'assembler che verrà generato: 1016 + 1017 + .. code-block:: c 1018 + 1019 + asm ("magic %reg1, #42\n\t" 1020 + "more_magic %reg2, %reg3" 1021 + : /* outputs */ : /* inputs */ : /* clobbers */); 1022 + 1023 + 20) Compilazione sotto condizione 1024 + --------------------------------- 1025 + 1026 + Ovunque sia possibile, non usate le direttive condizionali del preprocessore 1027 + (#if, #ifdef) nei file .c; farlo rende il codice difficile da leggere e da 1028 + seguire. Invece, usate queste direttive nei file d'intestazione per definire 1029 + le funzioni usate nei file .c, fornendo i relativi stub nel caso #else, 1030 + e quindi chiamate queste funzioni senza condizioni di preprocessore. Il 1031 + compilatore non produrrà alcun codice per le funzioni stub, produrrà gli 1032 + stessi risultati, e la logica rimarrà semplice da seguire. 1033 + 1034 + È preferibile non compilare intere funzioni piuttosto che porzioni d'esse o 1035 + porzioni d'espressioni. Piuttosto che mettere una ifdef in un'espressione, 1036 + fattorizzate parte dell'espressione, o interamente, in funzioni e applicate 1037 + la direttiva condizionale su di esse. 1038 + 1039 + Se avete una variabile o funzione che potrebbe non essere usata in alcune 1040 + configurazioni, e quindi il compilatore potrebbe avvisarvi circa la definizione 1041 + inutilizzata, marcate questa definizione come __maybe_used piuttosto che 1042 + racchiuderla in una direttiva condizionale del preprocessore. (Comunque, 1043 + se una variabile o funzione è *sempre* inutilizzata, rimuovetela). 1044 + 1045 + Nel codice, dov'è possibile, usate la macro IS_ENABLED per convertire i 1046 + simboli Kconfig in espressioni booleane C, e quindi usatela nelle classiche 1047 + condizioni C: 1048 + 1049 + .. code-block:: c 1050 + 1051 + if (IS_ENABLED(CONFIG_SOMETHING)) { 1052 + ... 1053 + } 1054 + 1055 + Il compilatore valuterà la condizione come costante (constant-fold), e quindi 1056 + includerà o escluderà il blocco di codice come se fosse in un #ifdef, quindi 1057 + non ne aumenterà il tempo di esecuzione. Tuttavia, questo permette al 1058 + compilatore C di vedere il codice nel blocco condizionale e verificarne la 1059 + correttezza (sintassi, tipi, riferimenti ai simboli, eccetera). Quindi 1060 + dovete comunque utilizzare #ifdef se il codice nel blocco condizionale esiste 1061 + solo quando la condizione è soddisfatta. 1062 + 1063 + Alla fine di un blocco corposo di #if o #ifdef (più di alcune linee), 1064 + mettete un commento sulla stessa riga di #endif, annotando la condizione 1065 + che termina. Per esempio: 1066 + 1067 + .. code-block:: c 1068 + 1069 + #ifdef CONFIG_SOMETHING 1070 + ... 1071 + #endif /* CONFIG_SOMETHING */ 1072 + 1073 + Appendice I) riferimenti 1074 + ------------------------ 1075 + 1076 + The C Programming Language, Second Edition 1077 + by Brian W. Kernighan and Dennis M. Ritchie. 1078 + Prentice Hall, Inc., 1988. 1079 + ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback). 1080 + 1081 + The Practice of Programming 1082 + by Brian W. Kernighan and Rob Pike. 1083 + Addison-Wesley, Inc., 1999. 1084 + ISBN 0-201-61586-X. 1085 + 1086 + Manuali GNU - nei casi in cui sono compatibili con K&R e questo documento - 1087 + per indent, cpp, gcc e i suoi dettagli interni, tutto disponibile qui 1088 + http://www.gnu.org/manual/ 1089 + 1090 + WG14 è il gruppo internazionale di standardizzazione per il linguaggio C, 1091 + URL: http://www.open-std.org/JTC1/SC22/WG14/ 1092 + 1093 + Kernel process/coding-style.rst, by greg@kroah.com at OLS 2002: 1094 + http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
+33
Documentation/translations/it_IT/process/development-process.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/development-process.rst <development_process_main>` 4 + :Translator: Alessia Mantegazza <amantegazza@vaga.pv.it> 5 + 6 + .. _it_development_process_main: 7 + 8 + Una guida al processo di sviluppo del Kernel 9 + ============================================ 10 + 11 + Contenuti: 12 + 13 + .. toctree:: 14 + :numbered: 15 + :maxdepth: 2 16 + 17 + 1.Intro 18 + 2.Process 19 + 3.Early-stage 20 + 4.Coding 21 + 5.Posting 22 + 6.Followthrough 23 + 7.AdvancedTopics 24 + 8.Conclusion 25 + 26 + Lo scopo di questo documento è quello di aiutare gli sviluppatori (ed i loro 27 + supervisori) a lavorare con la communità di sviluppo con il minimo sforzo. È 28 + un tentativo di documentare il funzionamento di questa communità in modo che 29 + sia accessibile anche a coloro che non hanno famigliarità con lo sviluppo del 30 + Kernel Linux (o, anzi, con lo sviluppo di software libero in generale). Benchè 31 + qui sia presente del materiale tecnico, questa è una discussione rivolta in 32 + particolare al procedimento, e quindi per essere compreso non richiede una 33 + conoscenza approfondità sullo sviluppo del kernel.
+12
Documentation/translations/it_IT/process/email-clients.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/email-clients.rst <email_clients>` 4 + 5 + .. _it_email_clients: 6 + 7 + Informazioni sui programmi di posta elettronica per Linux 8 + ========================================================= 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+655
Documentation/translations/it_IT/process/howto.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/howto.rst <process_howto>` 4 + :Translator: Alessia Mantegazza <amantegazza@vaga.pv.it> 5 + 6 + .. _it_process_howto: 7 + 8 + Come partecipare allo sviluppo del kernel Linux 9 + =============================================== 10 + 11 + Questo è il documento fulcro di quanto trattato sull'argomento. 12 + Esso contiene le istruzioni su come diventare uno sviluppatore 13 + del kernel Linux e spiega come lavorare con la comunità di 14 + sviluppo kernel Linux. Il documento non tratterà alcun aspetto 15 + tecnico relativo alla programmazione del kernel, ma vi aiuterà 16 + indirizzandovi sulla corretta strada. 17 + 18 + Se qualsiasi cosa presente in questo documento diventasse obsoleta, 19 + vi preghiamo di inviare le correzioni agli amministratori di questo 20 + file, indicati in fondo al presente documento. 21 + 22 + Introduzione 23 + ------------ 24 + Dunque, volete imparare come diventare sviluppatori del kernel Linux? 25 + O vi è stato detto dal vostro capo, "Vai, scrivi un driver Linux per 26 + questo dispositivo". Bene, l'obbiettivo di questo documento è quello 27 + di insegnarvi tutto ciò che dovete sapere per raggiungere il vostro 28 + scopo descrivendo il procedimento da seguire e consigliandovi 29 + su come lavorare con la comunità. Il documento cercherà, inoltre, 30 + di spiegare alcune delle ragioni per le quali la comunità lavora in un 31 + modo suo particolare. 32 + 33 + Il kernel è scritto prevalentemente nel linguaggio C con alcune parti 34 + specifiche dell'architettura scritte in linguaggio assembly. 35 + Per lo sviluppo kernel è richiesta una buona conoscenza del linguaggio C. 36 + L'assembly (di qualsiasi architettura) non è richiesto, a meno che non 37 + pensiate di fare dello sviluppo di basso livello per un'architettura. 38 + Sebbene essi non siano un buon sostituto ad un solido studio del 39 + linguaggio C o ad anni di esperienza, i seguenti libri sono, se non 40 + altro, utili riferimenti: 41 + 42 + - "The C Programming Language" di Kernighan e Ritchie [Prentice Hall] 43 + - "Practical C Programming" di Steve Oualline [O'Reilly] 44 + - "C: A Reference Manual" di Harbison and Steele [Prentice Hall] 45 + 46 + Il kernel è stato scritto usando GNU C e la toolchain GNU. 47 + Sebbene si attenga allo standard ISO C89, esso utilizza una serie di 48 + estensioni che non sono previste in questo standard. Il kernel è un 49 + ambiente C indipendente, che non ha alcuna dipendenza dalle librerie 50 + C standard, così alcune parti del C standard non sono supportate. 51 + Le divisioni ``long long`` e numeri in virgola mobile non sono permessi. 52 + Qualche volta è difficile comprendere gli assunti che il kernel ha 53 + riguardo gli strumenti e le estensioni in uso, e sfortunatamente non 54 + esiste alcuna indicazione definitiva. Per maggiori informazioni, controllate, 55 + la pagina `info gcc`. 56 + 57 + Tenete a mente che state cercando di apprendere come lavorare con la comunità 58 + di sviluppo già esistente. Questo è un gruppo eterogeneo di persone, con alti 59 + standard di codifica, di stile e di procedura. Questi standard sono stati 60 + creati nel corso del tempo basandosi su quanto hanno riscontrato funzionare al 61 + meglio per un squadra così grande e geograficamente sparsa. Cercate di 62 + imparare, in anticipo, il più possibile circa questi standard, poichè ben 63 + spiegati; non aspettatevi che gli altri si adattino al vostro modo di fare 64 + o a quello della vostra azienda. 65 + 66 + Note legali 67 + ------------ 68 + Il codice sorgente del kernel Linux è rilasciato sotto GPL. Siete pregati 69 + di visionare il file, COPYING, presente nella cartella principale dei 70 + sorgente, per eventuali dettagli sulla licenza. Se avete ulteriori domande 71 + sulla licenza, contattate un avvocato, non chiedete sulle liste di discussione 72 + del kernel Linux. Le persone presenti in queste liste non sono avvocati, 73 + e non dovreste basarvi sulle loro dichiarazioni in materia giuridica. 74 + 75 + Per domande più frequenti e risposte sulla licenza GPL, guardare: 76 + 77 + https://www.gnu.org/licenses/gpl-faq.html 78 + 79 + Documentazione 80 + -------------- 81 + I sorgenti del kernel Linux hanno una vasta base di documenti che vi 82 + insegneranno come interagire con la comunità del kernel. Quando nuove 83 + funzionalità vengono aggiunte al kernel, si raccomanda di aggiungere anche i 84 + relativi file di documentatione che spiegano come usarele. 85 + Quando un cambiamento del kernel genera anche un cambiamento nell'interfaccia 86 + con lo spazio utente, è raccomandabile che inviate una notifica o una 87 + correzione alle pagine *man* spiegando tale modifica agli amministratori di 88 + queste pagine all'indirizzo mtk.manpages@gmail.com, aggiungendo 89 + in CC la lista linux-api@vger.kernel.org. 90 + 91 + Di seguito una lista di file che sono presenti nei sorgente del kernel e che 92 + è richiesto che voi leggiate: 93 + 94 + :ref:`Documentation/translations/it_IT/admin-guide/README.rst <it_readme>` 95 + Questo file da una piccola anteprima del kernel Linux e descrive il 96 + minimo necessario per configurare e generare il kernel. I novizi 97 + del kernel dovrebbero iniziare da qui. 98 + 99 + :ref:`Documentation/translations/it_IT/process/changes.rst <it_changes>` 100 + 101 + Questo file fornisce una lista dei pacchetti software necessari 102 + a compilare e far funzionare il kernel con successo. 103 + 104 + :ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>` 105 + 106 + Questo file descrive lo stile della codifica per il kernel Linux, 107 + e parte delle motivazioni che ne sono alla base. Tutto il nuovo codice deve 108 + seguire le linee guida in questo documento. Molti amministratori 109 + accetteranno patch solo se queste osserveranno tali regole, e molte 110 + persone revisioneranno il codice solo se scritto nello stile appropriato. 111 + 112 + :ref:`Documentation/translations/it_IT/process/submitting-patches.rst <it_submittingpatches>` e 113 + :ref:`Documentation/translations/it_IT/process/submitting-drivers.rst <it_submittingdrivers>` 114 + 115 + Questo file descrive dettagliatamente come creare ed inviare una patch 116 + con successo, includendo (ma non solo questo): 117 + 118 + - Contenuto delle email 119 + - Formato delle email 120 + - I destinatari delle email 121 + 122 + Seguire tali regole non garantirà il successo (tutte le patch sono soggette 123 + a controlli realitivi a contenuto e stile), ma non seguirle lo precluderà 124 + sempre. 125 + 126 + Altre ottime descrizioni di come creare buone patch sono: 127 + 128 + "The Perfect Patch" 129 + https://www.ozlabs.org/~akpm/stuff/tpp.txt 130 + 131 + "Linux kernel patch submission format" 132 + http://linux.yyz.us/patch-format.html 133 + 134 + :ref:`Documentation/process/translations/it_IT/stable-api-nonsense.rst <it_stable_api_nonsense>` 135 + 136 + Questo file descrive la motivazioni sottostanti la conscia decisione di 137 + non avere un API stabile all'interno del kernel, incluso cose come: 138 + 139 + - Sottosistemi shim-layers (per compatibilità?) 140 + - Portabilità fra Sistemi Operativi dei driver. 141 + - Attenuare i rapidi cambiamenti all'interno dei sorgenti del kernel 142 + (o prevenirli) 143 + 144 + Questo documento è vitale per la comprensione della filosifia alla base 145 + dello sviluppo di Linux ed è molto importante per le persone che arrivano 146 + da esperienze con altri Sistemi Operativi. 147 + 148 + :ref:`Documentation/translations/it_IT/admin-guide/security-bugs.rst <it_securitybugs>` 149 + Se ritenete di aver trovato un problema di sicurezza nel kernel Linux, 150 + seguite i passaggi scritti in questo documento per notificarlo agli 151 + sviluppatori del kernel, ed aiutare la risoluzione del problema. 152 + 153 + :ref:`Documentation/translations/it_IT/process/management-style.rst <it_managementstyle>` 154 + Questo documento descrive come i manutentori del kernel Linux operano 155 + e la filosofia comune alla base del loro metodo. Questa è un'importante 156 + lettura per tutti coloro che sono nuovi allo sviluppo del kernel (o per 157 + chi è semplicemente curioso), poiché risolve molti dei più comuni 158 + fraintendimenti e confusioni dovuti al particolare comportamento dei 159 + manutentori del kernel. 160 + 161 + :ref:`Documentation/translations/it_IT/process/stable-kernel-rules.rst <it_stable_kernel_rules>` 162 + Questo file descrive le regole sulle quali vengono basati i rilasci del 163 + kernel, e spiega cosa fare se si vuole che una modifica venga inserita 164 + in uno di questi rilasci. 165 + 166 + :ref:`Documentation/translations/it_IT/process/kernel-docs.rst <it_kernel_docs>` 167 + Una lista di documenti pertinenti allo sviluppo del kernel. 168 + Per favore consultate questa lista se non trovate ciò che cercate nella 169 + documentazione interna del kernel. 170 + 171 + :ref:`Documentation/translations/it_IT/process/applying-patches.rst <it_applying_patches>` 172 + Una buona introduzione che descrivere esattamente cos'è una patch e come 173 + applicarla ai differenti rami di sviluppo del kernel. 174 + 175 + Il kernel inoltre ha un vasto numero di documenti che possono essere 176 + automaticamente generati dal codice sorgente stesso o da file 177 + ReStructuredText (ReST), come questo. Esso include una completa 178 + descrizione dell'API interna del kernel, e le regole su come gestire la 179 + sincronizzazione (locking) correttamente 180 + 181 + Tutte queste tipologie di documenti possono essere generati in PDF o in 182 + HTML utilizzando:: 183 + 184 + make pdfdocs 185 + make htmldocs 186 + 187 + rispettivamente dalla cartella principale dei sorgenti del kernel. 188 + 189 + I documenti che impiegano ReST saranno generati nella cartella 190 + Documentation/output. 191 + Questi posso essere generati anche in formato LaTex e ePub con:: 192 + 193 + make latexdocs 194 + make epubdocs 195 + 196 + Diventare uno sviluppatore del kernel 197 + ------------------------------------- 198 + Se non sapete nulla sullo sviluppo del kernel Linux, dovreste dare uno 199 + sguardo al progetto *Linux KernelNewbies*: 200 + 201 + https://kernelnewbies.org 202 + 203 + Esso prevede un'utile lista di discussione dove potete porre più o meno ogni 204 + tipo di quesito relativo ai concetti fondamentali sullo sviluppo del kernel 205 + (assicuratevi di cercare negli archivi, prima di chiedere qualcosa alla 206 + quale è già stata fornita risposta in passato). Esistono inoltre, un canale IRC 207 + che potete usare per formulare domande in tempo reale, e molti documenti utili 208 + che vi faciliteranno nell'apprendimento dello sviluppo del kernel Linux. 209 + 210 + Il sito internet contiene informazioni di base circa l'organizzazione del 211 + codice, sottosistemi e progetti attuali (sia interni che esterni a Linux). 212 + Esso descrive, inoltre, informazioni logistiche di base, riguardanti ad esempio 213 + la compilazione del kernel e l'applicazione di una modifica. 214 + 215 + Se non sapete dove cominciare, ma volete cercare delle attività dalle quali 216 + partire per partecipare alla comunità di sviluppo, andate al progetto Linux 217 + Kernel Janitor's. 218 + 219 + https://kernelnewbies.org/KernelJanitors 220 + 221 + È un buon posto da cui iniziare. Esso presenta una lista di problematiche 222 + relativamente semplici da sistemare e pulire all'interno della sorgente del 223 + kernel Linux. Lavorando con gli sviluppatori incaricati di questo progetto, 224 + imparerete le basi per l'inserimento delle vostre modifiche all'interno dei 225 + sorgenti del kernel Linux, e possibilmente, sarete indirizzati al lavoro 226 + successivo da svolgere, se non ne avrete ancora idea. 227 + 228 + Prima di apportare una qualsiasi modifica al codice del kernel Linux, 229 + è imperativo comprendere come tale codice funziona. A questo scopo, non c'è 230 + nulla di meglio che leggerlo direttamente (la maggior parte dei bit più 231 + complessi sono ben commentati), eventualmente anche con l'aiuto di strumenti 232 + specializzati. Uno degli strumenti che è particolarmente raccomandato è 233 + il progetto Linux Cross-Reference, che è in grado di presentare codice 234 + sorgente in un formato autoreferenziale ed indicizzato. Un eccellente ed 235 + aggiornata fonte di consultazione del codice del kernel la potete trovare qui: 236 + 237 + http://lxr.free-electrons.com/ 238 + 239 + 240 + Il processo di sviluppo 241 + ----------------------- 242 + Il processo di sviluppo del kernel Linux si compone di pochi "rami" principali 243 + e di molti altri rami per specifici sottosistemi. Questi rami sono: 244 + 245 + - I sorgenti kernel 4.x 246 + - I sorgenti stabili del kernel 4.x.y -stable 247 + - Le modifiche in 4.x -git 248 + - Sorgenti dei sottosistemi del kernel e le loro modifiche 249 + - Il kernel 4.x -next per test d'integrazione 250 + 251 + I sorgenti kernel 4.x 252 + ~~~~~~~~~~~~~~~~~~~~~ 253 + 254 + I kernel 4.x sono amministrati da Linus Torvald, e possono essere trovati 255 + su https://kernel.org nella cartella pub/linux/kernel/v4.x/. Il processo 256 + di sviluppo è il seguente: 257 + 258 + - Non appena un nuovo kernel viene rilasciato si apre una finestra di due 259 + settimane. Durante questo periodo i manutentori possono proporre a Linus 260 + dei grossi cambiamenti; solitamente i cambiamenti che sono già stati 261 + inseriti nel ramo -next del kernel per alcune settimane. Il modo migliore 262 + per sottoporre dei cambiamenti è attraverso git (lo strumento usato per 263 + gestire i sorgenti del kernel, più informazioni sul sito 264 + https://git-scm.com/) ma anche delle patch vanno bene. 265 + 266 + - Al termine delle due settimane un kernel -rc1 viene rilasciato e 267 + l'obbiettivo ora è quello di renderlo il più solido possibile. A questo 268 + punto la maggior parte delle patch dovrebbero correggere un'eventuale 269 + regressione. I bachi che sono sempre esistiti non sono considerabili come 270 + regressioni, quindi inviate questo tipo di cambiamenti solo se sono 271 + importanti. Notate che un intero driver (o filesystem) potrebbe essere 272 + accettato dopo la -rc1 poiché non esistono rischi di una possibile 273 + regressione con tale cambiamento, fintanto che quest'ultimo è 274 + auto-contenuto e non influisce su aree esterne al codice che è stato 275 + aggiunto. git può essere utilizzato per inviare le patch a Linus dopo che 276 + la -rc1 è stata rilasciata, ma è anche necessario inviare le patch ad 277 + una lista di discussione pubblica per un'ulteriore revisione. 278 + 279 + - Una nuova -rc viene rilasciata ogni volta che Linus reputa che gli attuali 280 + sorgenti siano in uno stato di salute ragionevolmente adeguato ai test. 281 + L'obiettivo è quello di rilasciare una nuova -rc ogni settimana. 282 + 283 + - Il processo continua fino a che il kernel è considerato "pronto"; tale 284 + processo dovrebbe durare circa in 6 settimane. 285 + 286 + È utile menzionare quanto scritto da Andrew Morton sulla lista di discussione 287 + kernel-linux in merito ai rilasci del kernel: 288 + 289 + *"Nessuno sa quando un kernel verrà rilasciato, poichè questo è 290 + legato allo stato dei bachi e non ad una cronologia preventiva."* 291 + 292 + I sorgenti stabili del kernel 4.x.y -stable 293 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 294 + 295 + I kernel con versioni in 3-parti sono "kernel stabili". Essi contengono 296 + correzioni critiche relativamente piccole nell'ambito della sicurezza 297 + oppure significative regressioni scoperte in un dato 4.x kernel. 298 + 299 + Questo è il ramo raccomandato per gli utenti che vogliono un kernel recente 300 + e stabile e non sono interessati a dare il proprio contributo alla verifica 301 + delle versioni di sviluppo o sperimentali. 302 + 303 + Se non è disponibile alcun kernel 4.x.y., quello più aggiornato e stabile 304 + sarà il kernel 4.x con la numerazione più alta. 305 + 306 + 4.x.y sono amministrati dal gruppo "stable" <stable@vger.kernel.org>, e sono 307 + rilasciati a seconda delle esigenze. Il normale periodo di rilascio è 308 + approssimativamente di due settimane, ma può essere più lungo se non si 309 + verificano problematiche urgenti. Un problema relativo alla sicurezza, invece, 310 + può determinare un rilascio immediato. 311 + 312 + Il file Documentation/process/stable-kernel-rules.rst (nei sorgenti) documenta 313 + quali tipologie di modifiche sono accettate per i sorgenti -stable, e come 314 + avviene il processo di rilascio. 315 + 316 + Le modifiche in 4.x -git 317 + ~~~~~~~~~~~~~~~~~~~~~~~~ 318 + 319 + Queste sono istantanee quotidiane del kernel di Linus e sono gestite in 320 + una repositorio git (da qui il nome). Queste modifiche sono solitamente 321 + rilasciate giornalmente e rappresentano l'attuale stato dei sorgenti di 322 + Linus. Queste sono da considerarsi più sperimentali di un -rc in quanto 323 + generate automaticamente senza nemmeno aver dato una rapida occhiata 324 + per verificarne lo stato. 325 + 326 + 327 + Sorgenti dei sottosistemi del kernel e le loro patch 328 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 329 + 330 + I manutentori dei diversi sottosistemi del kernel --- ed anche molti 331 + sviluppatori di sottosistemi --- mostrano il loro attuale stato di sviluppo 332 + nei loro repositori. In questo modo, altri possono vedere cosa succede nelle 333 + diverse parti del kernel. In aree dove lo sviluppo è rapido, potrebbe essere 334 + chiesto ad uno sviluppatore di basare le proprie modifiche su questi repositori 335 + in modo da evitare i conflitti fra le sottomissioni ed altri lavori in corso 336 + 337 + La maggior parte di questi repositori sono git, ma esistono anche altri SCM 338 + in uso, o file di patch pubblicate come una serie quilt. 339 + Gli indirizzi dei repositori di sottosistema sono indicati nel file 340 + MAINTAINERS. Molti di questi posso essere trovati su https://git.kernel.org/. 341 + 342 + Prima che una modifica venga inclusa in questi sottosistemi, sarà soggetta ad 343 + una revisione che inizialmente avviene tramite liste di discussione (vedere la 344 + sezione dedicata qui sotto). Per molti sottosistemi del kernel, tale processo 345 + di revisione è monitorato con lo strumento patchwork. 346 + Patchwork offre un'interfaccia web che mostra le patch pubblicate, inclusi i 347 + commenti o le revisioni fatte, e gli amministratori possono indicare le patch 348 + come "in revisione", "accettate", o "rifiutate". Diversi siti Patchwork sono 349 + elencati al sito https://patchwork.kernel.org/. 350 + 351 + Il kernel 4.x -next per test d'integrazione 352 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 353 + 354 + Prima che gli aggiornamenti dei sottosistemi siano accorpati nel ramo 355 + principale 4.x, sarà necessario un test d'integrazione. 356 + A tale scopo, esiste un repositorio speciale di test nel quale virtualmente 357 + tutti i rami dei sottosistemi vengono inclusi su base quotidiana: 358 + 359 + https://git.kernel.org/?p=linux/kernel/git/next/linux-next.git 360 + 361 + In questo modo, i kernel -next offrono uno sguardo riassuntivo su quello che 362 + ci si aspetterà essere nel kernel principale nel successivo periodo 363 + d'incorporazione. 364 + Coloro che vorranno fare dei test d'esecuzione del kernel -next sono più che 365 + benvenuti. 366 + 367 + 368 + Riportare Bug 369 + ------------- 370 + 371 + https://bugzilla.kernel.org è dove gli sviluppatori del kernel Linux tracciano 372 + i bachi del kernel. Gli utenti sono incoraggiati nel riportare tutti i bachi 373 + che trovano utilizzando questo strumento. 374 + Per maggiori dettagli su come usare il bugzilla del kernel, guardare: 375 + 376 + https://bugzilla.kernel.org/page.cgi?id=faq.html 377 + 378 + Il file admin-guide/reporting-bugs.rst nella cartella principale del kernel 379 + fornisce un buon modello sul come segnalare un baco nel kernel, e spiega quali 380 + informazioni sono necessarie agli sviluppatori per poter aiutare il 381 + rintracciamento del problema. 382 + 383 + Gestire i rapporti sui bug 384 + -------------------------- 385 + 386 + Uno dei modi migliori per mettere in pratica le vostre capacità di hacking è 387 + quello di riparare bachi riportati da altre persone. Non solo aiuterete a far 388 + diventare il kernel più stabile, ma imparerete a riparare problemi veri dal 389 + mondo ed accrescerete le vostre competenze, e gli altri sviluppatori saranno 390 + al corrente della vostra presenza. Riparare bachi è una delle migliori vie per 391 + acquisire meriti tra gli altri sviluppatori, perchè non a molte persone piace 392 + perdere tempo a sistemare i bachi di altri. 393 + 394 + Per lavorare sui rapporti di bachi già riportati, andate su 395 + https://bugzilla.kernel.org. 396 + 397 + Liste di discussione 398 + -------------------- 399 + 400 + Come descritto in molti dei documenti qui sopra, la maggior parte degli 401 + sviluppatori del kernel partecipano alla lista di discussione Linux Kernel. 402 + I dettagli su come iscriversi e disiscriversi dalla lista possono essere 403 + trovati al sito: 404 + 405 + http://vger.kernel.org/vger-lists.html#linux-kernel 406 + 407 + Ci sono diversi archivi della lista di discussione. Usate un qualsiasi motore 408 + di ricerca per trovarli. Per esempio: 409 + 410 + http://dir.gmane.org/gmane.linux.kernel 411 + 412 + É caldamente consigliata una ricerca in questi archivi sul tema che volete 413 + sollevare, prima di pubblicarlo sulla lista. Molte cose sono già state 414 + discusse in dettaglio e registrate negli archivi della lista di discussione. 415 + 416 + Molti dei sottosistemi del kernel hanno anche una loro lista di discussione 417 + dedicata. Guardate nel file MAINTAINERS per avere una lista delle liste di 418 + discussione e il loro uso. 419 + 420 + Molte di queste liste sono gestite su kernel.org. Per informazioni consultate 421 + la seguente pagina: 422 + 423 + http://vger.kernel.org/vger-lists.html 424 + 425 + Per favore ricordatevi della buona educazione quando utilizzate queste liste. 426 + Sebbene sia un pò dozzinale, il seguente URL contiene alcune semplici linee 427 + guida per interagire con la lista (o con qualsiasi altra lista): 428 + 429 + http://www.albion.com/netiquette/ 430 + 431 + Se diverse persone rispondo alla vostra mail, la lista dei riceventi (copia 432 + conoscenza) potrebbe diventare abbastanza lunga. Non cancellate nessuno dalla 433 + lista di CC: senza un buon motivo, e non rispondete solo all'indirizzo 434 + della lista di discussione. Fateci l'abitudine perché capita spesso di 435 + ricevere la stessa email due volte: una dal mittente ed una dalla lista; e non 436 + cercate di modificarla aggiungendo intestazioni stravaganti, agli altri non 437 + piacerà. 438 + 439 + Ricordate di rimanere sempre in argomento e di mantenere le attribuzioni 440 + delle vostre risposte invariate; mantenete il "John Kernelhacker wrote ...:" 441 + in cima alla vostra replica e aggiungete le vostre risposte fra i singoli 442 + blocchi citati, non scrivete all'inizio dell'email. 443 + 444 + Se aggiungete patch alla vostra mail, assicuratevi che siano del tutto 445 + leggibili come indicato in Documentation/process/submitting-patches.rst. 446 + Gli sviluppatori kernel non vogliono avere a che fare con allegati o patch 447 + compresse; vogliono invece poter commentare le righe dei vostri cambiamenti, 448 + il che può funzionare solo in questo modo. 449 + Assicuratevi di utilizzare un gestore di mail che non alterì gli spazi ed i 450 + caratteri. Un ottimo primo test è quello di inviare a voi stessi una mail e 451 + cercare di sottoporre la vostra stessa patch. Se non funziona, sistemate il 452 + vostro programma di posta, o cambiatelo, finché non funziona. 453 + 454 + Ed infine, per favore ricordatevi di mostrare rispetto per gli altri 455 + sottoscriventi. 456 + 457 + Lavorare con la comunità 458 + ------------------------ 459 + 460 + L'obiettivo di questa comunità è quello di fornire il miglior kernel possibile. 461 + Quando inviate una modifica che volete integrare, sarà valutata esclusivamente 462 + dal punto di vista tecnico. Quindi, cosa dovreste aspettarvi? 463 + 464 + - critiche 465 + - commenti 466 + - richieste di cambiamento 467 + - richieste di spiegazioni 468 + - nulla 469 + 470 + Ricordatevi che questo fa parte dell'integrazione della vostra modifica 471 + all'interno del kernel. Dovete essere in grado di accettare le critiche, 472 + valutarle a livello tecnico ed eventualmente rielaborare nuovamente le vostre 473 + modifiche o fornire delle chiare e concise motivazioni per le quali le 474 + modifiche suggerite non dovrebbero essere fatte. 475 + Se non riceverete risposte, aspettate qualche giorno e riprovate ancora, 476 + qualche volta le cose si perdono nell'enorme mucchio di email. 477 + 478 + Cosa non dovreste fare? 479 + 480 + - aspettarvi che la vostra modifica venga accettata senza problemi 481 + - mettervi sulla difensiva 482 + - ignorare i commenti 483 + - sottomettere nuovamente la modifica senza fare nessuno dei cambiamenti 484 + richiesti 485 + 486 + In una comunità che è alla ricerca delle migliori soluzioni tecniche possibili, 487 + ci saranno sempre opinioni differenti sull'utilità di una modifica. 488 + Siate cooperativi e vogliate adattare la vostra idea in modo che sia inserita 489 + nel kernel. O almeno vogliate dimostrare che la vostra idea vale. 490 + Ricordatevi, sbagliare è accettato fintanto che siate disposti a lavorare verso 491 + una soluzione che è corretta. 492 + 493 + È normale che le risposte alla vostra prima modifica possa essere 494 + semplicemente una lista con dozzine di cose che dovreste correggere. 495 + Questo **non** implica che la vostra patch non sarà accettata, e questo 496 + **non** è contro di voi personalmente. 497 + Semplicemente correggete tutte le questioni sollevate contro la vostra modifica 498 + ed inviatela nuovamente. 499 + 500 + Differenze tra la comunità del kernel e le strutture aziendali 501 + -------------------------------------------------------------- 502 + 503 + La comunità del kernel funziona diversamente rispetto a molti ambienti di 504 + sviluppo aziendali. Qui di seguito una lista di cose che potete provare a 505 + fare per evitare problemi: 506 + 507 + Cose da dire riguardanti le modifiche da voi proposte: 508 + 509 + - "Questo risolve più problematiche." 510 + - "Questo elimina 2000 stringhe di codice." 511 + - "Qui una modifica che spiega cosa sto cercando di fare." 512 + - "L'ho testato su 5 diverse architetture.." 513 + - "Qui una serie di piccole modifiche che.." 514 + - "Questo aumenta le prestazioni di macchine standard..." 515 + 516 + Cose che dovreste evitare di dire: 517 + 518 + - "Lo abbiamo fatto in questo modo in AIX/ptx/Solaris, di conseguenza 519 + deve per forza essere giusto..." 520 + - "Ho fatto questo per 20 anni, quindi.." 521 + - "Questo è richiesto dalla mia Azienda per far soldi" 522 + - "Questo è per la linea di prodotti della nostra Azienda" 523 + - "Ecco il mio documento di design di 1000 pagine che descrive ciò che ho 524 + in mente" 525 + - "Ci ho lavorato per 6 mesi..." 526 + - "Ecco una patch da 5000 righe che.." 527 + - "Ho riscritto il pasticcio attuale, ed ecco qua.." 528 + - "Ho una scadenza, e questa modifica ha bisogno di essere approvata ora" 529 + 530 + Un'altra cosa nella quale la comunità del kernel si differenzia dai più 531 + classici ambienti di ingegneria del software è la natura "senza volto" delle 532 + interazioni umane. Uno dei benefici dell'uso delle email e di irc come forma 533 + primordiale di comunicazione è l'assenza di discriminazione basata su genere e 534 + razza. L'ambienti di lavoro Linux accetta donne e minoranze perchè tutto quello 535 + che sei è un indirizzo email. Aiuta anche l'aspetto internazionale nel 536 + livellare il terreno di gioco perchè non è possibile indovinare il genere 537 + basandosi sul nome di una persona. Un uomo può chiamarsi Andrea ed una donna 538 + potrebbe chiamarsi Pat. Gran parte delle donne che hanno lavorato al kernel 539 + Linux e che hanno espresso una personale opinione hanno avuto esperienze 540 + positive. 541 + 542 + La lingua potrebbe essere un ostacolo per quelle persone che non si trovano 543 + a loro agio con l'inglese. Una buona padronanza del linguaggio può essere 544 + necessaria per esporre le proprie idee in maniera appropiata all'interno 545 + delle liste di discussione, quindi è consigliabile che rileggiate le vostre 546 + email prima di inviarle in modo da essere certi che abbiano senso in inglese. 547 + 548 + 549 + Spezzare le vostre modifiche 550 + ---------------------------- 551 + 552 + La comunità del kernel Linux non accetta con piacere grossi pezzi di codice 553 + buttati lì tutti in una volta. Le modifiche necessitano di essere 554 + adeguatamente presentate, discusse, e suddivise in parti più piccole ed 555 + indipendenti. Questo è praticamente l'esatto opposto di quello che le 556 + aziende fanno solitamente. La vostra proposta dovrebbe, inoltre, essere 557 + presentata prestissimo nel processo di sviluppo, così che possiate ricevere 558 + un riscontro su quello che state facendo. Lasciate che la comunità 559 + senta che state lavorando con loro, e che non li stiate sfruttando come 560 + discarica per le vostre aggiunte. In ogni caso, non inviate 50 email nello 561 + stesso momento in una lista di discussione, il più delle volte la vostra serie 562 + di modifiche dovrebbe essere più piccola. 563 + 564 + I motivi per i quali dovreste frammentare le cose sono i seguenti: 565 + 566 + 1) Piccole modifiche aumentano le probabilità che vengano accettate, 567 + altrimenti richiederebbe troppo tempo o sforzo nel verificarne 568 + la correttezza. Una modifica di 5 righe può essere accettata da un 569 + manutentore con a mala pena una seconda occhiata. Invece, una modifica da 570 + 500 linee può richiedere ore di rilettura per verificarne la correttezza 571 + (il tempo necessario è esponenzialmente proporzionale alla dimensione della 572 + modifica, o giù di lì) 573 + 574 + Piccole modifiche sono inoltre molto facili da debuggare quando qualcosa 575 + non va. È molto più facile annullare le modifiche una per una che 576 + dissezionare una patch molto grande dopo la sua sottomissione (e rompere 577 + qualcosa). 578 + 579 + 2) È importante non solo inviare piccole modifiche, ma anche riscriverle e 580 + semplificarle (o più semplicemente ordinarle) prima di sottoporle. 581 + 582 + Qui un'analogia dello sviluppatore kernel Al Viro: 583 + 584 + *"Pensate ad un insegnante di matematica che corregge il compito 585 + di uno studente (di matematica). L'insegnante non vuole vedere le 586 + prove e gli errori commessi dallo studente prima che arrivi alla 587 + soluzione. Vuole vedere la risposta più pulita ed elegante 588 + possibile. Un buono studente lo sa, e non presenterebbe mai le 589 + proprie bozze prima prima della soluzione finale"* 590 + 591 + *"Lo stesso vale per lo sviluppo del kernel. I manutentori ed i 592 + revisori non vogliono vedere il procedimento che sta dietro al 593 + problema che uno sta risolvendo. Vogliono vedere una soluzione 594 + semplice ed elegante."* 595 + 596 + Può essere una vera sfida il saper mantenere l'equilibrio fra una presentazione 597 + elegante della vostra soluzione, lavorare insieme ad una comunità e dibattere 598 + su un lavoro incompleto. Pertanto è bene entrare presto nel processo di 599 + revisione per migliorare il vostro lavoro, ma anche per riuscire a tenere le 600 + vostre modifiche in pezzettini che potrebbero essere già accettate, nonostante 601 + la vostra intera attività non lo sia ancora. 602 + 603 + In fine, rendetevi conto che non è accettabile inviare delle modifiche 604 + incomplete con la promessa che saranno "sistemate dopo". 605 + 606 + 607 + Giustificare le vostre modifiche 608 + -------------------------------- 609 + 610 + Insieme alla frammentazione delle vostre modifiche, è altrettanto importante 611 + permettere alla comunità Linux di capire perché dovrebbero accettarle. 612 + Nuove funzionalità devono essere motivate come necessarie ed utili. 613 + 614 + 615 + Documentare le vostre modifiche 616 + ------------------------------- 617 + 618 + Quando inviate le vostre modifiche, fate particolare attenzione a quello che 619 + scrivete nella vostra email. Questa diventerà il *ChangeLog* per la modifica, 620 + e sarà visibile a tutti per sempre. Dovrebbe descrivere la modifica nella sua 621 + interezza, contenendo: 622 + 623 + - perchè la modifica è necessaria 624 + - l'approccio d'insieme alla patch 625 + - dettagli supplementari 626 + - risultati dei test 627 + 628 + Per maggiori dettagli su come tutto ciò dovrebbe apparire, riferitevi alla 629 + sezione ChangeLog del documento: 630 + 631 + "The Perfect Patch" 632 + http://www.ozlabs.org/~akpm/stuff/tpp.txt 633 + 634 + A volte tutto questo è difficile da realizzare. Il perfezionamento di queste 635 + pratiche può richiedere anni (eventualmente). È un processo continuo di 636 + miglioramento che richiede molta pazienza e determinazione. Ma non mollate, 637 + si può fare. Molti lo hanno fatto prima, ed ognuno ha dovuto iniziare dove 638 + siete voi ora. 639 + 640 + 641 + 642 + 643 + ---------- 644 + 645 + Grazie a Paolo Ciarrocchi che ha permesso che la sezione "Development Process" 646 + (https://lwn.net/Articles/94386/) fosse basata sui testi da lui scritti, ed a 647 + Randy Dunlap e Gerrit Huizenga per la lista di cose che dovreste e non 648 + dovreste dire. Grazie anche a Pat Mochel, Hanna Linder, Randy Dunlap, 649 + Kay Sievers, Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, Andrew Morton, 650 + Andi Kleen, Vadim Lobanov, Jesper Juhl, Adrian Bunk, Keri Harris, Frans Pop, 651 + David A. Wheeler, Junio Hamano, Michael Kerrisk, e Alex Shepard per le 652 + loro revisioni, commenti e contributi. Senza il loro aiuto, questo documento 653 + non sarebbe stato possibile. 654 + 655 + Manutentore: Greg Kroah-Hartman <greg@kroah.com>
+67
Documentation/translations/it_IT/process/index.rst
··· 1 + .. raw:: latex 2 + 3 + \renewcommand\thesection* 4 + \renewcommand\thesubsection* 5 + 6 + .. include:: ../disclaimer-ita.rst 7 + 8 + :Original: :ref:`Documentation/process/index.rst <process_index>` 9 + :Translator: Federico Vaga <federico.vaga@vaga.pv.it> 10 + 11 + .. _it_process_index: 12 + 13 + Lavorare con la comunità di sviluppo del kernel 14 + =============================================== 15 + 16 + Quindi volete diventare sviluppatori del kernel? Benvenuti! C'è molto da 17 + imparare sul lato tecnico del kernel, ma è anche importante capire come 18 + funziona la nostra comunità. Leggere questi documenti renderà più facile 19 + l'accettazione delle vostre modifiche con il minimo sforzo. 20 + 21 + Di seguito le guide che ogni sviluppatore dovrebbe leggere. 22 + 23 + .. toctree:: 24 + :maxdepth: 1 25 + 26 + howto 27 + code-of-conduct 28 + development-process 29 + submitting-patches 30 + coding-style 31 + maintainer-pgp-guide 32 + email-clients 33 + kernel-enforcement-statement 34 + kernel-driver-statement 35 + 36 + Poi ci sono altre guide sulla comunità che sono di interesse per molti 37 + degli sviluppatori: 38 + 39 + .. toctree:: 40 + :maxdepth: 1 41 + 42 + changes 43 + submitting-drivers 44 + stable-api-nonsense 45 + management-style 46 + stable-kernel-rules 47 + submit-checklist 48 + kernel-docs 49 + 50 + Ed infine, qui ci sono alcune guide più tecniche che son state messe qua solo 51 + perché non si è trovato un posto migliore. 52 + 53 + .. toctree:: 54 + :maxdepth: 1 55 + 56 + applying-patches 57 + adding-syscalls 58 + magic-number 59 + volatile-considered-harmful 60 + clang-format 61 + 62 + .. only:: subproject and html 63 + 64 + Indices 65 + ======= 66 + 67 + * :ref:`genindex`
+13
Documentation/translations/it_IT/process/kernel-docs.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/kernel-docs.rst <kernel_docs>` 4 + 5 + 6 + .. _it_kernel_docs: 7 + 8 + Indice di documenti per le persone interessate a capire e/o scrivere per il kernel Linux 9 + ======================================================================================== 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+211
Documentation/translations/it_IT/process/kernel-driver-statement.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/kernel-driver-statement.rst <process_statement_driver>` 4 + :Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5 + 6 + .. _it_process_statement_driver: 7 + 8 + Dichiarazioni sui driver per il kernel 9 + ====================================== 10 + 11 + Presa di posizione sui moduli per il kernel Linux 12 + ------------------------------------------------- 13 + 14 + Noi, i sottoscritti sviluppatori del kernel, consideriamo pericoloso 15 + o indesiderato qualsiasi modulo o driver per il kernel Linux di tipo 16 + *a sorgenti chiusi* (*closed-source*). Ripetutamente, li abbiamo 17 + trovati deleteri per gli utenti Linux, le aziende, ed in generale 18 + l'ecosistema Linux. Questi moduli impediscono l'apertura, la stabilità, 19 + la flessibilità, e la manutenibilità del modello di sviluppo di Linux 20 + e impediscono ai loro utenti di beneficiare dell'esperienza dalla 21 + comunità Linux. I fornitori che distribuiscono codice a sorgenti chiusi 22 + obbligano i propri utenti a rinunciare ai principali vantaggi di Linux 23 + o a cercarsi nuovi fornitori. 24 + Perciò, al fine di sfruttare i vantaggi che codice aperto ha da offrire, 25 + come l'abbattimento dei costi e un supporto condiviso, spingiamo i 26 + fornitori ad adottare una politica di supporto ai loro clienti Linux 27 + che preveda il rilascio dei sorgenti per il kernel. 28 + 29 + Parliamo solo per noi stessi, e non per una qualsiasi azienda per la 30 + quale lavoriamo oggi, o abbiamo lavorato in passato, o lavoreremo in 31 + futuro. 32 + 33 + 34 + - Dave Airlie 35 + - Nick Andrew 36 + - Jens Axboe 37 + - Ralf Baechle 38 + - Felipe Balbi 39 + - Ohad Ben-Cohen 40 + - Muli Ben-Yehuda 41 + - Jiri Benc 42 + - Arnd Bergmann 43 + - Thomas Bogendoerfer 44 + - Vitaly Bordug 45 + - James Bottomley 46 + - Josh Boyer 47 + - Neil Brown 48 + - Mark Brown 49 + - David Brownell 50 + - Michael Buesch 51 + - Franck Bui-Huu 52 + - Adrian Bunk 53 + - François Cami 54 + - Ralph Campbell 55 + - Luiz Fernando N. Capitulino 56 + - Mauro Carvalho Chehab 57 + - Denis Cheng 58 + - Jonathan Corbet 59 + - Glauber Costa 60 + - Alan Cox 61 + - Magnus Damm 62 + - Ahmed S. Darwish 63 + - Robert P. J. Day 64 + - Hans de Goede 65 + - Arnaldo Carvalho de Melo 66 + - Helge Deller 67 + - Jean Delvare 68 + - Mathieu Desnoyers 69 + - Sven-Thorsten Dietrich 70 + - Alexey Dobriyan 71 + - Daniel Drake 72 + - Alex Dubov 73 + - Randy Dunlap 74 + - Michael Ellerman 75 + - Pekka Enberg 76 + - Jan Engelhardt 77 + - Mark Fasheh 78 + - J. Bruce Fields 79 + - Larry Finger 80 + - Jeremy Fitzhardinge 81 + - Mike Frysinger 82 + - Kumar Gala 83 + - Robin Getz 84 + - Liam Girdwood 85 + - Jan-Benedict Glaw 86 + - Thomas Gleixner 87 + - Brice Goglin 88 + - Cyrill Gorcunov 89 + - Andy Gospodarek 90 + - Thomas Graf 91 + - Krzysztof Halasa 92 + - Harvey Harrison 93 + - Stephen Hemminger 94 + - Michael Hennerich 95 + - Tejun Heo 96 + - Benjamin Herrenschmidt 97 + - Kristian Høgsberg 98 + - Henrique de Moraes Holschuh 99 + - Marcel Holtmann 100 + - Mike Isely 101 + - Takashi Iwai 102 + - Olof Johansson 103 + - Dave Jones 104 + - Jesper Juhl 105 + - Matthias Kaehlcke 106 + - Kenji Kaneshige 107 + - Jan Kara 108 + - Jeremy Kerr 109 + - Russell King 110 + - Olaf Kirch 111 + - Roel Kluin 112 + - Hans-Jürgen Koch 113 + - Auke Kok 114 + - Peter Korsgaard 115 + - Jiri Kosina 116 + - Aaro Koskinen 117 + - Mariusz Kozlowski 118 + - Greg Kroah-Hartman 119 + - Michael Krufky 120 + - Aneesh Kumar 121 + - Clemens Ladisch 122 + - Christoph Lameter 123 + - Gunnar Larisch 124 + - Anders Larsen 125 + - Grant Likely 126 + - John W. Linville 127 + - Yinghai Lu 128 + - Tony Luck 129 + - Pavel Machek 130 + - Matt Mackall 131 + - Paul Mackerras 132 + - Roland McGrath 133 + - Patrick McHardy 134 + - Kyle McMartin 135 + - Paul Menage 136 + - Thierry Merle 137 + - Eric Miao 138 + - Akinobu Mita 139 + - Ingo Molnar 140 + - James Morris 141 + - Andrew Morton 142 + - Paul Mundt 143 + - Oleg Nesterov 144 + - Luca Olivetti 145 + - S.Çağlar Onur 146 + - Pierre Ossman 147 + - Keith Owens 148 + - Venkatesh Pallipadi 149 + - Nick Piggin 150 + - Nicolas Pitre 151 + - Evgeniy Polyakov 152 + - Richard Purdie 153 + - Mike Rapoport 154 + - Sam Ravnborg 155 + - Gerrit Renker 156 + - Stefan Richter 157 + - David Rientjes 158 + - Luis R. Rodriguez 159 + - Stefan Roese 160 + - Francois Romieu 161 + - Rami Rosen 162 + - Stephen Rothwell 163 + - Maciej W. Rozycki 164 + - Mark Salyzyn 165 + - Yoshinori Sato 166 + - Deepak Saxena 167 + - Holger Schurig 168 + - Amit Shah 169 + - Yoshihiro Shimoda 170 + - Sergei Shtylyov 171 + - Kay Sievers 172 + - Sebastian Siewior 173 + - Rik Snel 174 + - Jes Sorensen 175 + - Alexey Starikovskiy 176 + - Alan Stern 177 + - Timur Tabi 178 + - Hirokazu Takata 179 + - Eliezer Tamir 180 + - Eugene Teo 181 + - Doug Thompson 182 + - FUJITA Tomonori 183 + - Dmitry Torokhov 184 + - Marcelo Tosatti 185 + - Steven Toth 186 + - Theodore Tso 187 + - Matthias Urlichs 188 + - Geert Uytterhoeven 189 + - Arjan van de Ven 190 + - Ivo van Doorn 191 + - Rik van Riel 192 + - Wim Van Sebroeck 193 + - Hans Verkuil 194 + - Horst H. von Brand 195 + - Dmitri Vorobiev 196 + - Anton Vorontsov 197 + - Daniel Walker 198 + - Johannes Weiner 199 + - Harald Welte 200 + - Matthew Wilcox 201 + - Dan J. Williams 202 + - Darrick J. Wong 203 + - David Woodhouse 204 + - Chris Wright 205 + - Bryan Wu 206 + - Rafael J. Wysocki 207 + - Herbert Xu 208 + - Vlad Yasevich 209 + - Peter Zijlstra 210 + - Bartlomiej Zolnierkiewicz 211 +
+13
Documentation/translations/it_IT/process/kernel-enforcement-statement.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/kernel-enforcement-statement.rst <process_statement_kernel>` 4 + 5 + 6 + .. _it_process_statement_kernel: 7 + 8 + Applicazione della licenza sul kernel Linux 9 + =========================================== 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+170
Documentation/translations/it_IT/process/magic-number.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/magic-numbers.rst <magicnumbers>` 4 + :Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5 + 6 + .. _it_magicnumbers: 7 + 8 + I numeri magici di Linux 9 + ======================== 10 + 11 + Questo documento è un registro dei numeri magici in uso. Quando 12 + aggiungete un numero magico ad una struttura, dovreste aggiungerlo anche 13 + a questo documento; la cosa migliore è che tutti i numeri magici usati 14 + dalle varie strutture siano unici. 15 + 16 + È **davvero** un'ottima idea proteggere le strutture dati del kernel con 17 + dei numeri magici. Questo vi permette in fase d'esecuzione di (a) verificare 18 + se una struttura è stata malmenata, o (b) avete passato a una procedura la 19 + struttura errata. Quest'ultimo è molto utile - particolarmente quando si passa 20 + una struttura dati tramite un puntatore void \*. Il codice tty, per esempio, 21 + effettua questa operazione con regolarità passando avanti e indietro le 22 + strutture specifiche per driver e discipline. 23 + 24 + Per utilizzare un numero magico, dovete dichiararlo all'inizio della struttura 25 + dati, come di seguito:: 26 + 27 + struct tty_ldisc { 28 + int magic; 29 + ... 30 + }; 31 + 32 + Per favore, seguite questa direttiva quando aggiungerete migliorie al kernel! 33 + Mi ha risparmiato un numero illimitato di ore di debug, specialmente nei casi 34 + più ostici dove si è andati oltre la dimensione di un vettore e la struttura 35 + dati che lo seguiva in memoria è stata sovrascritta. Seguendo questa 36 + direttiva, questi casi vengono identificati velocemente e in sicurezza. 37 + 38 + Registro dei cambiamenti:: 39 + 40 + Theodore Ts'o 41 + 31 Mar 94 42 + 43 + La tabella magica è aggiornata a Linux 2.1.55. 44 + 45 + Michael Chastain 46 + <mailto:mec@shout.net> 47 + 22 Sep 1997 48 + 49 + Ora dovrebbe essere aggiornata a Linux 2.1.112. Dato che 50 + siamo in un momento di congelamento delle funzionalità 51 + (*feature freeze*) è improbabile che qualcosa cambi prima 52 + della versione 2.2.x. Le righe sono ordinate secondo il 53 + campo numero. 54 + 55 + Krzysztof G. Baranowski 56 + <mailto: kgb@knm.org.pl> 57 + 29 Jul 1998 58 + 59 + Aggiornamento della tabella a Linux 2.5.45. Giusti nel congelamento 60 + delle funzionalità ma è comunque possibile che qualche nuovo 61 + numero magico s'intrufoli prima del kernel 2.6.x. 62 + 63 + Petr Baudis 64 + <pasky@ucw.cz> 65 + 03 Nov 2002 66 + 67 + Aggiornamento della tabella magica a Linux 2.5.74. 68 + 69 + Fabian Frederick 70 + <ffrederick@users.sourceforge.net> 71 + 09 Jul 2003 72 + 73 + 74 + ===================== ================ ======================== ========================================== 75 + Nome magico Numero Struttura File 76 + ===================== ================ ======================== ========================================== 77 + PG_MAGIC 'P' pg_{read,write}_hdr ``include/linux/pg.h`` 78 + CMAGIC 0x0111 user ``include/linux/a.out.h`` 79 + MKISS_DRIVER_MAGIC 0x04bf mkiss_channel ``drivers/net/mkiss.h`` 80 + HDLC_MAGIC 0x239e n_hdlc ``drivers/char/n_hdlc.c`` 81 + APM_BIOS_MAGIC 0x4101 apm_user ``arch/x86/kernel/apm_32.c`` 82 + CYCLADES_MAGIC 0x4359 cyclades_port ``include/linux/cyclades.h`` 83 + DB_MAGIC 0x4442 fc_info ``drivers/net/iph5526_novram.c`` 84 + DL_MAGIC 0x444d fc_info ``drivers/net/iph5526_novram.c`` 85 + FASYNC_MAGIC 0x4601 fasync_struct ``include/linux/fs.h`` 86 + FF_MAGIC 0x4646 fc_info ``drivers/net/iph5526_novram.c`` 87 + ISICOM_MAGIC 0x4d54 isi_port ``include/linux/isicom.h`` 88 + PTY_MAGIC 0x5001 ``drivers/char/pty.c`` 89 + PPP_MAGIC 0x5002 ppp ``include/linux/if_pppvar.h`` 90 + SERIAL_MAGIC 0x5301 async_struct ``include/linux/serial.h`` 91 + SSTATE_MAGIC 0x5302 serial_state ``include/linux/serial.h`` 92 + SLIP_MAGIC 0x5302 slip ``drivers/net/slip.h`` 93 + STRIP_MAGIC 0x5303 strip ``drivers/net/strip.c`` 94 + X25_ASY_MAGIC 0x5303 x25_asy ``drivers/net/x25_asy.h`` 95 + SIXPACK_MAGIC 0x5304 sixpack ``drivers/net/hamradio/6pack.h`` 96 + AX25_MAGIC 0x5316 ax_disp ``drivers/net/mkiss.h`` 97 + TTY_MAGIC 0x5401 tty_struct ``include/linux/tty.h`` 98 + MGSL_MAGIC 0x5401 mgsl_info ``drivers/char/synclink.c`` 99 + TTY_DRIVER_MAGIC 0x5402 tty_driver ``include/linux/tty_driver.h`` 100 + MGSLPC_MAGIC 0x5402 mgslpc_info ``drivers/char/pcmcia/synclink_cs.c`` 101 + TTY_LDISC_MAGIC 0x5403 tty_ldisc ``include/linux/tty_ldisc.h`` 102 + USB_SERIAL_MAGIC 0x6702 usb_serial ``drivers/usb/serial/usb-serial.h`` 103 + FULL_DUPLEX_MAGIC 0x6969 ``drivers/net/ethernet/dec/tulip/de2104x.c`` 104 + USB_BLUETOOTH_MAGIC 0x6d02 usb_bluetooth ``drivers/usb/class/bluetty.c`` 105 + RFCOMM_TTY_MAGIC 0x6d02 ``net/bluetooth/rfcomm/tty.c`` 106 + USB_SERIAL_PORT_MAGIC 0x7301 usb_serial_port ``drivers/usb/serial/usb-serial.h`` 107 + CG_MAGIC 0x00090255 ufs_cylinder_group ``include/linux/ufs_fs.h`` 108 + RPORT_MAGIC 0x00525001 r_port ``drivers/char/rocket_int.h`` 109 + LSEMAGIC 0x05091998 lse ``drivers/fc4/fc.c`` 110 + GDTIOCTL_MAGIC 0x06030f07 gdth_iowr_str ``drivers/scsi/gdth_ioctl.h`` 111 + RIEBL_MAGIC 0x09051990 ``drivers/net/atarilance.c`` 112 + NBD_REQUEST_MAGIC 0x12560953 nbd_request ``include/linux/nbd.h`` 113 + RED_MAGIC2 0x170fc2a5 (any) ``mm/slab.c`` 114 + BAYCOM_MAGIC 0x19730510 baycom_state ``drivers/net/baycom_epp.c`` 115 + ISDN_X25IFACE_MAGIC 0x1e75a2b9 isdn_x25iface_proto_data ``drivers/isdn/isdn_x25iface.h`` 116 + ECP_MAGIC 0x21504345 cdkecpsig ``include/linux/cdk.h`` 117 + LSOMAGIC 0x27091997 lso ``drivers/fc4/fc.c`` 118 + LSMAGIC 0x2a3b4d2a ls ``drivers/fc4/fc.c`` 119 + WANPIPE_MAGIC 0x414C4453 sdla_{dump,exec} ``include/linux/wanpipe.h`` 120 + CS_CARD_MAGIC 0x43525553 cs_card ``sound/oss/cs46xx.c`` 121 + LABELCL_MAGIC 0x4857434c labelcl_info_s ``include/asm/ia64/sn/labelcl.h`` 122 + ISDN_ASYNC_MAGIC 0x49344C01 modem_info ``include/linux/isdn.h`` 123 + CTC_ASYNC_MAGIC 0x49344C01 ctc_tty_info ``drivers/s390/net/ctctty.c`` 124 + ISDN_NET_MAGIC 0x49344C02 isdn_net_local_s ``drivers/isdn/i4l/isdn_net_lib.h`` 125 + SAVEKMSG_MAGIC2 0x4B4D5347 savekmsg ``arch/*/amiga/config.c`` 126 + CS_STATE_MAGIC 0x4c4f4749 cs_state ``sound/oss/cs46xx.c`` 127 + SLAB_C_MAGIC 0x4f17a36d kmem_cache ``mm/slab.c`` 128 + COW_MAGIC 0x4f4f4f4d cow_header_v1 ``arch/um/drivers/ubd_user.c`` 129 + I810_CARD_MAGIC 0x5072696E i810_card ``sound/oss/i810_audio.c`` 130 + TRIDENT_CARD_MAGIC 0x5072696E trident_card ``sound/oss/trident.c`` 131 + ROUTER_MAGIC 0x524d4157 wan_device [in ``wanrouter.h`` pre 3.9] 132 + SAVEKMSG_MAGIC1 0x53415645 savekmsg ``arch/*/amiga/config.c`` 133 + GDA_MAGIC 0x58464552 gda ``arch/mips/include/asm/sn/gda.h`` 134 + RED_MAGIC1 0x5a2cf071 (any) ``mm/slab.c`` 135 + EEPROM_MAGIC_VALUE 0x5ab478d2 lanai_dev ``drivers/atm/lanai.c`` 136 + HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state ``include/linux/hdlcdrv.h`` 137 + PCXX_MAGIC 0x5c6df104 channel ``drivers/char/pcxx.h`` 138 + KV_MAGIC 0x5f4b565f kernel_vars_s ``arch/mips/include/asm/sn/klkernvars.h`` 139 + I810_STATE_MAGIC 0x63657373 i810_state ``sound/oss/i810_audio.c`` 140 + TRIDENT_STATE_MAGIC 0x63657373 trient_state ``sound/oss/trident.c`` 141 + M3_CARD_MAGIC 0x646e6f50 m3_card ``sound/oss/maestro3.c`` 142 + FW_HEADER_MAGIC 0x65726F66 fw_header ``drivers/atm/fore200e.h`` 143 + SLOT_MAGIC 0x67267321 slot ``drivers/hotplug/cpqphp.h`` 144 + SLOT_MAGIC 0x67267322 slot ``drivers/hotplug/acpiphp.h`` 145 + LO_MAGIC 0x68797548 nbd_device ``include/linux/nbd.h`` 146 + OPROFILE_MAGIC 0x6f70726f super_block ``drivers/oprofile/oprofilefs.h`` 147 + M3_STATE_MAGIC 0x734d724d m3_state ``sound/oss/maestro3.c`` 148 + VMALLOC_MAGIC 0x87654320 snd_alloc_track ``sound/core/memory.c`` 149 + KMALLOC_MAGIC 0x87654321 snd_alloc_track ``sound/core/memory.c`` 150 + PWC_MAGIC 0x89DC10AB pwc_device ``drivers/usb/media/pwc.h`` 151 + NBD_REPLY_MAGIC 0x96744668 nbd_reply ``include/linux/nbd.h`` 152 + ENI155_MAGIC 0xa54b872d midway_eprom ``drivers/atm/eni.h`` 153 + CODA_MAGIC 0xC0DAC0DA coda_file_info ``fs/coda/coda_fs_i.h`` 154 + DPMEM_MAGIC 0xc0ffee11 gdt_pci_sram ``drivers/scsi/gdth.h`` 155 + YAM_MAGIC 0xF10A7654 yam_port ``drivers/net/hamradio/yam.c`` 156 + CCB_MAGIC 0xf2691ad2 ccb ``drivers/scsi/ncr53c8xx.c`` 157 + QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry ``drivers/scsi/arm/queue.c`` 158 + QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry ``drivers/scsi/arm/queue.c`` 159 + HTB_CMAGIC 0xFEFAFEF1 htb_class ``net/sched/sch_htb.c`` 160 + NMI_MAGIC 0x48414d4d455201 nmi_s ``arch/mips/include/asm/sn/nmi.h`` 161 + ===================== ================ ======================== ========================================== 162 + 163 + Da notare che ci sono anche dei numeri magici specifici per driver nel 164 + *sound memory management*. Consultate ``include/sound/sndmagic.h`` per una 165 + lista completa. Molti driver audio OSS hanno i loro numeri magici costruiti a 166 + partire dall'identificativo PCI della scheda audio - nemmeno questi sono 167 + elencati in questo file. 168 + 169 + Il file-system HFS è un altro grande utilizzatore di numeri magici - potete 170 + trovarli qui ``fs/hfs/hfs.h``.
+13
Documentation/translations/it_IT/process/maintainer-pgp-guide.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/maintainer-pgp-guide.rst <pgpguide>` 4 + 5 + .. _it_pgpguide: 6 + 7 + ======================================== 8 + Guida a PGP per i manutentori del kernel 9 + ======================================== 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/management-style.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/management-style.rst <managementstyle>` 4 + 5 + .. _it_managementstyle: 6 + 7 + Tipo di gestione del kernel Linux 8 + ================================= 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+13
Documentation/translations/it_IT/process/stable-api-nonsense.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/stable-api-nonsense.rst <stable_api_nonsense>` 4 + 5 + 6 + .. _it_stable_api_nonsense: 7 + 8 + L'interfaccia dei driver per il kernel Linux 9 + ============================================ 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/stable-kernel-rules.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>` 4 + 5 + .. _it_stable_kernel_rules: 6 + 7 + Tutto quello che volevate sapere sui rilasci -stable di Linux 8 + ============================================================== 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/submit-checklist.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/submit-checklist.rst <submitchecklist>` 4 + 5 + .. _it_submitchecklist: 6 + 7 + Lista delle cose da fare per inviare una modifica al kernel Linux 8 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+12
Documentation/translations/it_IT/process/submitting-drivers.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/submitting-drivers.rst <submittingdrivers>` 4 + 5 + .. _it_submittingdrivers: 6 + 7 + Sottomettere driver per il kernel Linux 8 + ======================================= 9 + 10 + .. warning:: 11 + 12 + TODO ancora da tradurre
+13
Documentation/translations/it_IT/process/submitting-patches.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` 4 + 5 + 6 + .. _it_submittingpatches: 7 + 8 + Sottomettere modifiche: la guida essenziale per vedere il vostro codice nel kernel 9 + ================================================================================== 10 + 11 + .. warning:: 12 + 13 + TODO ancora da tradurre
+134
Documentation/translations/it_IT/process/volatile-considered-harmful.rst
··· 1 + .. include:: ../disclaimer-ita.rst 2 + 3 + :Original: :ref:`Documentation/process/volatile-considered-harmful.rst <volatile_considered_harmful>` 4 + :Translator: Federico Vaga <federico.vaga@vaga.pv.it> 5 + 6 + .. _it_volatile_considered_harmful: 7 + 8 + Perché la parola chiave "volatile" non dovrebbe essere usata 9 + ------------------------------------------------------------ 10 + 11 + Spesso i programmatori C considerano volatili quelle variabili che potrebbero 12 + essere cambiate al di fuori dal thread di esecuzione corrente; come risultato, 13 + a volte saranno tentati dall'utilizzare *volatile* nel kernel per le 14 + strutture dati condivise. In altre parole, gli è stato insegnato ad usare 15 + *volatile* come una variabile atomica di facile utilizzo, ma non è così. 16 + L'uso di *volatile* nel kernel non è quasi mai corretto; questo documento ne 17 + descrive le ragioni. 18 + 19 + Il punto chiave da capire su *volatile* è che il suo scopo è quello di 20 + sopprimere le ottimizzazioni, che non è quasi mai quello che si vuole. 21 + Nel kernel si devono proteggere le strutture dati condivise contro accessi 22 + concorrenti e indesiderati: questa è un'attività completamente diversa. 23 + Il processo di protezione contro gli accessi concorrenti indesiderati eviterà 24 + anche la maggior parte dei problemi relativi all'ottimizzazione in modo più 25 + efficiente. 26 + 27 + Come *volatile*, le primitive del kernel che rendono sicuro l'accesso ai dati 28 + (spinlock, mutex, barriere di sincronizzazione, ecc) sono progettate per 29 + prevenire le ottimizzazioni indesiderate. Se vengono usate opportunamente, 30 + non ci sarà bisogno di utilizzare *volatile*. Se vi sembra che *volatile* sia 31 + comunque necessario, ci dev'essere quasi sicuramente un baco da qualche parte. 32 + In un pezzo di codice kernel scritto a dovere, *volatile* può solo servire a 33 + rallentare le cose. 34 + 35 + Considerate questo tipico blocco di codice kernel:: 36 + 37 + spin_lock(&the_lock); 38 + do_something_on(&shared_data); 39 + do_something_else_with(&shared_data); 40 + spin_unlock(&the_lock); 41 + 42 + Se tutto il codice seguisse le regole di sincronizzazione, il valore di un 43 + dato condiviso non potrebbe cambiare inaspettatamente mentre si trattiene un 44 + lock. Un qualsiasi altro blocco di codice che vorrà usare quel dato rimarrà 45 + in attesa del lock. Gli spinlock agiscono come barriere di sincronizzazione 46 + - sono stati esplicitamente scritti per agire così - il che significa che gli 47 + accessi al dato condiviso non saranno ottimizzati. Quindi il compilatore 48 + potrebbe pensare di sapere cosa ci sarà nel dato condiviso ma la chiamata 49 + spin_lock(), che agisce come una barriera di sincronizzazione, gli imporrà di 50 + dimenticarsi tutto ciò che sapeva su di esso. 51 + 52 + Se il dato condiviso fosse stato dichiarato come *volatile*, la 53 + sincronizzazione rimarrebbe comunque necessaria. Ma verrà impedito al 54 + compilatore di ottimizzare gli accessi al dato anche _dentro_ alla sezione 55 + critica, dove sappiamo che in realtà nessun altro può accedervi. Mentre si 56 + trattiene un lock, il dato condiviso non è *volatile*. Quando si ha a che 57 + fare con dei dati condivisi, un'opportuna sincronizzazione rende inutile 58 + l'uso di *volatile* - anzi potenzialmente dannoso. 59 + 60 + L'uso di *volatile* fu originalmente pensato per l'accesso ai registri di I/O 61 + mappati in memoria. All'interno del kernel, l'accesso ai registri, dovrebbe 62 + essere protetto dai lock, ma si potrebbe anche desiderare che il compilatore 63 + non "ottimizzi" l'accesso ai registri all'interno di una sezione critica. 64 + Ma, all'interno del kernel, l'accesso alla memoria di I/O viene sempre fatto 65 + attraverso funzioni d'accesso; accedere alla memoria di I/O direttamente 66 + con i puntatori è sconsigliato e non funziona su tutte le architetture. 67 + Queste funzioni d'accesso sono scritte per evitare ottimizzazioni indesiderate, 68 + quindi, di nuovo, *volatile* è inutile. 69 + 70 + Un'altra situazione dove qualcuno potrebbe essere tentato dall'uso di 71 + *volatile*, è nel caso in cui il processore è in un'attesa attiva sul valore 72 + di una variabile. Il modo giusto di fare questo tipo di attesa è il seguente:: 73 + 74 + while (my_variable != what_i_want) 75 + cpu_relax(); 76 + 77 + La chiamata cpu_relax() può ridurre il consumo di energia del processore 78 + o cedere il passo ad un processore hyperthreaded gemello; funziona anche come 79 + una barriera per il compilatore, quindi, ancora una volta, *volatile* non è 80 + necessario. Ovviamente, tanto per puntualizzare, le attese attive sono 81 + generalmente un atto antisociale. 82 + 83 + Ci sono comunque alcune rare situazioni dove l'uso di *volatile* nel kernel 84 + ha senso: 85 + 86 + - Le funzioni d'accesso sopracitate potrebbero usare *volatile* su quelle 87 + architetture che supportano l'accesso diretto alla memoria di I/O. 88 + In pratica, ogni chiamata ad una funzione d'accesso diventa una piccola 89 + sezione critica a se stante, e garantisce che l'accesso avvenga secondo 90 + le aspettative del programmatore. 91 + 92 + - I codice *inline assembly* che fa cambiamenti nella memoria, ma che non 93 + ha altri effetti espliciti, rischia di essere rimosso da GCC. Aggiungere 94 + la parola chiave *volatile* a questo codice ne previene la rimozione. 95 + 96 + - La variabile jiffies è speciale in quanto assume un valore diverso ogni 97 + volta che viene letta ma può essere lette senza alcuna sincronizzazione. 98 + Quindi jiffies può essere *volatile*, ma l'aggiunta ad altre variabili di 99 + questo è sconsigliata. Jiffies è considerata uno "stupido retaggio" 100 + (parole di Linus) in questo contesto; correggerla non ne varrebbe la pena e 101 + causerebbe più problemi. 102 + 103 + - I puntatori a delle strutture dati in una memoria coerente che potrebbe 104 + essere modificata da dispositivi di I/O può, a volte, essere legittimamente 105 + *volatile*. Un esempio pratico può essere quello di un adattatore di rete 106 + che utilizza un puntatore ad un buffer circolare, questo viene cambiato 107 + dall'adattatore per indicare quali descrittori sono stati processati. 108 + 109 + Per la maggior parte del codice, nessuna delle giustificazioni sopracitate può 110 + essere considerata. Di conseguenza, l'uso di *volatile* è probabile che venga 111 + visto come un baco e porterà a verifiche aggiuntive. Gli sviluppatori tentati 112 + dall'uso di *volatile* dovrebbero fermarsi e pensare a cosa vogliono davvero 113 + ottenere. 114 + 115 + Le modifiche che rimuovono variabili *volatile* sono generalmente ben accette 116 + - purché accompagnate da una giustificazione che dimostri che i problemi di 117 + concorrenza siano stati opportunamente considerati. 118 + 119 + Riferimenti 120 + =========== 121 + 122 + [1] http://lwn.net/Articles/233481/ 123 + 124 + [2] http://lwn.net/Articles/233482/ 125 + 126 + Crediti 127 + ======= 128 + 129 + Impulso e ricerca originale di Randy Dunlap 130 + 131 + Scritto da Jonathan Corbet 132 + 133 + Migliorato dai commenti di Satyam Sharma, Johannes Stezenbach, Jesper 134 + Juhl, Heikki Orsila, H. Peter Anvin, Philipp Hahn, e Stefan Richter.