xref: /OK3568_Linux_fs/kernel/Documentation/translations/it_IT/process/stable-api-nonsense.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. include:: ../disclaimer-ita.rst
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun:Original: :ref:`Documentation/process/stable-api-nonsense.rst <stable_api_nonsense>`
4*4882a593Smuzhiyun:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun.. _it_stable_api_nonsense:
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunL'interfaccia dei driver per il kernel Linux
9*4882a593Smuzhiyun============================================
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun(tutte le risposte alle vostre domande e altro)
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunGreg Kroah-Hartman <greg@kroah.com>
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunQuesto è stato scritto per cercare di spiegare perché Linux **non ha
16*4882a593Smuzhiyunun'interfaccia binaria, e non ha nemmeno un'interfaccia stabile**.
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun.. note::
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun   Questo articolo parla di interfacce **interne al kernel**, non delle
21*4882a593Smuzhiyun   interfacce verso lo spazio utente.
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun   L'interfaccia del kernel verso lo spazio utente è quella usata dai
24*4882a593Smuzhiyun   programmi, ovvero le chiamate di sistema.  Queste interfacce sono **molto**
25*4882a593Smuzhiyun   stabili nel tempo e non verranno modificate.  Ho vecchi programmi che sono
26*4882a593Smuzhiyun   stati compilati su un kernel 0.9 (circa) e tuttora funzionano sulle versioni
27*4882a593Smuzhiyun   2.6 del kernel.  Queste interfacce sono quelle che gli utenti e i
28*4882a593Smuzhiyun   programmatori possono considerare stabili.
29*4882a593Smuzhiyun
30*4882a593SmuzhiyunRiepilogo generale
31*4882a593Smuzhiyun------------------
32*4882a593Smuzhiyun
33*4882a593SmuzhiyunPensate di volere un'interfaccia del kernel stabile, ma in realtà non la
34*4882a593Smuzhiyunvolete, e nemmeno sapete di non volerla.  Quello che volete è un driver
35*4882a593Smuzhiyunstabile che funzioni, e questo può essere ottenuto solo se il driver si trova
36*4882a593Smuzhiyunnei sorgenti del kernel.  Ci sono altri vantaggi nell'avere il proprio driver
37*4882a593Smuzhiyunnei sorgenti del kernel, ognuno dei quali hanno reso Linux un sistema operativo
38*4882a593Smuzhiyunrobusto, stabile e maturo; questi sono anche i motivi per cui avete scelto
39*4882a593SmuzhiyunLinux.
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunIntroduzione
42*4882a593Smuzhiyun------------
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunSolo le persone un po' strambe vorrebbero scrivere driver per il kernel con
45*4882a593Smuzhiyunla costante preoccupazione per i cambiamenti alle interfacce interne.  Per il
46*4882a593Smuzhiyunresto del mondo, queste interfacce sono invisibili o non di particolare
47*4882a593Smuzhiyuninteresse.
48*4882a593Smuzhiyun
49*4882a593SmuzhiyunInnanzitutto, non tratterò **alcun** problema legale riguardante codice
50*4882a593Smuzhiyunchiuso, nascosto, avvolto, blocchi binari, o qualsia altra cosa che descrive
51*4882a593Smuzhiyundriver che non hanno i propri sorgenti rilasciati con licenza GPL.  Per favore
52*4882a593Smuzhiyunfate riferimento ad un avvocato per qualsiasi questione legale, io sono un
53*4882a593Smuzhiyunprogrammatore e perciò qui vi parlerò soltanto delle questioni tecniche (non
54*4882a593Smuzhiyunper essere superficiali sui problemi legali, sono veri e dovete esserne a
55*4882a593Smuzhiyunconoscenza in ogni circostanza).
56*4882a593Smuzhiyun
57*4882a593SmuzhiyunDunque, ci sono due tematiche principali: interfacce binarie del kernel e
58*4882a593Smuzhiyuninterfacce stabili nei sorgenti.  Ognuna dipende dall'altra, ma discuteremo
59*4882a593Smuzhiyunprima delle cose binarie per toglierle di mezzo.
60*4882a593Smuzhiyun
61*4882a593SmuzhiyunInterfaccia binaria del kernel
62*4882a593Smuzhiyun------------------------------
63*4882a593Smuzhiyun
64*4882a593SmuzhiyunSupponiamo d'avere un'interfaccia stabile nei sorgenti del kernel, di
65*4882a593Smuzhiyunconseguenza un'interfaccia binaria dovrebbe essere anche'essa stabile, giusto?
66*4882a593SmuzhiyunSbagliato.  Prendete in considerazione i seguenti fatti che riguardano il
67*4882a593Smuzhiyunkernel Linux:
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun  - A seconda della versione del compilatore C che state utilizzando, diverse
70*4882a593Smuzhiyun    strutture dati del kernel avranno un allineamento diverso, e possibilmente
71*4882a593Smuzhiyun    un modo diverso di includere le funzioni (renderle inline oppure no).
72*4882a593Smuzhiyun    L'organizzazione delle singole funzioni non è poi così importante, ma la
73*4882a593Smuzhiyun    spaziatura (*padding*) nelle strutture dati, invece, lo è.
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun  - In base alle opzioni che sono state selezionate per generare il kernel,
76*4882a593Smuzhiyun    un certo numero di cose potrebbero succedere:
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun      - strutture dati differenti potrebbero contenere campi differenti
79*4882a593Smuzhiyun      - alcune funzioni potrebbero non essere implementate (per esempio,
80*4882a593Smuzhiyun        alcuni *lock* spariscono se compilati su sistemi mono-processore)
81*4882a593Smuzhiyun      - la memoria interna del kernel può essere allineata in differenti modi
82*4882a593Smuzhiyun        a seconda delle opzioni di compilazione.
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun  - Linux funziona su una vasta gamma di architetture di processore. Non esiste
85*4882a593Smuzhiyun    alcuna possibilità che il binario di un driver per un'architettura funzioni
86*4882a593Smuzhiyun    correttamente su un'altra.
87*4882a593Smuzhiyun
88*4882a593SmuzhiyunAlcuni di questi problemi possono essere risolti compilando il proprio modulo
89*4882a593Smuzhiyuncon la stessa identica configurazione del kernel, ed usando la stessa versione
90*4882a593Smuzhiyundel compilatore usato per compilare il kernel.  Questo è sufficiente se volete
91*4882a593Smuzhiyunfornire un modulo per uno specifico rilascio su una specifica distribuzione
92*4882a593SmuzhiyunLinux.  Ma moltiplicate questa singola compilazione per il numero di
93*4882a593Smuzhiyundistribuzioni Linux e il numero dei rilasci supportati da quest'ultime e vi
94*4882a593Smuzhiyuntroverete rapidamente in un incubo fatto di configurazioni e piattaforme
95*4882a593Smuzhiyunhardware (differenti processori con differenti opzioni); dunque, anche per il
96*4882a593Smuzhiyunsingolo rilascio di un modulo, dovreste creare differenti versioni dello
97*4882a593Smuzhiyunstesso.
98*4882a593Smuzhiyun
99*4882a593SmuzhiyunFidatevi, se tenterete questa via, col tempo, diventerete pazzi; l'ho imparato
100*4882a593Smuzhiyuna mie spese molto tempo fa...
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun
103*4882a593SmuzhiyunInterfaccia stabile nei sorgenti del kernel
104*4882a593Smuzhiyun-------------------------------------------
105*4882a593Smuzhiyun
106*4882a593SmuzhiyunSe parlate con le persone che cercano di mantenere aggiornato un driver per
107*4882a593SmuzhiyunLinux ma che non si trova nei sorgenti, allora per queste persone l'argomento
108*4882a593Smuzhiyunsarà "ostico".
109*4882a593Smuzhiyun
110*4882a593SmuzhiyunLo sviluppo del kernel Linux è continuo e viaggia ad un ritmo sostenuto, e non
111*4882a593Smuzhiyunrallenta mai.  Perciò, gli sviluppatori del kernel trovano bachi nelle
112*4882a593Smuzhiyuninterfacce attuali, o trovano modi migliori per fare le cose.  Se le trovano,
113*4882a593Smuzhiyunallora le correggeranno per migliorarle.  In questo frangente, i nomi delle
114*4882a593Smuzhiyunfunzioni potrebbero cambiare, le strutture dati potrebbero diventare più grandi
115*4882a593Smuzhiyuno più piccole, e gli argomenti delle funzioni potrebbero essere ripensati.
116*4882a593SmuzhiyunSe questo dovesse succedere, nello stesso momento, tutte le istanze dove questa
117*4882a593Smuzhiyuninterfaccia viene utilizzata verranno corrette, garantendo che tutto continui
118*4882a593Smuzhiyuna funzionare senza problemi.
119*4882a593Smuzhiyun
120*4882a593SmuzhiyunPortiamo ad esempio l'interfaccia interna per il sottosistema USB che ha subito
121*4882a593Smuzhiyuntre ristrutturazioni nel corso della sua vita.  Queste ristrutturazioni furono
122*4882a593Smuzhiyunfatte per risolvere diversi problemi:
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun  - È stato fatto un cambiamento da un flusso di dati sincrono ad uno
125*4882a593Smuzhiyun    asincrono.  Questo ha ridotto la complessità di molti driver e ha
126*4882a593Smuzhiyun    aumentato la capacità di trasmissione di tutti i driver fino a raggiungere
127*4882a593Smuzhiyun    quasi la velocità massima possibile.
128*4882a593Smuzhiyun  - È stato fatto un cambiamento nell'allocazione dei pacchetti da parte del
129*4882a593Smuzhiyun    sottosistema USB per conto dei driver, cosicché ora i driver devono fornire
130*4882a593Smuzhiyun    più informazioni al sottosistema USB al fine di correggere un certo numero
131*4882a593Smuzhiyun    di stalli.
132*4882a593Smuzhiyun
133*4882a593SmuzhiyunQuesto è completamente l'opposto di quello che succede in alcuni sistemi
134*4882a593Smuzhiyunoperativi proprietari che hanno dovuto mantenere, nel tempo, il supporto alle
135*4882a593Smuzhiyunvecchie interfacce USB.  I nuovi sviluppatori potrebbero usare accidentalmente
136*4882a593Smuzhiyunle vecchie interfacce e sviluppare codice nel modo sbagliato, portando, di
137*4882a593Smuzhiyunconseguenza, all'instabilità del sistema.
138*4882a593Smuzhiyun
139*4882a593SmuzhiyunIn entrambe gli scenari, gli sviluppatori hanno ritenuto che queste importanti
140*4882a593Smuzhiyunmodifiche erano necessarie, e quindi le hanno fatte con qualche sofferenza.
141*4882a593SmuzhiyunSe Linux avesse assicurato di mantenere stabile l'interfaccia interna, si
142*4882a593Smuzhiyunsarebbe dovuto procedere alla creazione di una nuova, e quelle vecchie, e
143*4882a593Smuzhiyunmal funzionanti, avrebbero dovuto ricevere manutenzione, creando lavoro
144*4882a593Smuzhiyunaggiuntivo per gli sviluppatori del sottosistema USB.  Dato che gli
145*4882a593Smuzhiyunsviluppatori devono dedicare il proprio tempo a questo genere di lavoro,
146*4882a593Smuzhiyunchiedergli di dedicarne dell'altro, senza benefici, magari gratuitamente, non
147*4882a593Smuzhiyunè contemplabile.
148*4882a593Smuzhiyun
149*4882a593SmuzhiyunLe problematiche relative alla sicurezza sono molto importanti per Linux.
150*4882a593SmuzhiyunQuando viene trovato un problema di sicurezza viene corretto in breve tempo.
151*4882a593SmuzhiyunA volte, per prevenire il problema di sicurezza, si sono dovute cambiare
152*4882a593Smuzhiyundelle interfacce interne al kernel.  Quando è successo, allo stesso tempo,
153*4882a593Smuzhiyuntutti i driver che usavano quelle interfacce sono stati aggiornati, garantendo
154*4882a593Smuzhiyunla correzione definitiva del problema senza doversi preoccupare di rivederlo
155*4882a593Smuzhiyunper sbaglio in futuro.  Se non si fossero cambiate le interfacce interne,
156*4882a593Smuzhiyunsarebbe stato impossibile correggere il problema e garantire che non si sarebbe
157*4882a593Smuzhiyunpiù ripetuto.
158*4882a593Smuzhiyun
159*4882a593SmuzhiyunNel tempo le interfacce del kernel subiscono qualche ripulita.  Se nessuno
160*4882a593Smuzhiyunsta più usando un'interfaccia, allora questa verrà rimossa.  Questo permette
161*4882a593Smuzhiyunal kernel di rimanere il più piccolo possibile, e garantisce che tutte le
162*4882a593Smuzhiyunpotenziali interfacce sono state verificate nel limite del possibile (le
163*4882a593Smuzhiyuninterfacce inutilizzate sono impossibili da verificare).
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun
166*4882a593SmuzhiyunCosa fare
167*4882a593Smuzhiyun---------
168*4882a593Smuzhiyun
169*4882a593SmuzhiyunDunque, se avete un driver per il kernel Linux che non si trova nei sorgenti
170*4882a593Smuzhiyunprincipali del kernel, come sviluppatori, cosa dovreste fare?  Rilasciare un
171*4882a593Smuzhiyunfile binario del driver per ogni versione del kernel e per ogni distribuzione,
172*4882a593Smuzhiyunè un incubo; inoltre, tenere il passo con tutti i cambiamenti del kernel è un
173*4882a593Smuzhiyunbrutto lavoro.
174*4882a593Smuzhiyun
175*4882a593SmuzhiyunSemplicemente, fate sì che il vostro driver per il kernel venga incluso nei
176*4882a593Smuzhiyunsorgenti principali (ricordatevi, stiamo parlando di driver rilasciati secondo
177*4882a593Smuzhiyununa licenza compatibile con la GPL; se il vostro codice non ricade in questa
178*4882a593Smuzhiyuncategoria: buona fortuna, arrangiatevi, siete delle sanguisughe)
179*4882a593Smuzhiyun
180*4882a593SmuzhiyunSe il vostro driver è nei sorgenti del kernel e un'interfaccia cambia, il
181*4882a593Smuzhiyundriver verrà corretto immediatamente dalla persona che l'ha modificata.  Questo
182*4882a593Smuzhiyungarantisce che sia sempre possibile compilare il driver, che funzioni, e tutto
183*4882a593Smuzhiyuncon un minimo sforzo da parte vostra.
184*4882a593Smuzhiyun
185*4882a593SmuzhiyunAvere il proprio driver nei sorgenti principali del kernel ha i seguenti
186*4882a593Smuzhiyunvantaggi:
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun  - La qualità del driver aumenterà e i costi di manutenzione (per lo
189*4882a593Smuzhiyun    sviluppatore originale) diminuiranno.
190*4882a593Smuzhiyun  - Altri sviluppatori aggiungeranno nuove funzionalità al vostro driver.
191*4882a593Smuzhiyun  - Altri persone troveranno e correggeranno bachi nel vostro driver.
192*4882a593Smuzhiyun  - Altri persone troveranno degli aggiustamenti da fare al vostro driver.
193*4882a593Smuzhiyun  - Altri persone aggiorneranno il driver quando è richiesto da un cambiamento
194*4882a593Smuzhiyun    di un'interfaccia.
195*4882a593Smuzhiyun  - Il driver sarà automaticamente reso disponibile in tutte le distribuzioni
196*4882a593Smuzhiyun    Linux senza dover chiedere a nessuna di queste di aggiungerlo.
197*4882a593Smuzhiyun
198*4882a593SmuzhiyunDato che Linux supporta più dispositivi di qualsiasi altro sistema operativo,
199*4882a593Smuzhiyune che girano su molti più tipi di processori di qualsiasi altro sistema
200*4882a593Smuzhiyunoperativo; ciò dimostra che questo modello di sviluppo qualcosa di giusto,
201*4882a593Smuzhiyundopo tutto, lo fa :)
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun------
206*4882a593Smuzhiyun
207*4882a593SmuzhiyunDei ringraziamenti vanno a Randy Dunlap, Andrew Morton, David Brownell,
208*4882a593SmuzhiyunHanna Linder, Robert Love, e Nishanth Aravamudan per la loro revisione
209*4882a593Smuzhiyune per i loro commenti sulle prime bozze di questo articolo.
210