[image of a Brave GNU World]
Brave GNU World - Numero 47
Copyright © 2003 Georg C. F. Greve <greve@gnu.org>
Traduzione italiana a cura di Giovanni Biscuolo <giovanni.biscuolo@milug.org>
Autorizzazione alla riproduzione sotto.

[CN | DE | EN | IT | JA | KO | ZH]

Benvenuti ad un nuovo numero di Brave GNU World, che questo mese sarà un po' più tecnico del solito. Anche se alcuni progetti sono rivolti principalmente agli sviluppatori, spero che anche i lettori meno tecnici saranno in grado di trarre ispirazione da questi progetti.

Twin

Il primo argomento di questo mese è Twin, [5] un ambiente testuale multi finestra e multi applicazione di Massimiliano Ghilardi. Twin è quindi acronimo di "Text WINdows" o ancora meglio "a textmode window environment. [un ambiente testuale a finestre, N.d.T.]"

Il progetto è rivolto a quelle persone che vogliono un ambiente a finestre senza aver bisogno o senza volere tutte le funzionalità di X11 - specialmente la sua notevole voracità di risorse.

Twin assieme a Links, un web browser testuale, richiedono solo il 5% delle risorse necessarie a X11 assieme al browser grafico Konqueror. Tutte le applicazioni che possono essere utilizzate in una console o in una finestra terminale possono essere utilizzate anche con Twin.

In tempi in cui le schede grafiche tentano di superarsi a vicenda con nuove funzionalità ed in cui ciò che non ci si poteva permettere ieri è disponibile il giorno dopo alla portata di tutte le tasche, tutto questo sembra quantomeno anacronistico; ma, come già illustrato per il progetto RULE nell'ultimo numero [6], questo è vero solo per una piccola parte dell'umanità.

In molti luoghi le persone dipenderanno per molto tempo dall'utilizzo di hardware che è già considerato obsoleto. Ciò accade spesso anche per le scuole in paesi più ricchi.

Ma c'è anche un altro gruppo che trae beneficio da Twin, che normalmente non viene preso in considerazione quando si parla di nuovo software: i ciechi e le persone con disabilità visive. Poiché dipendono dall'utilizzo di terminali Braille, a loro servono a ben poco le interfacce grafiche.

Con Twin ora anch'essi sono in grado di utilizzare un ambiente completo di finestre ed applicazioni multiple. In effetti Massimiliano racconta che egli ha ricevuto, suo malgrado, un sacco di commenti da questo gruppo di utenti, il che inizialmente lo ha sorpreso.

Dal punto di vista tecnico, il progetto consiste in un un server, chiamato "twin" come l'intero progetto. Questo server accetta le connessioni da parte dei clients e crea o modifica le finestre in base ai loro comandi. Inoltre, il server gestisce dinamicamente i diversi schermi e dispositivi.

Twin attualmente gestisce la console con il supporto per il mouse attraverso gpm e tutti i terminali termcap o compatibili con ncurses con il supporto per il mouse fornito dal protocollo "xterm", se disponibile. È anche possibile utilizzare X11 per la visualizzazione, attraverso un semplice driver X11 o il driver gfx con supporto grafico avanzato, così come è possibile utilizzare un server Twin di un'altra macchina.

È supportata anche l'interfaccia General Graphics Interface (GGI) [Intergaccia Grafica Generica, N.d.T.], ma poiché ancora non ha il supporto per la tastiera, è alquanto inutilizzabile per la maggior parte delle applicazioni.

Tra gli altri componenti ci sono le librerie libTW - che gestiscono la comunicazione con il server - e le librerie libTT, che forniscono un'astrazione delle funzioni del server - più orientate alla grafica - sotto forma di funzioni orientate alle finestre ed agli oggetti, che i client preferiscono. La terza libreria è libTutf, una libreria Unicode che consente di tradurre il testo da e verso Unicode. Questa libreria diverrà obsoleta prima o poi, dal momento in cui - quando sarranno risolti gli ultimi problemi aperti - verranno utilizzate le librerie standard.

Ed infine ci sono i client. Attualmente ce ne sono solo alcuni, due dei quali incorporati nel server. Sono stati integrati nel server, per ragioni tecniche, sia il gestore delle finestre, che può essere configurato attraverso il file di configurazione "~/.twinrc", sia un semplice terminale che emula la console.

Altri client sono un emulatore di terminale aggiuntivo (twterm), un gestore di login simile a xdm/gdm/kdm (twdm), un monitor di sistema (twsysmon), programmi di utilità per (de-)registrare i display ed infine altri piccoli client utili più alle prove che per il lavoro quotidiano.

Il progetto ha origine come programma DOS nel 1993, ma i problemi con le funzioni multiprocesso lo portarono presto a fermarsi. Lo sviluppo riprese di nuovo quando Massimiliano passò a GNU/Linux nel 1999 e portò il progetto sotto la sua nuova piattaforma.

Il progetto è stato scritto interamente in C, che è una delle ragioni della sua scarsa occupazione di memoria: un server Twin di solito ha bisogno di meno memoria rispetto ad una shell Bash. Naturalmente Twin è software libero: le sue licenze sono la Licenza Pubblica Generica GNU (GNU GPL) per il server e la Licenza Pubblica Generica Minore (GNU LGPL) per le librerie.

Massimiliano porta avanti l'ulteriore sviluppo nel proprio (scarso) tempo libero, ed egli ha ancora un sacco di idee. Innanzitutto gli piacerebbe completare la libreria toolkit e la sua documentazione, e poi editor, barre dei comandi, gestori di file, browser web, programmi di posta elettronica e programmi basati sui terminali dovrebbero essere estesi in modo da poterla utilizzare.

Massimiliano mi ha espressamente chiesto di riferire la propria necessità di essere aiutato in questi compiti, perchè c'è ancora così tanto da fare. Egli, per esempio, sta cercando volontari per documentare la libreria di comunicazione, creare uno screensaver libTW, completare twdialog, l'equivalente Twin di Dialog, oppure lavorare a twclip, un programma di utilità per copiare ed incollare il contenuto degli appunti.

Coloro che fossero interessati a partecipare dovrebbero dare una occhiata alla mailing list, gli utenti invece troveranno - per esempio - che Twin è già presente nella distribuzione stabile di Debian.

C++ Packages

Il numero continua con alcuni progetti che dovrebbero rendere più facile la vita degli sviluppatori C++ e che sono stati rilasciati da Christian Holm intorno all'inizio di Dicembre 2002. [7]

Quando le persone debbono comunicare con i computer, hanno bisogno di concordare un linguaggio comune da utilizzare per tali comunicazioni; specialmente quando la comunicazione non avviene in tempo reale o è molto complessa. Questo è il caso - per esempio - dei linguaggi di programmazione o dei file di configurazione.

Il problema fondamentale è che le funzioni per il controllo sintattico e la lettura o la valutazione di tali linguaggi possono diventare molto complesse; e questo spesso porta ad un dispendioso lavoro di ricerca degli errori nel caso in cui divenga necessario modificare la definizione della grammatica.

Inoltre la creazione di queste funzioni è un lavoro piuttosto noioso e senza particolari prodezze intellettuali, lavoro che i programmatori tendono ad evitare.

Per questo motivo sono stati creati strumenti che possono automatizzare la traduzione della definizione della grammatica in funzioni che sono in grado di leggere quella grammatica. Naturalmente ciò significa che la definizione stessa di grammatica deve essere interpretabile dalla macchina. La forma probabilmente più comune di tale definizione è la grammatica priva di contesto "Lookahead Left to Right Parsing" (LALR).

Uno dei migliori e più noti analizzatori LALR(1) è Bison [8], l'equivalente Yacc del progetto GNU. Yacc stesso stà per "Yet Another Compiler-Compiler" [Ancora un Altro Compilatore di Compilatore, N.d.T.], e Bison è stato deliberatamente mantenuto compatibile con Yacc per facilitare la transizione da Yacc a Bison.

Un'applicazione che spesso va a braccetto con Bison è Flex [9], che può essere utilizzata per generare funzioni che consentono di sezionare l'input in singole espressioni, che automatizza la generazione di codice sorgente per la ricerca di stringhe. Anche Flex è la controparte GNU di un altro programma - in questo caso "Lex".

Spero che questa breve introduzione sia stata comprensibile anche per il lettori non particolarmente tecnici; se desideraste approfondire ulteriormente, il web fornisce alcuni ottimi articoli introduttivi [10].

Yacc/Lex--

Sia Bison [8] che Flex [9] creano solititamente codice sorgente in C. Se questo codice venisse utilizzato in C++, si creerebbe disordine nello spazio dei nomi globale; inoltre, non sono disponibili interfacce C++.

Per questo motivo Christian Holm Christiansen ha scritto un gruppo di file header chiamati Yacc/Lexx--, che consentono di incapsulare l'output in C di Bison e Flex in classi C++. Nel fare ciò le modifiche alle specifiche del parser/scanner sono state minimizzate per consentire il massimo della flessibilità possibile.

In effetti Flex stesso è in grado di generare codice sorgente C++, ma l'output era troppo poco flessibile per i gusti di Christian ed inoltre non si sposava bene con le classi del parser generate da Bison. Perciò egli volle un incapsulamento comune ad entrambi. In effetti fu proprio questa asimmetria tra l'output C di Bison e l'output C++ di Flex a far sì che egli desse vita al suo progetto.

Rispetto a progetti come bison++, che ha il vantaggio di produrre output direttamente in C++, Christian è convinto che il suo metodo abbia vantaggio di essere indipendente dai meccanismi interni della specifica implementazione Yacc/Lex utilizzata. Perciò risulta più stabile quando dovessero intervenire cambiamenti nei progetti Yacc/Lex e non è direttamente influenzato dalle loro modifiche interne.

Ma ci sono anche alcuni cloni di Yacc/Lex che si comportano stranamente e che non sono conformi a POSIX; possono esserci dei problemi ad utilizzare simili programmi, e ciò è un problema particolare per questo progetto.

Perci&ogarve; Christian ha in programma nel prossimmo futuro di provare altre implementazioni Yacc/Lex e sarebbe felice di trovare un aiuto per questo. Inoltre è particolarmente gradito l'aiuto su altre piattaforme e con differenti compilatori.

Readline--

La Libreria GNU Readline [11] fornisce le funzioni che consentono di integrare una linea di comando versatile in altri progetti.

Tra le caratteristiche di GNU Readline ci sono un modo vi ed un modo EMACS, la possibilità di salvare il vecchio input, ricrearlo e consentire di modificarlo ancora o anche di completare i comandi precedentemente immessi in maniera simile alla shell csh.

Il progetto Readline-- di Christian Holm Christensen consente ai programmatori C++ di accedere alla libreria GNU Readline attraverso classi C++. Senza che la cosa ci sorprenda, gli sviluppatori C++ che intendono includere una interfaccia a riga di comando nelle proprie applicazioni sono il gruppo a cui si rivolge questo progetto.

Il programma ebbe origine quando Christian stesso ebbe bisogno di una interfaccia a riga di comando per provare il suo parser C++, un lavoro nel quale creò anche il precedente progetto.

Il maggior problema attualmente è che la libreria non è ancora thread safe, perciò dovrebbe essere gestita attentamente nelle applicazioni complesse. Sistemare questo così come migliorare l'interfaccia sono i prossimi passi che Christian intende compiere, poichè - anche se l'interfaccia è completa - ritiene che non sia intuitiva in alcuni punti.

Option--

Con Option--, Christian fornisce un parser C++ per le opzioni della riga di comando; una libreria che consente ai programmi C++ di trovare ed interpretare le opzioni della riga di comando passate all'avvio del programma.

Il principale vantaggio di questo progetto paragonato a progetti simili è che le possibili opzioni sono rappresentate da classi-modello, e ciò lo rende molto flessibile. Option-- funziona solo per argomenti non dipendenti dalla loro posizione, comunque. Così se è necessario costringere l'utente ad utilizzare determinate opzioni in determinate posizioni nella riga di comando, Option-- non è una buona scelta.

Le prime righe di questo progetto furono scritte da Christian quando il progetto ROOT ebbe bisogno di opzioni da riga di comando, sebbene il progetto successivamente utilizzò un'altra soluzione.

Ma quando scoprì di aver bisogno di qualcosa del genere per se stesso, Christian completò il progetto ed ora è diventato così stabile che ci sono ben pochi sviluppi in programma al di là di ulteriori test.

Thread--

L'ultimo progetto di Christian Holm Christensen di questo numero è Thread--, un progetto per utilizzare i thread nei programmi C++.

Poiché non tutti i lettori probabilmente conoscono il concetto di "Threads", è opportuna una breve spiegazione.

Essenzialmente tutti i computer funzionano in modo lineare. Se viene assegnato loro un compito, lo porteranno a termine passo per passo secondo la sequenza stabilita e con tutte le loro risorse. Nella maggior parte dei casi, questo cosentirebbe di eseguire solo un programma alla volta.

Per consentire di eseguire diversi programmi simultaneamente - il cosiddetto "Multi-Tasking" - il centro esecutivo del computer, il processore, salta di processo in processo. Ognuno di questi processi viene eseguito a turno in modo prettamente lineare, ma il metodo consente di suddividere le risorse del computer tra diversi programmi.

Non apppena i programmi ed i loro compiti divengono più complessi, lavorare solamente in modo lineare all'interno di un programma diventa sempre meno soddisfacente. Una soluzione a questo problema sono i thread, che consentono di suddividere i programmi in differenti "task threads" che possono essere eseguiti in modo lineare per risolvere differenti sottoinsiemi di un problema complesso.

L'interazione e la comunicazione tra questi differenti thread, naturalmente, necessita anche di coordinamento e di controllo, una funzionalità che può essere utilizzata attraverso l'utilizzo di Thread-- da C++.

Differentemente da altri progetti come Boost::Thread, ZThread o Common C++, Thread-- non distribuisce le macro preprocessore nel codice sorgente. Le parti specifiche all'implementazione sono invece inserite in Traits. Ciò rende la libreria piuttosto piccola ed estendibile.

Christian iniziò a lavorare a Thread-- per poter provare la thread-safety di Readline-- e secondo quando asserisce lavora bene su GNU/Linux, ma le versioni 2.95.x e precedenti di GCC danno dei problemi, ed è pertanto consigliabile verificare la versione di GCC.

Gli altri problemi sono i semaphores di Solaris ed i Thread di Win32, poichè non è in grado di effettuare prove su altre piattaforme. È molto gradito l'aiuto per risolvere questi problemi così come le informazioni relative ad altre piattaforme.

È tutto per quanto riguarda i progetti scritti da Christian. Il lettori abituali di Brave GNU World si saranno accorti che mancano ancora due informazioni essenziali, che ora vi do.

Primo: il linguaggio di programmazione utilizzato per tutti i progetti è C++ con GNU Autotools; secondo: tutti i progetti sono disponibili come Software Libero secono i termini della Licenza Pubblica Generica Minore GNU (GNU LGPL). Potete provare tutti i progetti sulla pagina C++ di Christian. [7]

6th EC Framework Progamme

Come riportato nel numero 40 [12] di Brave GNU World, la FSF Europe [13] ha scritto una raccomandazione [14] alla Commissione Europea il 30 Aprile 2002. La raccomandazione, che venne sostenuta da oltre 50 gruppi in tutta Europa, spiegava innanzitutto i vantaggi del Software Libero per l'Europa ed i paesi europei per poi suggerire di dare priorità al Software Libero.

Il contesto di questa raccomandazione è stato il sesto Programma Quadro [15] per il finanziamento europeo per la Ricerca e Sviluppo, che è stato deliberato l'anno scorso. Questi programmi durano quattro anni e contengono la maggior parte dei fondi per l'area scientifica. Uno degli obiettivi principali di questi programmi è la spinta allo sviluppo dell'economia e della società europea attraverso il finanziamento di ricerca e sviluppo.

Sebbene il Quinto Programma Quadro già contenesse alcune iniziative in favore del Software Libero, il Sesto Programma Quadro originariamente non prevedeva in alcun modo la promozione del Software Libero. Perciò la FSF Europe ha emanato la raccomandazione sopra citata.

Il 17 Dicembre 2002 il Sesto Programma Quadro è stato completato e sembra che la raccomandazione di preferire il Software Libero nelle proposte di progetto sia stata ascoltata. Il Programma di Lavoro "Tecnologie della Società dell'Informazione" (IST), nel quale vengono gestiti i finanziamenti per l'informatica e la tecnologia dell'informazione, ora contiene una affermazione che potrebbe avvantaggiare il Software Libero nel processo di valutazione dei progetti.

Ciò in pratica significa che l'intero stanziamento del Programma di Lavoro IST, che ammonta a 1,725 miliardi di Euro, è potenzialmente a disposizione del Software Libero. Questa è con tutta probabilità la più elevata somma mai disponibile per finanziare il Software Libero; anche se non in maniera esclusiva, in questo caso.

Per fornire supporto alle aziende, università e centri di ricerca al fine di far partire progetti relativi al Software Libero all'interno di questo programma, il 18 Dicembre 2002 la FSF Europe ha emesso un comunicato [16] nel quale chiede a tutti gli interessati di coalizzarsi.

Lo scopo è quello di creare - possibilmente - un progetto di Software Libero per ogni settore importante coperto dal Sesto Programma Quadro, per evitare che quei fondi vengano spesi per software proprietario; perché settori come eDemocracy, eHealth or eSecurity potrebbero avere notevoli effetti sul nostro futuro e devono essere affrontati con il Software Libero.

Ci vogliono molto tempo e molta fatica per mettere in piedi questi progetti, organizzarli e far sì che siano coordinati con l'amministrazione di Brussells, ma la FSF Europe farà il possibile per fare in modo che i progetti di Software Libero utilizzino le opportunità che essa è riuscita a creare.

TUX&GNU@school

Al termine di questo numero è un piacere per me annunciare ai lettori un'altra rubrica degna di nota. Mario Fux, egli stesso un lettore di Brave GNU World di lunga data, ha iniziato l'anno scorso a scrivere una rubrica simile dedicata specificamente al Software Libero nella scuola.

Ad oggi egli ha completato cinque numeri della rubrica "TUX&GNU@school", scritti in tedesco ed inglese, che hanno trovato casa sulla pagina principale della FSF Europe [17]. Faccio i miei migliori auguri a Mario per il futuro, così come a Christian Selig e Kristian Rink che lo aiutano in una sorta di redazione, ed esorto specialmente - ma non solo - i lettori che sono nel settore dell'istruzione a dare un'occhiata.

Until next month

Per questo mese è abbastanza, come al solito vi chiedo di inviarmi domande, ideee e commenti per posta elettronica. [1]

Questo indirizzo è quello al quale mandare anche segnalazioni di progetti; e vorrei incoraggiare tutti gli autori di spendere un po' di tempo per questo. Potrebbe non essere visto di buon occhio, un po' come scrivere la documentazione, ma è un buon modo per informare altre persone del vostro progetto.

Inoltre vi pregherei di non preoccuparvi del fatto che il vostro progetto possa non essere abbastanza importante. In effetti io non ho ancora incontrato un progetto che non fosse abbastanza importante da non poterne sciverne almeno due righe interessanti.

Per ora è tutto, al prossimo mese.

Info
[1] Inviate idee, commenti e domande a Brave GNU World <column@brave-gnu-world.org>
[2] Pagina principale del Progetto GNU http://www.gnu.org/
[3] Pagina principale di Brave GNU World di Georg http://brave-gnu-world.org
[4] L'iniziativa "Noi usiamo GNU" http://www.gnu.org/brave-gnu-world/rungnu/rungnu.en.html
[5] Pagina Principale di Twin http://linuz.sns.it/~max/twin/
[6] Brave GNU World - Numero 46 http://brave-gnu-world.org/issue-46.it.html
[7] Pacchetti C++ http://cholm.home.cern.ch/cholm/misc
[8] Pagina principale di Bison http://www.gnu.org/software/bison/
[9] Pagina principale di Flex http://www.gnu.org/software/flex/
[10] Pagina principale di Lex & Yacc http://dinosaur.compilertools.net
[11] Libreria GNU Readline http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
[12] Brave GNU World - numero 40 http://brave-gnu-world.org/issue-40.it.html
[13] Free Software Foundation Europe http://fsfeurope.org
[14] Raccomandazione della FSF Europe per il Sesto Programma Quadro (in inglese) http://fsfeurope.org/documents/fp6/recommendation.html
[15] Sesto Programma Quadro (in inglese) http://www.cordis.lu/fp6/
[16] Appello della FSF Europe (in inglese) http://mailman.fsfeurope.org/pipermail/press-release/2002q4/000047.html
[17] Rubrica TUX&GNU@school http://fsfeurope.org/education/tgs/

[ previous issue | Brave GNU World home ]

Ritorna alla pagina principale di GNU.

Per informazioni e domande sulla FSF e GNU rivolgersi, possibilmente in lingua inglese, a gnu@gnu.org. Altri modi per contattare la FSF.

Commenti a Brave GNU World di Georg, in inglese o tedesco, a column@gnu.org,
commenti su queste pagine a webmasters@www.gnu.org,
altre domande a gnu@gnu.org.

Copyright (C) 2003 Georg C. F. Greve
Tradotto da Giovanni Biscuolo.

Sono permesse la copia letterale e la distribuzione di questo articolo nella sua integrità, a condizione che siano riprodotti il copyright e questa nota.

Ultima modifica: Tue Feb 07 15:00:00 CET 2003