€•œŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒEnglish”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Simplified)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/zh_CN/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/zh_TW/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ja_JP/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ko_KR/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/pt_BR/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/sp_SP/process/stable-api-nonsense”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒItalian”uh1h hhŒ _document”hŒsource”NŒline”NubhŒwarning”“”)”}”(hŒ×In caso di dubbi sulla correttezza del contenuto di questa traduzione, l'unico riferimento valido è la documentazione ufficiale in inglese. Per maggiori informazioni consultate le :ref:`avvertenze `.”h]”hŒ paragraph”“”)”}”(hŒ×In caso di dubbi sulla correttezza del contenuto di questa traduzione, l'unico riferimento valido è la documentazione ufficiale in inglese. Per maggiori informazioni consultate le :ref:`avvertenze `.”h]”(hŒ·In caso di dubbi sulla correttezza del contenuto di questa traduzione, l’unico riferimento valido è la documentazione ufficiale in inglese. Per maggiori informazioni consultate le ”…””}”(hh½h²hh³Nh´Nubh)”}”(hŒ!:ref:`avvertenze `”h]”hŒinline”“”)”}”(hhÇh]”hŒ avvertenze”…””}”(hhËh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÉhhÅubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ.translations/it_IT/process/stable-api-nonsense”Œ refdomain”hÖŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ it_disclaimer”uh1hh³Œ3Documentation/translations/it_IT/disclaimer-ita.rst”h´Khh½ubhŒ.”…””}”(hh½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³hêh´Khh·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhhh²hh³hêh´NubhŒ field_list”“”)”}”(hhh]”(hŒfield”“”)”}”(hhh]”(hŒ field_name”“”)”}”(hŒOriginal”h]”hŒOriginal”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh³Œ\/var/lib/git/docbuild/linux/Documentation/translations/it_IT/process/stable-api-nonsense.rst”h´KubhŒ field_body”“”)”}”(hŒJ:ref:`Documentation/process/stable-api-nonsense.rst `”h]”h¼)”}”(hjh]”h)”}”(hjh]”hÊ)”}”(hjh]”hŒ-Documentation/process/stable-api-nonsense.rst”…””}”(hj"h²hh³Nh´Nubah}”(h]”h ]”(hÕŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hÉhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”h⌠refdomain”j,Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆhèŒstable_api_nonsense”uh1hh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Khhýh²hubj)”}”(hhh]”(j)”}”(hŒ Translator”h]”hŒ Translator”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPh³jh´Kubj)”}”(hŒ)Federico Vaga ”h]”h¼)”}”(hŒ(Federico Vaga ”h]”(hŒFederico Vaga <”…””}”(hjeh²hh³Nh´NubhŒ reference”“”)”}”(hŒfederico.vaga@vaga.pv.it”h]”hŒfederico.vaga@vaga.pv.it”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:federico.vaga@vaga.pv.it”uh1jmhjeubhŒ>”…””}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Khjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Khhýh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1hûhhh²hh³jh´KubhŒtarget”“”)”}”(hŒ.. _it_stable_api_nonsense:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œit-stable-api-nonsense”uh1j›h´Khhh²hh³jubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ,L'interfaccia dei driver per il kernel Linux”h]”hŒ.L’interfaccia dei driver per il kernel Linux”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hj«h²hh³jh´K ubh¼)”}”(hŒ/(tutte le risposte alle vostre domande e altro)”h]”hŒ/(tutte le risposte alle vostre domande e altro)”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K hj«h²hubh¼)”}”(hŒ#Greg Kroah-Hartman ”h]”(hŒGreg Kroah-Hartman <”…””}”(hjÌh²hh³Nh´Nubjn)”}”(hŒgreg@kroah.com”h]”hŒgreg@kroah.com”…””}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:greg@kroah.com”uh1jmhjÌubhŒ>”…””}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K hj«h²hubh¼)”}”(hŒ‰Questo è stato scritto per cercare di spiegare perché Linux **non ha un'interfaccia binaria, e non ha nemmeno un'interfaccia stabile**.”h]”(hŒ>Questo è stato scritto per cercare di spiegare perché Linux ”…””}”(hjîh²hh³Nh´NubhŒstrong”“”)”}”(hŒJ**non ha un'interfaccia binaria, e non ha nemmeno un'interfaccia stabile**”h]”hŒJnon ha un’interfaccia binaria, e non ha nemmeno un’interfaccia stabile”…””}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjîubhŒ.”…””}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Khj«h²hubhŒnote”“”)”}”(hXýQuesto articolo parla di interfacce **interne al kernel**, non delle interfacce verso lo spazio utente. L'interfaccia del kernel verso lo spazio utente è quella usata dai programmi, ovvero le chiamate di sistema. Queste interfacce sono **molto** stabili nel tempo e non verranno modificate. Ho vecchi programmi che sono stati compilati su un kernel 0.9 (circa) e tuttora funzionano sulle versioni 2.6 del kernel. Queste interfacce sono quelle che gli utenti e i programmatori possono considerare stabili.”h]”(h¼)”}”(hŒgQuesto articolo parla di interfacce **interne al kernel**, non delle interfacce verso lo spazio utente.”h]”(hŒ$Questo articolo parla di interfacce ”…””}”(hjh²hh³Nh´Nubj÷)”}”(hŒ**interne al kernel**”h]”hŒinterne al kernel”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ., non delle interfacce verso lo spazio utente.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Khjubh¼)”}”(hX”L'interfaccia del kernel verso lo spazio utente è quella usata dai programmi, ovvero le chiamate di sistema. Queste interfacce sono **molto** stabili nel tempo e non verranno modificate. Ho vecchi programmi che sono stati compilati su un kernel 0.9 (circa) e tuttora funzionano sulle versioni 2.6 del kernel. Queste interfacce sono quelle che gli utenti e i programmatori possono considerare stabili.”h]”(hŒˆL’interfaccia del kernel verso lo spazio utente è quella usata dai programmi, ovvero le chiamate di sistema. Queste interfacce sono ”…””}”(hj6h²hh³Nh´Nubj÷)”}”(hŒ **molto**”h]”hŒmolto”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj6ubhX stabili nel tempo e non verranno modificate. Ho vecchi programmi che sono stati compilati su un kernel 0.9 (circa) e tuttora funzionano sulle versioni 2.6 del kernel. Queste interfacce sono quelle che gli utenti e i programmatori possono considerare stabili.”…””}”(hj6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Khjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj«h²hh³jh´Nubjª)”}”(hhh]”(j¯)”}”(hŒRiepilogo generale”h]”hŒRiepilogo generale”…””}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hj\h²hh³jh´Kubh¼)”}”(hXÑPensate di volere un'interfaccia del kernel stabile, ma in realtà non la volete, e nemmeno sapete di non volerla. Quello che volete è un driver stabile che funzioni, e questo può essere ottenuto solo se il driver si trova nei sorgenti del kernel. Ci sono altri vantaggi nell'avere il proprio driver nei sorgenti del kernel, ognuno dei quali hanno reso Linux un sistema operativo robusto, stabile e maturo; questi sono anche i motivi per cui avete scelto Linux.”h]”hXÕPensate di volere un’interfaccia del kernel stabile, ma in realtà non la volete, e nemmeno sapete di non volerla. Quello che volete è un driver stabile che funzioni, e questo può essere ottenuto solo se il driver si trova nei sorgenti del kernel. Ci sono altri vantaggi nell’avere il proprio driver nei sorgenti del kernel, ognuno dei quali hanno reso Linux un sistema operativo robusto, stabile e maturo; questi sono anche i motivi per cui avete scelto Linux.”…””}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K!hj\h²hubeh}”(h]”Œriepilogo-generale”ah ]”h"]”Œriepilogo generale”ah$]”h&]”uh1j©hj«h²hh³jh´Kubjª)”}”(hhh]”(j¯)”}”(hŒ Introduzione”h]”hŒ Introduzione”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hjƒh²hh³jh´K*ubh¼)”}”(hŒìSolo le persone un po' strambe vorrebbero scrivere driver per il kernel con la costante preoccupazione per i cambiamenti alle interfacce interne. Per il resto del mondo, queste interfacce sono invisibili o non di particolare interesse.”h]”hŒîSolo le persone un po’ strambe vorrebbero scrivere driver per il kernel con la costante preoccupazione per i cambiamenti alle interfacce interne. Per il resto del mondo, queste interfacce sono invisibili o non di particolare interesse.”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K,hjƒh²hubh¼)”}”(hXéInnanzitutto, non tratterò **alcun** problema legale riguardante codice chiuso, nascosto, avvolto, blocchi binari, o qualsia altra cosa che descrive driver che non hanno i propri sorgenti rilasciati con licenza GPL. Per favore fate riferimento ad un avvocato per qualsiasi questione legale, io sono un programmatore e perciò qui vi parlerò soltanto delle questioni tecniche (non per essere superficiali sui problemi legali, sono veri e dovete esserne a conoscenza in ogni circostanza).”h]”(hŒInnanzitutto, non tratterò ”…””}”(hj¢h²hh³Nh´Nubj÷)”}”(hŒ **alcun**”h]”hŒalcun”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj¢ubhXÄ problema legale riguardante codice chiuso, nascosto, avvolto, blocchi binari, o qualsia altra cosa che descrive driver che non hanno i propri sorgenti rilasciati con licenza GPL. Per favore fate riferimento ad un avvocato per qualsiasi questione legale, io sono un programmatore e perciò qui vi parlerò soltanto delle questioni tecniche (non per essere superficiali sui problemi legali, sono veri e dovete esserne a conoscenza in ogni circostanza).”…””}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K1hjƒh²hubh¼)”}”(hŒÆDunque, ci sono due tematiche principali: interfacce binarie del kernel e interfacce stabili nei sorgenti. Ognuna dipende dall'altra, ma discuteremo prima delle cose binarie per toglierle di mezzo.”h]”hŒÈDunque, ci sono due tematiche principali: interfacce binarie del kernel e interfacce stabili nei sorgenti. Ognuna dipende dall’altra, ma discuteremo prima delle cose binarie per toglierle di mezzo.”…””}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K9hjƒh²hubeh}”(h]”Œ introduzione”ah ]”h"]”Œ introduzione”ah$]”h&]”uh1j©hj«h²hh³jh´K*ubjª)”}”(hhh]”(j¯)”}”(hŒInterfaccia binaria del kernel”h]”hŒInterfaccia binaria del kernel”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hjØh²hh³jh´K>ubh¼)”}”(hŒìSupponiamo d'avere un'interfaccia stabile nei sorgenti del kernel, di conseguenza un'interfaccia binaria dovrebbe essere anche'essa stabile, giusto? Sbagliato. Prendete in considerazione i seguenti fatti che riguardano il kernel Linux:”h]”hŒôSupponiamo d’avere un’interfaccia stabile nei sorgenti del kernel, di conseguenza un’interfaccia binaria dovrebbe essere anche’essa stabile, giusto? Sbagliato. Prendete in considerazione i seguenti fatti che riguardano il kernel Linux:”…””}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K@hjØh²hubhŒ block_quote”“”)”}”(hXô- A seconda della versione del compilatore C che state utilizzando, diverse strutture dati del kernel avranno un allineamento diverso, e possibilmente un modo diverso di includere le funzioni (renderle inline oppure no). L'organizzazione delle singole funzioni non è poi così importante, ma la spaziatura (*padding*) nelle strutture dati, invece, lo è. - In base alle opzioni che sono state selezionate per generare il kernel, un certo numero di cose potrebbero succedere: - strutture dati differenti potrebbero contenere campi differenti - alcune funzioni potrebbero non essere implementate (per esempio, alcuni *lock* spariscono se compilati su sistemi mono-processore) - la memoria interna del kernel può essere allineata in differenti modi a seconda delle opzioni di compilazione. - Linux funziona su una vasta gamma di architetture di processore. Non esiste alcuna possibilità che il binario di un driver per un'architettura funzioni correttamente su un'altra. ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hXbA seconda della versione del compilatore C che state utilizzando, diverse strutture dati del kernel avranno un allineamento diverso, e possibilmente un modo diverso di includere le funzioni (renderle inline oppure no). L'organizzazione delle singole funzioni non è poi così importante, ma la spaziatura (*padding*) nelle strutture dati, invece, lo è. ”h]”h¼)”}”(hXaA seconda della versione del compilatore C che state utilizzando, diverse strutture dati del kernel avranno un allineamento diverso, e possibilmente un modo diverso di includere le funzioni (renderle inline oppure no). L'organizzazione delle singole funzioni non è poi così importante, ma la spaziatura (*padding*) nelle strutture dati, invece, lo è.”h]”(hX4A seconda della versione del compilatore C che state utilizzando, diverse strutture dati del kernel avranno un allineamento diverso, e possibilmente un modo diverso di includere le funzioni (renderle inline oppure no). L’organizzazione delle singole funzioni non è poi così importante, ma la spaziatura (”…””}”(hjh²hh³Nh´NubhŒemphasis”“”)”}”(hŒ *padding*”h]”hŒpadding”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ&) nelle strutture dati, invece, lo è.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KEhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubj)”}”(hX¾In base alle opzioni che sono state selezionate per generare il kernel, un certo numero di cose potrebbero succedere: - strutture dati differenti potrebbero contenere campi differenti - alcune funzioni potrebbero non essere implementate (per esempio, alcuni *lock* spariscono se compilati su sistemi mono-processore) - la memoria interna del kernel può essere allineata in differenti modi a seconda delle opzioni di compilazione. ”h]”(h¼)”}”(hŒuIn base alle opzioni che sono state selezionate per generare il kernel, un certo numero di cose potrebbero succedere:”h]”hŒuIn base alle opzioni che sono state selezionate per generare il kernel, un certo numero di cose potrebbero succedere:”…””}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KKhj0ubjø)”}”(hX=- strutture dati differenti potrebbero contenere campi differenti - alcune funzioni potrebbero non essere implementate (per esempio, alcuni *lock* spariscono se compilati su sistemi mono-processore) - la memoria interna del kernel può essere allineata in differenti modi a seconda delle opzioni di compilazione. ”h]”jþ)”}”(hhh]”(j)”}”(hŒ?strutture dati differenti potrebbero contenere campi differenti”h]”h¼)”}”(hjKh]”hŒ?strutture dati differenti potrebbero contenere campi differenti”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KNhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubj)”}”(hŒ‚alcune funzioni potrebbero non essere implementate (per esempio, alcuni *lock* spariscono se compilati su sistemi mono-processore)”h]”h¼)”}”(hŒ‚alcune funzioni potrebbero non essere implementate (per esempio, alcuni *lock* spariscono se compilati su sistemi mono-processore)”h]”(hŒHalcune funzioni potrebbero non essere implementate (per esempio, alcuni ”…””}”(hjdh²hh³Nh´Nubj)”}”(hŒ*lock*”h]”hŒlock”…””}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubhŒ4 spariscono se compilati su sistemi mono-processore)”…””}”(hjdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KOhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubj)”}”(hŒpla memoria interna del kernel può essere allineata in differenti modi a seconda delle opzioni di compilazione. ”h]”h¼)”}”(hŒola memoria interna del kernel può essere allineata in differenti modi a seconda delle opzioni di compilazione.”h]”hŒola memoria interna del kernel può essere allineata in differenti modi a seconda delle opzioni di compilazione.”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KQhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jýh³jh´KNhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷h³jh´KNhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubj)”}”(hŒ´Linux funziona su una vasta gamma di architetture di processore. Non esiste alcuna possibilità che il binario di un driver per un'architettura funzioni correttamente su un'altra. ”h]”h¼)”}”(hŒ³Linux funziona su una vasta gamma di architetture di processore. Non esiste alcuna possibilità che il binario di un driver per un'architettura funzioni correttamente su un'altra.”h]”hŒ·Linux funziona su una vasta gamma di architetture di processore. Non esiste alcuna possibilità che il binario di un driver per un’architettura funzioni correttamente su un’altra.”…””}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KThj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubeh}”(h]”h ]”h"]”h$]”h&]”j¨j©uh1jýh³jh´KEhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷h³jh´KEhjØh²hubh¼)”}”(hX±Alcuni di questi problemi possono essere risolti compilando il proprio modulo con la stessa identica configurazione del kernel, ed usando la stessa versione del compilatore usato per compilare il kernel. Questo è sufficiente se volete fornire un modulo per uno specifico rilascio su una specifica distribuzione Linux. Ma moltiplicate questa singola compilazione per il numero di distribuzioni Linux e il numero dei rilasci supportati da quest'ultime e vi troverete rapidamente in un incubo fatto di configurazioni e piattaforme hardware (differenti processori con differenti opzioni); dunque, anche per il singolo rilascio di un modulo, dovreste creare differenti versioni dello stesso.”h]”hX³Alcuni di questi problemi possono essere risolti compilando il proprio modulo con la stessa identica configurazione del kernel, ed usando la stessa versione del compilatore usato per compilare il kernel. Questo è sufficiente se volete fornire un modulo per uno specifico rilascio su una specifica distribuzione Linux. Ma moltiplicate questa singola compilazione per il numero di distribuzioni Linux e il numero dei rilasci supportati da quest’ultime e vi troverete rapidamente in un incubo fatto di configurazioni e piattaforme hardware (differenti processori con differenti opzioni); dunque, anche per il singolo rilascio di un modulo, dovreste creare differenti versioni dello stesso.”…””}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KXhjØh²hubh¼)”}”(hŒlFidatevi, se tenterete questa via, col tempo, diventerete pazzi; l'ho imparato a mie spese molto tempo fa...”h]”hŒnFidatevi, se tenterete questa via, col tempo, diventerete pazzi; l’ho imparato a mie spese molto tempo fa...”…””}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KchjØh²hubeh}”(h]”Œinterfaccia-binaria-del-kernel”ah ]”h"]”Œinterfaccia binaria del kernel”ah$]”h&]”uh1j©hj«h²hh³jh´K>ubjª)”}”(hhh]”(j¯)”}”(hŒ+Interfaccia stabile nei sorgenti del kernel”h]”hŒ+Interfaccia stabile nei sorgenti del kernel”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hjþh²hh³jh´Khubh¼)”}”(hŒ©Se parlate con le persone che cercano di mantenere aggiornato un driver per Linux ma che non si trova nei sorgenti, allora per queste persone l'argomento sarà "ostico".”h]”hŒ¯Se parlate con le persone che cercano di mantenere aggiornato un driver per Linux ma che non si trova nei sorgenti, allora per queste persone l’argomento sarà “osticoâ€.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Kjhjþh²hubh¼)”}”(hX‰Lo sviluppo del kernel Linux è continuo e viaggia ad un ritmo sostenuto, e non rallenta mai. Perciò, gli sviluppatori del kernel trovano bachi nelle interfacce attuali, o trovano modi migliori per fare le cose. Se le trovano, allora le correggeranno per migliorarle. In questo frangente, i nomi delle funzioni potrebbero cambiare, le strutture dati potrebbero diventare più grandi o più piccole, e gli argomenti delle funzioni potrebbero essere ripensati. Se questo dovesse succedere, nello stesso momento, tutte le istanze dove questa interfaccia viene utilizzata verranno corrette, garantendo che tutto continui a funzionare senza problemi.”h]”hX‰Lo sviluppo del kernel Linux è continuo e viaggia ad un ritmo sostenuto, e non rallenta mai. Perciò, gli sviluppatori del kernel trovano bachi nelle interfacce attuali, o trovano modi migliori per fare le cose. Se le trovano, allora le correggeranno per migliorarle. In questo frangente, i nomi delle funzioni potrebbero cambiare, le strutture dati potrebbero diventare più grandi o più piccole, e gli argomenti delle funzioni potrebbero essere ripensati. Se questo dovesse succedere, nello stesso momento, tutte le istanze dove questa interfaccia viene utilizzata verranno corrette, garantendo che tutto continui a funzionare senza problemi.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Knhjþh²hubh¼)”}”(hŒÄPortiamo ad esempio l'interfaccia interna per il sottosistema USB che ha subito tre ristrutturazioni nel corso della sua vita. Queste ristrutturazioni furono fatte per risolvere diversi problemi:”h]”hŒÆPortiamo ad esempio l’interfaccia interna per il sottosistema USB che ha subito tre ristrutturazioni nel corso della sua vita. Queste ristrutturazioni furono fatte per risolvere diversi problemi:”…””}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´Kxhjþh²hubjø)”}”(hXö- È stato fatto un cambiamento da un flusso di dati sincrono ad uno asincrono. Questo ha ridotto la complessità di molti driver e ha aumentato la capacità di trasmissione di tutti i driver fino a raggiungere quasi la velocità massima possibile. - È stato fatto un cambiamento nell'allocazione dei pacchetti da parte del sottosistema USB per conto dei driver, cosicché ora i driver devono fornire più informazioni al sottosistema USB al fine di correggere un certo numero di stalli. ”h]”jþ)”}”(hhh]”(j)”}”(hŒ÷È stato fatto un cambiamento da un flusso di dati sincrono ad uno asincrono. Questo ha ridotto la complessità di molti driver e ha aumentato la capacità di trasmissione di tutti i driver fino a raggiungere quasi la velocità massima possibile.”h]”h¼)”}”(hŒ÷È stato fatto un cambiamento da un flusso di dati sincrono ad uno asincrono. Questo ha ridotto la complessità di molti driver e ha aumentato la capacità di trasmissione di tutti i driver fino a raggiungere quasi la velocità massima possibile.”h]”hŒ÷È stato fatto un cambiamento da un flusso di dati sincrono ad uno asincrono. Questo ha ridotto la complessità di molti driver e ha aumentato la capacità di trasmissione di tutti i driver fino a raggiungere quasi la velocità massima possibile.”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K|hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubj)”}”(hŒîÈ stato fatto un cambiamento nell'allocazione dei pacchetti da parte del sottosistema USB per conto dei driver, cosicché ora i driver devono fornire più informazioni al sottosistema USB al fine di correggere un certo numero di stalli. ”h]”h¼)”}”(hŒíÈ stato fatto un cambiamento nell'allocazione dei pacchetti da parte del sottosistema USB per conto dei driver, cosicché ora i driver devono fornire più informazioni al sottosistema USB al fine di correggere un certo numero di stalli.”h]”hŒïÈ stato fatto un cambiamento nell’allocazione dei pacchetti da parte del sottosistema USB per conto dei driver, cosicché ora i driver devono fornire più informazioni al sottosistema USB al fine di correggere un certo numero di stalli.”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K€hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubeh}”(h]”h ]”h"]”h$]”h&]”j¨j©uh1jýh³jh´K|hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷h³jh´K|hjþh²hubh¼)”}”(hX\Questo è completamente l'opposto di quello che succede in alcuni sistemi operativi proprietari che hanno dovuto mantenere, nel tempo, il supporto alle vecchie interfacce USB. I nuovi sviluppatori potrebbero usare accidentalmente le vecchie interfacce e sviluppare codice nel modo sbagliato, portando, di conseguenza, all'instabilità del sistema.”h]”hX`Questo è completamente l’opposto di quello che succede in alcuni sistemi operativi proprietari che hanno dovuto mantenere, nel tempo, il supporto alle vecchie interfacce USB. I nuovi sviluppatori potrebbero usare accidentalmente le vecchie interfacce e sviluppare codice nel modo sbagliato, portando, di conseguenza, all’instabilità del sistema.”…””}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K…hjþh²hubh¼)”}”(hXcIn entrambe gli scenari, gli sviluppatori hanno ritenuto che queste importanti modifiche erano necessarie, e quindi le hanno fatte con qualche sofferenza. Se Linux avesse assicurato di mantenere stabile l'interfaccia interna, si sarebbe dovuto procedere alla creazione di una nuova, e quelle vecchie, e mal funzionanti, avrebbero dovuto ricevere manutenzione, creando lavoro aggiuntivo per gli sviluppatori del sottosistema USB. Dato che gli sviluppatori devono dedicare il proprio tempo a questo genere di lavoro, chiedergli di dedicarne dell'altro, senza benefici, magari gratuitamente, non è contemplabile.”h]”hXgIn entrambe gli scenari, gli sviluppatori hanno ritenuto che queste importanti modifiche erano necessarie, e quindi le hanno fatte con qualche sofferenza. Se Linux avesse assicurato di mantenere stabile l’interfaccia interna, si sarebbe dovuto procedere alla creazione di una nuova, e quelle vecchie, e mal funzionanti, avrebbero dovuto ricevere manutenzione, creando lavoro aggiuntivo per gli sviluppatori del sottosistema USB. Dato che gli sviluppatori devono dedicare il proprio tempo a questo genere di lavoro, chiedergli di dedicarne dell’altro, senza benefici, magari gratuitamente, non è contemplabile.”…””}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K‹hjþh²hubh¼)”}”(hXpLe problematiche relative alla sicurezza sono molto importanti per Linux. Quando viene trovato un problema di sicurezza viene corretto in breve tempo. A volte, per prevenire il problema di sicurezza, si sono dovute cambiare delle interfacce interne al kernel. Quando è successo, allo stesso tempo, tutti i driver che usavano quelle interfacce sono stati aggiornati, garantendo la correzione definitiva del problema senza doversi preoccupare di rivederlo per sbaglio in futuro. Se non si fossero cambiate le interfacce interne, sarebbe stato impossibile correggere il problema e garantire che non si sarebbe più ripetuto.”h]”hXpLe problematiche relative alla sicurezza sono molto importanti per Linux. Quando viene trovato un problema di sicurezza viene corretto in breve tempo. A volte, per prevenire il problema di sicurezza, si sono dovute cambiare delle interfacce interne al kernel. Quando è successo, allo stesso tempo, tutti i driver che usavano quelle interfacce sono stati aggiornati, garantendo la correzione definitiva del problema senza doversi preoccupare di rivederlo per sbaglio in futuro. Se non si fossero cambiate le interfacce interne, sarebbe stato impossibile correggere il problema e garantire che non si sarebbe più ripetuto.”…””}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K•hjþh²hubh¼)”}”(hXfNel tempo le interfacce del kernel subiscono qualche ripulita. Se nessuno sta più usando un'interfaccia, allora questa verrà rimossa. Questo permette al kernel di rimanere il più piccolo possibile, e garantisce che tutte le potenziali interfacce sono state verificate nel limite del possibile (le interfacce inutilizzate sono impossibili da verificare).”h]”hXhNel tempo le interfacce del kernel subiscono qualche ripulita. Se nessuno sta più usando un’interfaccia, allora questa verrà rimossa. Questo permette al kernel di rimanere il più piccolo possibile, e garantisce che tutte le potenziali interfacce sono state verificate nel limite del possibile (le interfacce inutilizzate sono impossibili da verificare).”…””}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KŸhjþh²hubeh}”(h]”Œ+interfaccia-stabile-nei-sorgenti-del-kernel”ah ]”h"]”Œ+interfaccia stabile nei sorgenti del kernel”ah$]”h&]”uh1j©hj«h²hh³jh´Khubjª)”}”(hhh]”(j¯)”}”(hŒ Cosa fare”h]”hŒ Cosa fare”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hj¼h²hh³jh´K§ubh¼)”}”(hXGDunque, se avete un driver per il kernel Linux che non si trova nei sorgenti principali del kernel, come sviluppatori, cosa dovreste fare? Rilasciare un file binario del driver per ogni versione del kernel e per ogni distribuzione, è un incubo; inoltre, tenere il passo con tutti i cambiamenti del kernel è un brutto lavoro.”h]”hXGDunque, se avete un driver per il kernel Linux che non si trova nei sorgenti principali del kernel, come sviluppatori, cosa dovreste fare? Rilasciare un file binario del driver per ogni versione del kernel e per ogni distribuzione, è un incubo; inoltre, tenere il passo con tutti i cambiamenti del kernel è un brutto lavoro.”…””}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K©hj¼h²hubh¼)”}”(hX)Semplicemente, fate sì che il vostro driver per il kernel venga incluso nei sorgenti principali (ricordatevi, stiamo parlando di driver rilasciati secondo una licenza compatibile con la GPL; se il vostro codice non ricade in questa categoria: buona fortuna, arrangiatevi, siete delle sanguisughe)”h]”hX)Semplicemente, fate sì che il vostro driver per il kernel venga incluso nei sorgenti principali (ricordatevi, stiamo parlando di driver rilasciati secondo una licenza compatibile con la GPL; se il vostro codice non ricade in questa categoria: buona fortuna, arrangiatevi, siete delle sanguisughe)”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K¯hj¼h²hubh¼)”}”(hXSe il vostro driver è nei sorgenti del kernel e un'interfaccia cambia, il driver verrà corretto immediatamente dalla persona che l'ha modificata. Questo garantisce che sia sempre possibile compilare il driver, che funzioni, e tutto con un minimo sforzo da parte vostra.”h]”hXSe il vostro driver è nei sorgenti del kernel e un’interfaccia cambia, il driver verrà corretto immediatamente dalla persona che l’ha modificata. Questo garantisce che sia sempre possibile compilare il driver, che funzioni, e tutto con un minimo sforzo da parte vostra.”…””}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K´hj¼h²hubh¼)”}”(hŒRAvere il proprio driver nei sorgenti principali del kernel ha i seguenti vantaggi:”h]”hŒRAvere il proprio driver nei sorgenti principali del kernel ha i seguenti vantaggi:”…””}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K¹hj¼h²hubjø)”}”(hX5- La qualità del driver aumenterà e i costi di manutenzione (per lo sviluppatore originale) diminuiranno. - Altri sviluppatori aggiungeranno nuove funzionalità al vostro driver. - Altri persone troveranno e correggeranno bachi nel vostro driver. - Altri persone troveranno degli aggiustamenti da fare al vostro driver. - Altri persone aggiorneranno il driver quando è richiesto da un cambiamento di un'interfaccia. - Il driver sarà automaticamente reso disponibile in tutte le distribuzioni Linux senza dover chiedere a nessuna di queste di aggiungerlo. ”h]”jþ)”}”(hhh]”(j)”}”(hŒiLa qualità del driver aumenterà e i costi di manutenzione (per lo sviluppatore originale) diminuiranno.”h]”h¼)”}”(hŒiLa qualità del driver aumenterà e i costi di manutenzione (per lo sviluppatore originale) diminuiranno.”h]”hŒiLa qualità del driver aumenterà e i costi di manutenzione (per lo sviluppatore originale) diminuiranno.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K¼hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)”}”(hŒFAltri sviluppatori aggiungeranno nuove funzionalità al vostro driver.”h]”h¼)”}”(hj&h]”hŒFAltri sviluppatori aggiungeranno nuove funzionalità al vostro driver.”…””}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K¾hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)”}”(hŒAAltri persone troveranno e correggeranno bachi nel vostro driver.”h]”h¼)”}”(hj=h]”hŒAAltri persone troveranno e correggeranno bachi nel vostro driver.”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´K¿hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)”}”(hŒFAltri persone troveranno degli aggiustamenti da fare al vostro driver.”h]”h¼)”}”(hjTh]”hŒFAltri persone troveranno degli aggiustamenti da fare al vostro driver.”…””}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KÀhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)”}”(hŒ^Altri persone aggiorneranno il driver quando è richiesto da un cambiamento di un'interfaccia.”h]”h¼)”}”(hŒ^Altri persone aggiorneranno il driver quando è richiesto da un cambiamento di un'interfaccia.”h]”hŒ`Altri persone aggiorneranno il driver quando è richiesto da un cambiamento di un’interfaccia.”…””}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KÁhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)”}”(hŒŠIl driver sarà automaticamente reso disponibile in tutte le distribuzioni Linux senza dover chiedere a nessuna di queste di aggiungerlo. ”h]”h¼)”}”(hŒ‰Il driver sarà automaticamente reso disponibile in tutte le distribuzioni Linux senza dover chiedere a nessuna di queste di aggiungerlo.”h]”hŒ‰Il driver sarà automaticamente reso disponibile in tutte le distribuzioni Linux senza dover chiedere a nessuna di queste di aggiungerlo.”…””}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KÃhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”j¨j©uh1jýh³jh´K¼hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷h³jh´K¼hj¼h²hubh¼)”}”(hŒøDato che Linux supporta più dispositivi di qualsiasi altro sistema operativo, e che girano su molti più tipi di processori di qualsiasi altro sistema operativo; ciò dimostra che questo modello di sviluppo qualcosa di giusto, dopo tutto, lo fa :)”h]”hŒøDato che Linux supporta più dispositivi di qualsiasi altro sistema operativo, e che girano su molti più tipi di processori di qualsiasi altro sistema operativo; ciò dimostra che questo modello di sviluppo qualcosa di giusto, dopo tutto, lo fa :)”…””}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KÆhj¼h²hubhŒ transition”“”)”}”(hŒ------”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1j³h³jh´KÍhj¼h²hubh¼)”}”(hŒÊDei ringraziamenti vanno a Randy Dunlap, Andrew Morton, David Brownell, Hanna Linder, Robert Love, e Nishanth Aravamudan per la loro revisione e per i loro commenti sulle prime bozze di questo articolo.”h]”hŒÊDei ringraziamenti vanno a Randy Dunlap, Andrew Morton, David Brownell, Hanna Linder, Robert Love, e Nishanth Aravamudan per la loro revisione e per i loro commenti sulle prime bozze di questo articolo.”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»h³jh´KÏhj¼h²hubeh}”(h]”Œ cosa-fare”ah ]”h"]”Œ cosa fare”ah$]”h&]”uh1j©hj«h²hh³jh´K§ubeh}”(h]”(Œ,l-interfaccia-dei-driver-per-il-kernel-linux”j¨eh ]”h"]”(Œ,l'interfaccia dei driver per il kernel linux”Œit_stable_api_nonsense”eh$]”h&]”uh1j©hhh²hh³jh´K Œexpect_referenced_by_name”}”jÛjsŒexpect_referenced_by_id”}”j¨jsubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”juh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(j®NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”jŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”j¨]”jasŒnameids”}”(jÛj¨jÚj×j€j}jÕjÒjûjøj¹j¶jÒjÏuŒ nametypes”}”(jÛˆjÚ‰j€‰jÕ‰jû‰j¹‰jÒ‰uh}”(j¨j«j×j«j}j\jÒjƒjøjØj¶jþjÏj¼uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”h¼)”}”(hhh]”hŒ