Uclibc è una run-time library realizzata in c ed è adatta per sistemi embedded con un ridotto footprint. la libreria è liberamente utilizzabile per le nostre applicazioni commerciali.
Questa libreria è un valido strumento per chi ha l’esigenza di scrivere applicazioni per soluzioni embedded, inoltre è proposta secondo la classica licenza GPL. mClibc nasce come una derivazione della più famosa gLibc per poi, nel tempo, assumere un’evoluzione diversa e diventare un’ottima scelta per il mondo embedded. Le differenze più importanti tra queste due proposte, fondamentalmente, sono da ricercarsi nei diversi segmenti di mercato cui sono rivolti: la gLibc è stata pensata per la realizzazione di desktops e servers, mentre la mCLibc per applicazioni embedded con ridotte risorse fisiche. La libreria mClibc è altamente configurabile fino a diventare una valida alternativa per le versioni di Linux embedded. Può succedere che, in alcuni casi, la mClibc disponga di qualche opzione disabilitata; come, per esempio, il supporto alla libreria matematica per C99. Queste particolari opzioni possono essere, però, in ogni modo ripristinate per realizzazioni che dispongono dello spazio di memoria sufficiente o, anche, per target che dispongono delle necessarie risorse hardware.Può capitare, inoltre, che lo spazio di memoria così risparmiato incida sulle prestazioni del sistema. Lo spazio di memoria richiesto da mClibc per applicazioni dedicate può, tipicamente, richiedere non più di 500 kbytes. Questa particolarità lo rende certamente più interessante di gLibc che, a parità di applicazione, può richiedere alcune decine di Mb di memoria.
Introduzione
La libreria mCLibc è realizzata per diverse piattaforme quali alpha, ARM, i386, i960, h8300, m68k, MIPS, PowerPC, SH, SPARC e v850. È molto più leggera della libreria GNU e, seppure con qualche differenza, le sue API sono compatibili con quelle della glibc; ovvero, le applicazioni sviluppate mediante la libreria C standard necessitano, nella stragrande maggioranza dei casi, solo di una ricompilazione con mClibc. Allo stato attuale, la mClibc è utilizzata per sviluppare applicazioni per sistemi linux standard, per mClinux (MMU-less linux) che supportano le librerie condivise e i thread; ed è rilasciata sotto licenza Lesser GPL, come la glibc. Quest’ultima considerazione è un aspetto non indifferente; infatti, inserire uCLibc, in un’applicazione commerciale, non comporta nessun obbligo da parte dell’utilizzatore. Con Clibc è possibile distribuire un programma commerciale con senza alcuna restrizione. La chiave di tutto risiede nella licenza Lesser GPL, per ogni dubbio o chiarimento è opportuno consultare il sito di riferimento www.gnu.org/copyleft/lesser.html. Ma quali sono le differenze tra la mClibc e gLibc? E quali sono i dati qualitativi che possono giustificare l’uso di mClibc piuttosto che gLibc? mClibc e glibc non sono per niente uguali, vi sono alcune sostanziali differenze che possono impattare il funzionamento di una applicazione, qualora si volesse trasportarla da una libreria all’altra. Innanzi tutto, occorre premettere che con mClibc si ottiene un risparmio di spazio permettendo al programmatore di configurare la libreria in base alla propria disponibilità di memoria. Inoltre, non è assicurata la compatibilità fra release successive ovvero, al rilascio di una nuova versione, può capitare di dover ricompilare tutta l’applicazione. L’obiettivo degli sviluppatori di mClibc è di raggiungere la piena compatibilità con gli standard ANSI/ISO C99 e SuSv3. Vediamo sommariamente alcune differenze:
➤ gestione della memoria:Nella libreria glibc e in mClibc la chiamata malloc(0) ritorna un puntatore NULL. Questo comportamento è, in ogni caso, previsto dallo standard Susv3. La stessa cosa si applica alla chiamata realloc(NULL, 0);
➤ networking: mClibc non supporta NSS (/lib/libnss_*), questa permette alle applicazioni glibc di utilizzare diversi metodi di autenticazione ai DNS durante il processo di risoluzione degli indirizzi. La mClibc supporta solo le plain passwords e le shadow passwords; nel caso fosse necessario usare altri metodi di autenticazione si può utilizzare pam (Pluggable Authentication Modules). Cioè, un middleware che permette di sviluppare applicazioni indipendenti dallo specifico protocollo di autenticazione;
➤ libreria matematica: mClibc supporta i long double solo come inlines. Per essere sicuro di essere compatibili conviene usare i double: questi sono completamente supportati.
Possibile uso
Questa libreria la possiamo, per esempio, trovare nelle distribuzioni Linux per chiavi USB. Le penne USB sono degli stick di memoria di capienza variabile molto richieste dai consumatori per il loro costo contenuto e per la loro comodità. Infatti, i kernel Linux, dalle versioni 2.4, supportano senza problemi le USB key: il sistema operativo riconosce una chiave USB come un normale disco SCSI e permette di effettuare su di essa tutte le operazioni praticabili su un disco rigido standard. Per utilizzare correttamente un dispositivo di questo tipo occorre inserire nel kernel (anche sotto forma di moduli) il supporto all’emulazione SCSI ed ai dischi rigidi SCSI, oltre ovviamente a quello per gli standard USB e USB Mass Storage. In ogni caso, quasi tutte le distribuzioni recenti supportano questi dispositivi senza problemi, pertanto non sarà necessario ricompilare il kernel. A questo proposito una delle distribuzioni da considerare è senza dubbio la DAMN Small Linux. Essa deriva da Knoppix ed in 50 MB offre un ambiente di lavoro apprezzabile. Infatti, sono disponibili molti applicativi quali browser grafici (Dillo, leggerissimo e veloce) o testuali (Links), un client di posta elettronica (Sylpheed), un riproduttore di file multimediali (XMMS), vari applicativi per l’ufficio (Scite ed ABS Spreadsheet) e così via. A questo proposito, la DAMN Small Linux è compilata con la libreria C mClibc (molto più leggera della glibc) ed è in grado di funzionare su sistemi molto vecchi. Un’altra possibile applicazione è verso gli embedded web server, in particolari quelli che dispongono un piccolo footprint di memoria.
Conclusione
uLibc è senza dubbio una valida proposta per chi ha bisogno di una libreria C, con il relativo sorgente, per il segmento embedded. Sono disponibili, comunque, diverse versioni pre-compilate liberamente scaricabili dal sito ufficiale: http://uclibc.org.