POSTA LINUX Programmazione embedded: SOLUZIONI un plus per Linux INTERNET CAD SVILUPPO GIOCHI RUBRICHE Di Marco Fioretti Telefoni, console, videoregistratori: come si sviluppa per il pinguino nascosto nei più disparati dispositivi. I computer da tavolo e i server sono soltanto una piccola parte degli elaboratori esistenti. Oggi gli oggetti contenenti un microprocessore sofisticato sono innumerevoli e molti di essi sono di uso assolutamente comune: telefonini, lavatrici, impianti antifurto, videoregistratori, console per giochi, centraline per home automation e mille altri. Quando un microprocessore e il relativo software vengono inseriti all’interno di un generico macchinario, per estenderne le capacità in qualsiasi maniera, vengono usualmente definiti embedded, cioè integrati. Inserire un mini-processore (microcontroller) in un apparato per controllarne il funzionamento non è certo una novità. Fino a tempi relativamente recenti però, le capacità di calcolo dei microcontroller embedded non erano in grado di far girare che singoli programmi altamente ottimizzati. Molti processori embedded attuali, anche se invisibili, sono invece abbastanza potenti da poter ospitare sistemi operativi veri e propri, a volte anche real time . Allo stesso tempo, anche se le distribuzioni più popolari per desktop hanno ormai requisiti hardware uguali o quasi a quelli di Windows, il kernel vero e proprio di Linux ha bisogno soltanto di poche centinaia di Kilobyte per funzionare. Questi fatti, uniti all’estrema flessibilità di Linux, hanno una conseguenza particolarmente interessante per studenti e appassionati di informatica: parecchi dispositivi elettronici utili anche ai non specialisti, come gli impianti antifurto o di home automation appena citati, oggi si possono costruire o personalizzare senza conoscenze superspecializzate o apparecchiature assai costose, almeno nei casi più semplici. Soprattutto, questo è possibile scrivendo programmi o script con tecniche abbastanza simili a quelle di Linux per desktop o server. Il discorso vale anche per i laboratori di informatica delle scuole, che potrebbero preparare gli studenti a tecniche di programmazione embedded di sicuro interesse per il mercato del lavoro, con spese e risorse davvero limitate rispetto anche a pochi anni fa. Un tutorial tecnico su queste attività richiederebbe molto più spazio di quello disponibile in questa rubrica. Nel resto di questo articolo vedremo però quali sono i concetti basilari che occorre conoscere per comprendere i vari manuali sull’argomento, cosa aspettarsi e quali preparativi fare per muovere i primi passi nel mondo di Linux embedded. Un po’ di terminologia Tutti i tutorial e manuali per la programmazione embedded utilizzano continuamente vari termini non complicati ma probabilmente scono- Distribuzioni Linux per uso embedded D ecidere quale distribuzione utilizzare è il primo problema di molti nuovi utenti Linux e a questa regola non si sfugge nemmeno nel campo embedded. La prima scelta da fare è fra distribuzioni interamente Open Source, senza costi di licenza, o proprietarie, con parte del codice più o meno chiuso e varie formule di supporto. Oltre che per ovvi motivi etici, didattici o di costi, la prima scelta è più conveniente nel caso in cui si voglia modificare più o meno pesantemente il kernel vero e proprio e si può fare affidamento soltanto sul supporto fornito online da mailing list e newsgroup. Alcuni prodotti commerciali, d’altra parte, potrebbero offrire anche kit hardware per sviluppatori, completi di schede, connettori, alimentatori e manuali stampati, a prezzi abbordabili per uso didattico o comunque non-profit. L’alternativa Open Source più popolare è forse ucLinux (www.uclinux.org) compatibile con decine di processori, da 300 quelli nei router Cisco a vari modelli di Arm, Coldfire, Dragonball, Microblaze e Intel i960. Anche la distribuzione Gentoo ha una versione embedded (www.gentoo.org/proj/en/base/embedded/) con una comunità di sviluppo abbastanza attiva. Nel campo commerciale, i nomi più noti sono Wind River ( www.windriver.it ), Montavista ( www.mvista.com ), Freescale ( www.freescale.com ), TimeSys (http://timesys.com/) e LynuxWorks (www.lynuxworks.com). Esiste anche un consorzio (www.embedded-linux.org) che alcuni anni fa ha proposto una piattaforma comune per facilitare il porting di applicazioni software fra versioni diverse di Linux embedded. Una menzione d’onore in questo spazio va infine a Kaeil OS (www.koansoftware.com/kaeilos/), una distribuzione disponibile con licenza Gpl sviluppata in Italia, con possibilità di supporto professionale, da Koan Software. PC Professionale - Dicembre 2007 RUBRICHE LINUX sciuti a chi non si è già inoltrato in questo mondo, quindi prima di procedere è opportuno spiegarne il significato. Lo stesso termine embedded non ha un’interpretazione unica. Alcune applicazioni embedded usano versioni pesantemente modificate di Linux (vedi box), talmente diverse dall’originale che anche i programmi applicativi vanno scritti con criteri particolari. Questo è vero soprattutto quando il kernel o i programmi devono assolutamente reagire a stimoli esterni in maniera praticamente istantanea (real time), cioè con ritardi inferiori a qualche frazione di secondo. Un esempio familiare sono i microprocessori che controllano freni o altri componenti delle automobili più moderne. Altrettanto spesso però per embedded si intende qualsiasi applicazione in cui potenza del processore, memoria e capacità di storage sono talmente ridotti rispetto ai normali computer da impedire l’uso delle stesse librerie e software applicativi usati su quelle piattaforme. Quasi sempre i sistemi embedded sono privi di disco rigido e hanno soltanto pochi Megabyte di memoria flash. Quest’ultima è la stessa memoria usata nelle chiavi Usb o per ospitare il software Bios nei Pc normali, diffusissima nel mondo embedded perché permette di conservare permanentemente dati e programmi essenziali in poco spazio e con consumi molto ridotti. Il modo più semplice per far pratica di programmazione Linux embedded senza doversi trasformare in progettisti hardware è l’acquisto di un Pda basato su Linux o, meglio ancora, di un qualsiasi Single Board Computer (Sbc), cioè di una singola scheda contenente un processore compatibile x86, memoria flash e le periferiche più comuni come video Vga, Ethernet, Usb e seriale. Alcuni siti dove reperire informazioni su Pda e Sbc supportati da Linux sono nel box Risorse. Per quanto riguarda il flusso di sviluppo software, i processori su cui si caricano e fanno girare Linux e altri programmi in modalità embedded vengono chiamati target (bersaglio). A volte lo stesso termine indica an- che l’intera scheda o macchinario su cui quei processori sono montati. Il termine host (ospite) indica invece il personal computer o server tradizionale su cui lo sviluppatore scrive e compila i programmi per il target, li carica nel target stesso e lo controlla. Un altro uso frequente dell’host è quello di fare da disco rigido ausiliario per il target. Questo avviene soprattutto nella fase iniziale di sviluppo del software, quando è utile provare diverse versioni di un programma e la loro dimensione complessiva supera quella della flash . Per usufruire di questa funzionalità è sufficiente installare sull’host lo stesso server Nfs (Network File System) con cui si condividono partizioni fra più computer Linux normali connessi in rete locale. Architettura di base I componenti essenziali di qualsiasi ambiente Linux embedded sono un boot loader per l’avvio del sistema, il kernel vero e proprio, un programma di inizializzazione e uno stack Tcp/Ip per le comunicazioni via Internet o rete locale. Il kernel non deve ovviamente essere lo stesso che gira in un desktop, anche quando si lavora su processori x86. Gli unici compiti sicuramente necessari sono la gestione della memoria, l’arbitraggio (scheduling) fra i vari processi e il controllo dei driver delle poche periferiche eventualmente presenti sulla scheda. A queste funzioni base si aggiungono, nel caso dei sistemi real time, i contatori di tempo e i relativi algoritmi di con- trollo che garantiscono la risposta a stimoli esterni entro i tempi richiesti. Nel caso in cui si vogliano conservare permanentemente dei file sul target ed eseguirvi dei programmi applicativi, cioè quasi sempre, è necessario anche un file system che permetta di dividere la flash in partizioni e directory come accade nei normali Pc. I primi sistemi Linux embedded utilizzavano i file system standard per Linux. Poiché questi sono progettati non per memorie flash ma per normali dischi rigidi, divisi in blocchi e settori, era necessario uno strato software supplementare per emulare i blocchi e riconoscere, evitandoli in maniera trasparente per i programmi, le locazioni di memoria danneggiate. In seguito si è passati, per aumentare le prestazioni, a file system scritti specificamente per le flash, che non hanno bisogno di questi componenti ausiliari. Quello oggi più usato è Jffs2 (Journalling Flash File System, version 2, http://sourceware.org/jffs2/), le cui capacità sono descritte in dettaglio nella pagina web http://sourceware.org/jffs2/jffs2-html/. Configurazione dell’ambiente di sviluppo su Linux Una volta scelto il target, occorre installare sull’host il compilatore e tutte le librerie necessarie per creare il software per il target. Poiché i relativi pacchetti sono o quelli usati per la programmazione standard su Linux, Componenti principali di un sistema Linux embedded Programmi applicativi e interfaccia utente File system ottimizzato per memorie flash Scheduler Gestione memoria Driver KERNEL Boot loader Alcuni componenti dei sistemi Linux embedded sono gli stessi, o quasi, dei desktop: shell, programmi applicativi da linea di comando, scheduler non real time e alcuni driver. Altri, come le librerie grafiche, il file system o il gestore della memoria, sono sviluppati appositamente per questi scenari. 301 PC Professionale - Dicembre 2007 RUBRICHE LINUX Ambiente di sviluppo per Linux embedded Compilatore, debugger, librerie, linker... SERVER DI RETE: Nfs Dhcpd Tftpd Minicom o Kermit BOOT LOADER DRIVER PORTA SERIALE Interfaccia Jtag o Bdm HOST TARGET Alcuni componenti dei sistemi Linux embedded sono gli stessi, o quasi, dei desktop: shell, programmi applicativi da linea di comando, scheduler non real time e alcuni driver. Altri, come le librerie grafiche, il file system o il gestore della memoria, sono sviluppati appositamente per questi scenari. su cui esiste una notevole documentazione, o altri molto specializzati forniti (quasi sempre) direttamente dal fabbricante del target non ne parleremo ulteriormente in questa sede. Oltre all’ambiente di compilazione vero e proprio, per comunicare con il target occorre un’interfaccia fisica in via di estinzione nei desktop, quella seriale. Anche se molti dispositivi, soprattutto Sbc, hanno almeno una porta Ethernet, il protocollo seriale rimane infatti quello più comune in questo segmento di mercato. Una porta seriale può ridurre dimensioni e costo dell’hardware ed è molto più semplice e affidabile dal punto di vista software. La comunicazione via ftp, telnet o ssh richiede infatti, oltre ai relativi client o server, anche uno stack Tcp/Ip ed Ethernet funzionante e opportunamente configurato, cosa niente affatto scontata in un sistema embedded ancora in via di sviluppo. Se l’ host ha un’interfaccia seriale, per usarla sotto Linux basta invece configurare opportunamente programmi come Minicom o Kermit. Entrambi hanno man page che descrivono funzionamento e opzioni per la linea di comando in maniera abbastanza completa e permettono sia di aprire una console sul target sia di trasferire file fra quest’ultimo e l’host. Caricamento del software sul target Alcuni sistemi embedded devono essere in grado di funzionare da soli, mentre altri sono utili soltanto se collegati a un computer principale che ne dirige le operazioni. Smartphone e palmari sono gli esempi più comuni della prima categoria: la seconda comprende registratori di cassa, moduli antifurto e qualsiasi altro terminale intelligente che ha bisogno di essere continuamente connesso a una rete locale per funzionare. Le modalità di caricamento e avvio di Linux e dei vari applicativi che girano su di esso possono essere abbastanza diverse nei due casi. I dispositivi isolati devono essere caricati con tutto quello che gli serve per essere completamente autonomi dall’istante stesso in cui vengono accesi. Quelli di tipo terminale, invece, potrebbero anche fare a meno di avere una copia locale del software, scaricandolo dalla rete locale con i metodi descritti più avanti. Quando questo è possibile, l’unico software da installare sulla scheda è il boot loader che effettua lo scaricamento iniziale e lancia il kernel Linux. La procedura per riscrivere effettivamente una flash da linea di comando richiede utility che variano da target a target, quindi non ne parleremo in questo articolo. Il software da installare sull’host per permettere al target di partire e configurarsi correttamente è invece assolutamente standard. Le relative procedure sono infatti le stesse utilizzate nel mondo Linux (e Windows) in qualsiasi caso si abbiano, in una rete locale, dei client privi di disco rigido (diskless) su cui conservare il proprio kernel. Per partire, i client diskless non possono che scaricare, tramite la stessa rete locale, l’intero kernel e qualsiasi altro file sia loro necessario nella fase di avvio. Perché questo accada, le prime cose di cui il target ha bisogno al momento dell’accensione sono il suo indirizzo Ip e il nome e la locazione in rete del proprio kernel. L’host può fornire queste informazioni con lo stesso Risorse Per avere un’idea di quali modelli di Single board computer sono disponibili in Italia si possono visitare le pagine www.koansoftware.com/it/prd_sbc.htm e www.cjb.it/CPU-All-In-One.htm. Una buona introduzione generale a Linux embedded, adatta a chi ha già esperienza di programmazione, è il tutorial “Embedded Linux applications: An overview” (www.ibm.com/developerworks/linux/library/l-embl.html). Nel 2004 il Linux Journal ha pubblicato una introduzione in quattro parti alla programmazione embedded: l’Url dell’articolo finale, che contiene anche i link alle puntate precedenti, è www.linuxjournal.com/article/8122. L’articolo in italiano www.linux.it/~rubini/docs/boot26/boot26.html spiega in maniera dettagliata le varie fasi di avvio di un sistema Linux, embedded o no. Una presentazione, sempre in italiano, sugli “Strumenti di sviluppo per Linux embedded”, piuttosto completa anche se non aggiornatissima, si può scaricare all’indirizzo http://free-electrons.com/doc/embedded_linux_tools_it.odp. Molte altre presentazioni in Italiano su questi temi sono disponibili su www.ingpozzi.it/semlinux/interventi.htm. Un elenco dei passi da eseguire per configurare Minicom per comunicare con un sistema embedded si trova infine nel manuale Red Hat per sviluppatori embedded, www.redhat.com/docs/manuals/edk/EDK-1.0-Manual/getting-started-guide/gsinstall.html. 302 PC Professionale - Dicembre 2007 RUBRICHE LINUX Un generico connettore Bdm (da www.hitex.com) per debugging e recupero di schede embedded anche nelle situazioni più critiche. Il connettore è in realtà composto da un circuito racchiuso in un involucro che va posto fra il target e l’host, a cui va collegato con un normale cavo parallelo o Usb, nei modelli più veloci. protocollo usato dai client Pc nelle normali reti aziendali, quello Dhcp (Dynamic Host Configuration Protocol): basta quindi configurare il relativo server, dhcpd, che è disponibile come pacchetto binario in tutte le distribuzioni Linux. Una volta scoperto qual è il kernel di cui ha bisogno per partire, il target deve ancora scaricarlo via rete. Il protocollo che praticamente tutti i target Linux sono sicuramente in grado di usare per scaricare file è quello Tftp ( Trivial Ftp , cioè “Ftp semplificato”). Come nel caso di Dhcp, conoscere Tftp è quindi utile non solo agli aspiranti programmatori embedded ma anche, per esempio, agli amministratori di un laboratorio scolastico: mettere a disposizione degli studenti soltanto dei Pc diskless è uno dei modi migliori per riciclare computer altrimenti obsoleti, aumentando grandemente, allo stesso tempo, sicurezza e semplicità di amministrazione del sistema. Pronto soccorso via hardware I componenti hardware e software appena descritti sono sufficienti a sviluppare e collaudare software embedded quando tutto va bene. Come fare però quando il kernel del target non riesce più a partire per un errore di programmazione o perché i file contenuti nella flash sono stati corrotti? In casi del genere nemmeno l’interfaccia seriale è utilizzabile e non servirebbe a nulla spegnere e riaccendere il dispositivo, ma se la scheda che ospita il target è stata progettata con criterio non c’è pericolo. Per far fronte a questi problemi l’industria elettronica ha sviluppato da anni due interfacce standard: la Jtag (Joint Test Action Group, uno standard Ieee) e la Bdm (Background Debug Mode). La prima è un protocollo di comunicazione usato principalmente per il collaudo, usualmente tramite la porta parallela di un Pc, di qualsiasi tipo di circuito integrato montato su una scheda. Nel nostro caso, la Jtag è interessante soprattutto per connettersi al processore o alla memoria flash presente sulla scheda stessa. Anche Bdm, originariamente sviluppata da Motorola, permette di accedere direttamente agli stessi componenti, sempre tramite la porta parallela, o a volte quella Usb dell’host. L’uso di entrambe le interfacce nello sviluppo di software embedded è lo stesso: connettersi al processore target, anche se tutte le sue partizioni fossero vuote o corrotte e non riuscisse a partire da solo, per caricare direttamente nella sua memoria un kernel e poi avviarlo. Sia Jtag sia Bdm richiedono connettori dedicati sul target e/o circuiti ausiliari collegati ai connettori stessi. Dal punto di vista della configurazione dell’host, la cosa più importante è ottenere il driver adatto per la porta usata da quei connettori (parallela o Usb), verificare che non entri in conflitto con altri driver per le stesse porte e rimuovere questi ultimi, o almeno disattivarli, in caso contrario. Nulla impone che un’applicazione embedded possa avere soltanto un’interfaccia a carattere o comunque estremamente spartana. I toolkit grafici per Linux come Qtopia mettono a disposizione dei programmatori icone assai gradevoli, menu a tendina, barre di scorrimento e tanti altri elementi comuni nei nostri desktop (fonte: LinuxJournal.com). 303 PC Professionale - Dicembre 2007 Busybox: Linux embedded si controlla come un desktop O ggi è possibile controllare con Linux, usando le stesse utility, interfacce e linguaggi di scripting già noti ai suoi utenti desktop, qualsiasi oggetto che contenga un processore embedded compatibile con Linux. L’affermazione, per quanto indiscutibile in generale, potrebbe indurre parecchi utenti in errore, o almeno creare qualche confusione. Potrebbe succedere, in particolare, di caricare su un processore embedded uno script shell già collaudato con successo su un normale server o workstation e lanciarlo da una linea di comando apparentemente identica a quella di quegli altri computer solo per vederlo fallire con un messaggio d’errore simile a “comando o opzione sconosciuti”. Quasi sempre, le ragioni per messaggi di questo tipo sono due. La prima è che nello script è stato chiamato qualche comando particolare, non incluso in tutte le distribuzioni di Linux, oppure incluso ma in una diversa directory del file system. Quando questo si verifica, basta aggiungere i file che mancano, ammesso che ci sia ancora spazio disponibile. L’altro caso, che è quello discusso in questo articolo, è quando si esegue un comando o si lancia un programma che, pur essendo effettivamente presente nel sistema ha un comportamento diverso da quello che conosciamo. Questo avviene perché quel programma è effettivamente diverso da quello installato presente in un normale server o desktop Gnu/Linux. In un sistema embedded è molto probabile che queste versioni modificate non siano altro che un unico file eseguibile, capace di comportarsi in molte maniere diverse. Si tratta di Busybox (www.busybox.net) un programma sviluppato per sostituire da solo parecchie decine delle utility tradizionali della linea di comando Unix: bzip2, grep, gzip, reboot, sed, tar, wget e molte altre. Sono disponibili anche quasi tutte le capacità essenziali dell’editor Vim. In effetti, quasi qualsiasi comando normalmente presente negli script di avvio di un sistema Gnu/Linux o comunque necessario per la sua amministrazione è sostituibile da Busybox. Il motivo per cui è stato sviluppato questo applicativo è ovvio: un singolo eseguibile può eliminare completamente la duplicazione di codice fra diversi programmi, quindi Busybox occupa molto meno spazio della somma delle utility che sostituisce. La struttura del codice sorgente facilita anche l’aggiunta di altri programmi da parte di sviluppatori indipendenti, oppure la rimozione di quelli non necessari per ridurre ulteriormente lo spazio necessario. Tutto questo fa di Busybox uno strumento prezioso non solo nelle piat- RUBRICHE LINUX taforme embedded vere e proprie, in cui tutto il software deve entrare in pochi Megabyte di memoria flash, ma anche in floppy disk o altri sistemi di recupero, che hanno limiti di spazio abbastanza simili. Un altro fattore del successo di Busybox sta nel fatto che, almeno in prima approssimazione, è possibile usarlo senza nemmeno conoscere la sua esistenza. Il modo più elementare di usare Busybox è invocarne il nome seguito da quello del programma di cui si ha bisogno e da eventuali argomenti per quest’ultimo. Scrivendo quindi: # busybox vim prova.txt in una shell, Busybox aprirà, comportandosi come l’editor Vim, il file “prova.txt”. La pro- Aumentano le capacità di Group Office G roup-Office (www.group-office.com) è una suite Php per l’organizzazione dell’ufficio, disponibile in varie versioni tutte interamente utilizzabili tramite web browser. Le funzioni di base includono rubrica condivisa con campi personalizzabili, calendario, client di posta elettronica, sincronizzazione dei relativi dati con Pda o Microsoft Outlook, file e project manager, gestione delle fatture e un semplice negozio elettronico. Avvisi o bollettini ai clienti creati con OpenOffice o Microsoft Office possono essere spediti a una mailing list di contatti direttamente dall’interno del programma. A partire da novembre 2007 la versione professionale di Group-Office include un applet Java che sincronizza anche i file sul disco locale di ogni utente con le copie presenti sul server centrale. Group-Office mette anche a disposizione dell’amministratore di sistema moduli speciali per gestire gli utenti e l’intero funzionamento del sito web. Un nuovo sistema di helpdesk, con notifica automatica via email o browser delle richieste dei clienti, mantiene un database centralizzato con la storia completa delle stesse richieste. Il sito web contiene anche un demo online dell’intero programma. cedura di installazione crea però anche tanti link all’eseguibile Busybox quanti sono i programmi che esso sostituisce e ogni link ha il nome di uno di quei programmi. Il risultato è che quando si ha bisogno, per esempio, di comprimere un file con gzip e si digita questa stringa nella linea di comando, Busybox capisce da quale dei link suddetti è stato chiamato e si comporta, nei limiti delle sue capacità, come il programma originario. Questa flessibilità ed efficienza hanno un prezzo, che è poi quello già accennato. Sia per mantenere al minimo le dimensioni del programma sia per facilità di sviluppo, Busybox non contiene tutte le funzioni e opzioni delle utility che sostituisce. È proprio questo che dà luogo, se l’utente non ne è al corrente, ai messaggi d’errore menzionati all’inizio dell’articolo. Le opzioni supportate, d’altra parte, si comportano in maniera quasi identica a quelle dei programmi originari e le differenze sono documentate, quindi con un minimo di preparazione o di ricorso al manuale online si possono evitare brutte sorprese. Se Busybox non basta Nonostante le sue notevoli capacità, può capitare di aver bisogno di un programma, soprattutto un server, che Busybox non è in grado di rimpiazzare. Esistono comunque diversi progetti indipendenti, descritti nella pagina www.busybox.net/tinyutils.html, che colmano questo vuoto: i più utili sono Dropbear (server e client Ssh in meno di 100 Kilobyte) e ssmtp per la posta elettronica. Red Hat e Novell guardano all’Asia C ina, India e il resto dell’Asia sono in fase di rapida espansione anche per quanto riguarda l’uso del software Open Source a livello istituzionale e due dei più grossi fornitori di questo software, Red Hat e Novell, hanno entrambi progetti molto ambiziosi al riguardo. Red Hat, ad esempio, ha dichiarato di voler arrivare entro il 2009 a ottenere il 60 per cento del fatturato dal mercato Asiatico e dalle nazioni del Pacifico e intende aumentare il numero di dipendenti nell’area di circa mille unità. L’opportunità più interessante per Red Hat è il bisogno di molte aziende e Pubbliche Amministrazioni della zona di migrare da sistemi Unix obsoleti e troppo costosi a soluzioni più economiche ma altrettanto valide: i clienti per questo tipo di accordi sono soprattutto nei settori finanziario e delle telecomunicazioni. Dal canto suo Novell ha piani altrettanto importanti ma diversi, e intende fare di Suse Linux il desktop preferito dalle Pubbliche Amministrazioni asiatiche, soprattutto in China, Giappone, Thailandia e India, dove ha firmato un contratto per 2000 server e 40000 desktop con lo stato del Tamil Nadu. Etichette Rfid: meglio Open Source R fdump (www.rf-dump.org) è un programma Open Source con varie interfacce per leggere, copiare o modificare i dati (tag) contenuti nelle etichette Rfid (Radio Frequency Identification) oggi aggiunte agli articoli più disparati. L’interfaccia grafica, che gira anche su Windows, è basata sulle librerie Gtk, le stesse usate per l’ambiente desktop Gnome. Esiste anche una versione live su Cd-Rom (www.rfdump.org/live.shtml), che gira su Windows grazie a VmWare, per provare Rfdump senza installare alcunché nel proprio computer. Sulla linea di comando Rfdump è disponibile sotto forma di script Perl, compatibile anche con diversi Pda che supportano Linux. Da novembre 2007 Rfdump ha aggiunto o migliorato il supporto per vari formati standard in questo campo: la lista dell’hardware già compatibile si trova su www.rfdump.org/hw.shtml. Studiare e suonare musica senza interruzioni con VirtMus I tradizionali leggii per spartiti musicali non riescono a sostenere più di un album o a mostrarne più di due pagine alla volta. Questo semplice fatto è una notevole seccatura durante concerti ed esercitazioni, in quanto il musicista deve spesso staccare le mani dallo strumento per voltare pagina, rischiando interruzioni ed errori. La soluzione Open Source a questo problema è VirtMus (http://virtmus.com/). Questo programma per Linux, Mac OS e Win- dows mostra sullo schermo di un computer le pagine dello spartito che si stanno suonando e soprattutto permette di cambiarle senza distrarsi tramite mouse, tastiera o pedaliera con interfaccia Usb. Gli spartiti possono essere importati nel programma da scanner, fotografie digitali o file Pdf e raccolti in collezioni o Play List. La versione 1.01 di VirtMus è dotata anche di varie animazioni per passare da una pagina all’altra. 304 PC Professionale - Dicembre 2007