[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Debian e firmware proprietario



Il sabato 10 gennaio 2009 22:32:15 Davide Prina ha scritto:
> elphio wrote:
> > Wikipedia dice:
> > "Il firmware è un programma, inteso come sequenza di istruzioni,
> > integrato direttamente in un componente elettronico nel senso più vasto
> > del termine (integrati, schede elettroniche, periferiche)"
>
> questa definizione può essere un po' fuorviante perché fa sembrare che
> il firmware sia intoccabile dal sistema operativo, il ché non è affatto
> vero.
> Il firmware, in molti casi può essere aggiornato direttamente dal
> proprio sistema operativo. Addirittura se guardi nei sorgenti di Linux
> troverai che puoi aggiornare il firmware delle CPU Intel
> (l'aggiornamento è valido fino al riavvio della macchina).

No, in realtà la definizione è corretta, il firmware è il "programma" che 
esegue la periferica (qualunque essa sia, quindi da un certo punto di vista 
anche la cpu è una periferca).

Solitamente questi firmware sono memorizzati dentro la periferica stessa in 
particolari memorie a sola lettura (ad esempio le stampanti) e offrono al 
istema operativo una interfaccia per comunicare con l'HW su cui sono montate.
Questo perché queste periferiche sono progettate per lavorare sempre nello 
stesso modo (le migliorie possono quindi essere solo nei driver che stanno 
sul computer che si interfacciano ad esse). Per esempio in una stampante il 
firmware gestisce il movimento delle testine, tutta la diagnostica interna e 
fornisce un set di istruzioni usate dal driver per passare i dati che 
verranno poi stampati, non ha senso che in una stampante il firmware possa 
essere sostituito, in quanto sono già incluse tutte le potenzialità dell'HW 
sottostante.

Altre periferiche hanno il firmware memorizzato su memorie eprom o eeprom, che 
sono memorie solitamente a sola lettura, ma che in particolari occasioni 
possono essere riscritte per aggiungere altre funzionalità (un esempio di 
firmware di questo tipo è per esempio lo stesso bios). Si usa spesso questo 
sistema quando si ha a che fare con periferiche che possono lavorare in 
autonomia, senza la presenza di un pc di controllo (esempio un router).

Questa tipologia di apparati ha però il grosso problema che se durante la 
scrittura del nuovo firmware qualcosa va storto, la periferica diventa 
completamente inutilizzabile (tranno che in pochissimi casi in cui esiste un 
doppio firmware, uno minimale in rom, che permette il refresh della eeprom in 
qualunque caso e quello nella eeprom che è il firmware vero e proprio).

da qualche anno molti costruttori di periferiche che sono sempre assoggetate 
ad un pc (esempio le schede wireless, e qui veniamo alla maggior parte dei 
firmware contenuti in debian) per risparmiare sulla componentistica e 
permetterne anche una maggior miniaturizzazione (una cosa che non c'é è 
sicuramente molto piccola), invece di mettere delle eeprom e tutta la 
circuitteria necessaria per il refresh, mettono semplicemente una ram, in cui 
il firmware viene copiato durante il caricamento del driver sul pc. Questo 
fatto fornisce una maggior sicurezza che l'apparato non si blocchi per un 
aggiornamento errato, di contro sarebbe da valutare quante riscritture 
possono subire queste ram, ma presumo un numero notevolmente elevato.
Questo comporta anche una maggiore facilità nell'aggiornamento del firmware 
per aumentare le potenzialità dell'HW (esempio inserire direttamente nella 
scheda wireless la possibiltà di gestire un nuovo formato di criptazione, 
anche se ritengo che gli attuali algoritmi siano un po' troppo pesanti per 
queste schedine e si preferisca in ogni caso farlo sul pc e trasferire il 
risultato).
È da chiarire che i firmware contenuti nel kernel sono tutti open source, i 
firmware proprietari (i sorgenti di questi firmware sono proprio in C nella 
maggior parte dei casi, ma viene rilasciato il solo codice oggetto, il 
risultato della sola compilazione) non sono mai contenuti nel kernel, nel 
kernel viene incluso il modulo (open source) che si occupa di copiare il 
firmware (closed source, contenuto solitamente in /usr/lib/firmware) nella 
ram della periferica.

> > Che il firmware è a tutti gli effetti un software mi pare chiaro (nella
> > mia concezione di software). E' chiaro anche che firmware e driver sono
> > altresì due cose ancora diverse.
esatto, il firmware gira sulla periferica, il driver gira sul pc, il driver (o 
modulo in linux) si occupa della comunicazione tra il kernel (e quindi gli 
applicativi che vi si appoggiano) e il firmware residente sulla periferica, 
che a sua volta comunica con l'HW sottostante.
>
> Inoltre il firmware è (o forse è meglio dire era) una sequenza di
> istruzioni veramente banali che permettono di far funzionare l'hardware
> correttamente in tutti i casi che si possono presentare. Conoscere come
> colloquiare con un firmware ti permette di crearti un driver per gestire
> quell'hardware. Il driver è quindi un processo che permette agli altri
> programmi di usare facilmente un hardware, senza conosce come
> colloquiare con il firmware. Quindi un driver permette ad un programma
> di usare delle istruzioni che possono far funzionare sia quell'hardware
> gestito da quel driver sia tutti gli hardware simili gestiti da altri
> driver (in pratica tutti i driver che gestiscono una classe di hardware
> offrono ai programmi un'interfaccia più o meno comune ... pensa agli
> hard disk, qualsiasi programma riesce a scrivere su qualsiasi hard disk
> che metti dentro al PC, senza dover modificare il programma stesso! Sono
> i driver che gestiscono i diversi hard disk a fare da interfaccia tra il
> programma e il firmware del driver).
>

in realtà sono i firmware che forniscono una intefaccia comune per HW diversi 
(comune per tipologia di apparato naturalmente) i driver a loro volta sono 
diversi per poter gestire diverse tipologie di apparato, ma forniscono 
un'interfaccia comune agli applicativi per famiglia di apparati...

un esempio...

la famiglia degli apparati HDD per gli applicativi sono tutti uguali, in 
quanto i driver (moduli) offrono agli applicativi sempre la stessa 
interfaccia, ma i driver sono diversi in funzione della tipologia di HDD (ide 
piuttosto che sata, piuttosto che scsi). quasi tutti gli ide però forniscono 
attraverso il firmware la stessa interfaccia al driver (il modulo per gli ide 
è comune per un gran numero di HDD molto diversi tra loro).

[...]
> > E ora, mettendo firmware proprietari in Debian (quindi di fatto senza
> > sorgenti) la Debian Free Software Guidelines [4] dove va a finire?
>
> attenzione.
> Debian, come ogni altra distro GNU/Linux, è principalmente un
> aggregatore di software fatto da altri (con alcune eccezioni
> naturalmente). Se chi gestisce il software sotto licenza libera, per
> esempio la licenza GPL, include anche dei binari che vengono usati per
> modificare un firmware, allora in teoria anche quei binari sono sotto la
> stessa licenza GPL.
> Quello che si farà è ritenere che i "firmware" presenti soddisfino la
> GPL e quindi siano a disposizione anche i sorgenti o possano essere
> reperiti.

Su questo asprtto non ho conodìscenze e non posso dare la mia opinione.

> > (Punto 2: Il programma deve includere il codice sorgente e deve
> > permettere la distribuzione sia come codice sorgente che in forma
> > compilata)
>
> tieni conto che in molti casi la forma "sorgente" e "compilata"
> coincidono ... guarda ad esempio uno script bash o perl o ...

Non esiste in questo caso la forma compilata, in quanto questi sono 
linguaggi "interpretati".

>
> > Ed ecco una soluzione da emerito ignorante che sono: ma al posto di
> > integrarli in Debian non si poteva creare dei repository a parte?

Non ho seguito la discussione, ma probabilmente questi firmware sono troppo 
importanti per l'uso di base delle macchine, che non se ne può evitare 
l'installazione (ecidentemente le controparti open, se esistono non sono 
sufficientemente stabili).

Byez
-- 
Gollum 1
Tessssssoro, dov'é il mio tesssssssoro...


Reply to: