[image of a Brave GNU World]
Brave GNU World - numéro 47
Le meilleur du GNOUveau monde
Copyright © 2003 Georg C. F. Greve <greve@gnu.org>
Traduction [FR] : Valéry Beaud <vbeaud@free.fr>
Permission ci-dessous.

[CN | DE | EN | FR | JA | ES | KO | PT | ZH]

Bienvenue à un nouveau numéro du meilleur du GNOUveau monde, qui sera un peu plus technique ce mois-ci. Mais même si certains projets ont sans doute un intérêt principalement pour les développeurs, espérons que les lecteurs moins techniciens seront également à même de tirer perspectives et inspirations nouvelles de ceux-ci.

Twin

Le premier sujet du mois est Twin [5], un environnement texte multi-applications et multi-fenêtres écrit par Massimiliano Ghilardi. C'est pourquoi Twin est un acronyme de "Text WINdows" ou (encore mieux) de "textmode window environment" (environnement fenêtré en mode texte).

Le projet s'adresse à ceux qui cherchent à disposer d'un environnement à plusieurs fenêtres sans avoir besoin ou vouloir toutes les fonctionnalités de X11 - en particulier son significatif dévoreur de ressources.

La combinaison de Twin et de Links, un navigateur web en mode texte, n'utilise que 5% des ressources nécessaires à X11 avec le navigateur graphique Konqueror. Toutes les applications qui peuvent être utilisées dans une console ou une fenêtre terminal peuvent aussi être utilisées sous Twin.

À une époque où les cartes graphiques essayent de se dépasser les unes les autres par des nouvelles fonctionnalités et où ce qu'il était impossible d'avoir hier est disponible le lendemain, cela semble complètement anachronique. Mais comme je l'ai déjà expliqué avec le projet RULE dans le numéro précédent [6], cela n'est vrai que pour une petite partie de l'humanité.

Dans beaucoup d'endroits, les gens ont besoin et utilisent pour une longue durée du matériel qui a déjà été déclaré obsolète. Cela est aussi souvent vrai pour des écoles de pays plus à l'aise financièrement.

Mais il y a un autre groupe qui tire aussi bénéfice de Twin, à qui les nouveaux logiciels ne s'adressent pas habituellement: les personnes aveugles et malvoyantes. Comme ils ont besoin d'utiliser des terminaux Braille, les interfaces utilisateurs graphiques ont peu d'intérêt pour eux.

Grâce à Twin, ils peuvent maintenant utiliser un environnement complet avec de multiples fenêtres et applications. En fait Massimiliano dit qu'il reçoit vraiment beaucoup de réponses de ce groupe d'utilisateurs, ce qui l'a surpris au début.

Techniquement parlant, le projet consiste en un serveur, appelé "twin" comme le projet. Ce serveur accepte les connexions des clients et crée ou modifie des fenêtres d'après leurs requêtes. Le serveur gère aussi dynamiquement les différents affichages et périphériques.

Twin supporte actuellement la console avec le support de la souris via gpm et tout terminal compatible termcap ou ncurses avec le support de la souris à travers le protocole de souris "xterm", si disponible. Mais il est aussi possible d'utiliser X11 au moyen d'un simple pilote X11 ou d'un pilote gfx graphiquement amélioré en sortie, de même qu'un autre serveur Twin sur une autre machine.

L'Interface Graphique Générale (GGI) est aussi supportée, mais comme elle ne gère toujours pas le clavier, elle ne convient sans doute pas à la plupart des applications.

Parmi les autres composants, la bibliothèque libTw, qui effectue la communication avec le serveur, ainsi que la libTT, qui fournit, en tant que bibliothèque d'outils, une abstraction entre les fonctions plus graphiquement orientées côté serveur et les fonctions plus orientées fenêtre/objet que préfère le client. La troisième bibliothèque est libTutf, une bibliothèque Unicode qui permet de transformer du texte en unicode et vice-versa. Cette bibliothèque sera sans doute rendue obsolète par l'utilisation de bibliothèques standards un jour futur lorsque les derniers points ouverts auront été traités.

Et enfin il y a les clients. Ils sont actuellement peu nombreux, dont deux sont contenus dans le serveur. Aussi bien le gestionnaire de fenêtre, qui peut être configuré par un fichier "~/.twinrc", que le simple terminal émulant la console ont été intégré dans le serveur pour des raisons techniques.

Les autres clients sont un émulateur de terminal supplémentaire (twterm), une invite de connexion similaire à xdm/gdm/kdm (twdm), un moniteur système (twsysmon), des outils pour (dés)enregistrer des affichages sur le serveur ainsi que d'autres petits clients qui sont plus adaptés au test qu'au vrai travail.

Le projet commença sous forme de programme DOS en 1993, mais les problèmes de multi-tâches le stoppèrent très vite. Il ne reprit de la vitesse que lorsque Massimiliano passa à GNU/Linux en 1999 et porta le projet sur sa nouvelle plate-forme.

Le projet est écrit entièrement en C, ce qui explique sa petite occupation mémoire - un serveur Twin nécessite habituellement moins de mémoire que le shell Bash. Et bien sûr Twin est un Logiciel Libre - ses licences sont la Licence Publique Générale de GNU (GPL) pour le serveur et les clients et la Licence Publique Générale Moindre (LGPL) pour les bibliothèques.

Pendant son temps libre (plutôt rare), Massimiliano continue le développement, et il a toujours de nombreuses idées. Il souhaite en premier compléter la bibliothèque d'outils et sa documentation; puis, plus d'éditeurs, de barres d'outils, de gestionnaires de fichiers, de navigateurs web, de programmes de courrier électronique et de programmes basés sur le tty devront être étendus pour l'utiliser.

Pour ces tâches, Massimiliano demande explicitement de relayer sa demande d'aide, parce qu'il y a encore beaucoup à faire. Il cherche par exemple des volontaires pour documenter la bibliothèque de communication, créer un économiseur d'écran libTW, compléter twdialog, l'équivalent Twin de Dialog, ou travailler sur twclip, un outil pour copier et coller les contenus d'un presse-papier.

Que ceux qui sont intéressés à participer consultent la liste de diffusion. Les utilisateurs trouveront Twin déjà présent par exemple dans la branche stable de la distribution Debian.

Paquetages C++

Le numéro continue avec quelques projets qui devraient rendre la vie des développeurs C++ plus facile et qui ont tous été publiés par Christian Holm aux environs du 1er décembre 2002 [7].

Lorsque les gens communiquent avec des ordinateurs, ils ont besoin de s'accorder sur un langage commun de communication. Tout particulièrement lorsque cette communication ne se déroule pas en temps réel ou est très complexe. Ce qui est par exemple le cas des langages de programmation ou des fichiers de configuration.

Le problème élémentaire est que les fonctions qui vérifient et lisent ou évaluent la syntaxe de ces langages peuvent facilement devenir très compliquées. Et lorsques les changements de définition ou de grammaire sont nécessaires, cela se traduit souvent en une très longue recherche de bugs.

De plus, la création de telles fonctions est de plus en plus un travail fastidieux, sans prouesses intellectuelles majeures, et que les programmeurs essayent d'esquiver.

Pour cette raison, on a créé des outils qui peuvent automatiser la traduction des règles d'une grammaire dans des fonctions qui peuvent lire cette grammaire. Bien sûr cela signifie que la définition de la grammaire elle-même a besoin d'être lisible par la machine. La forme probablement la plus courante d'une telle définition est la grammaire sans contexte "Analyse par anticipation de la gauche vers la droite" (Lookahead Left to Right Parsing - LALR).

L'un des meilleurs et des plus populaires analyseurs LALR est Bison [8], l'équivalent de Yacc pour le projet GNU. Yacc lui-même signifie "Yet Another Compiler-Compiler" (encore un autre compilateur de compilateur) et Bison a été délibérément gardé compatible avec Yacc afin de faciliter le passage de Yacc à Bison.

Flex [9] est une application travaillant souvent main dans la main avec Bison, et qui peut être utilisée pour générer des routines découpant une source d'entrée en expressions séparées, parce qu'elle automatise la génération de code source effectuant la recherche de motif. Flex est aussi l'équivalent GNU d'un autre programme - "Lex" dans le cas présent.

J'espère que cette courte introduction sera compréhensible pour les lecteurs peu techniciens; si vous souhaitez en apprendre plus, le web fournit quelques bons points d'entrée [10].

Yacc/Lex--

Bison [8] et Flex [9] créent traditionnellement du code source C. Si ce code est utilisé avec du C++, ils ont tendance à encombrer l'espace de nommage global; il n'y a pas non plus d'interfaces C++ disponibles.

Pour cette raison Christian Holm Christiansen a écrit un groupe de fichiers d'en-tête appelé Yacc/Lex--, qui permettent d'encapsuler la sortie C de Bison et Flex dans des classes C++. Les changements de spécification du lecteur/analyseur ont ici été volontairement limitées afin de laisser la plus grande flexibilité possible.

En fait Flex lui-même a la capacité de générer du code source C++, mais le résultat était trop peu flexible au goût de Christian et il ne correspondait pas bien aux classes d'analyseur générées par Bison. Aussi a-t-il voulu une encapsulation commune aux deux. C'est en fait cette asymétrie entre la sortie C de Bison et la sortie C++ de Flex qui l'a incité à démarrer ce projet.

Comparé à des projets comme bison++, qui a l'avantage d'avoir une sortie C++ directe, Christian trouve les avantages de sa méthode dans le fait d'être indépendant de l'implémentation interne employée dans Yacc/Lex. Aussi est-elle plus stable tout en respectant les changements dans les projets Yacc/Lex et n'est pas immédiatement affectée par leurs modifications internes.

Mais il y a aussi des clones de Yacc/Lex qui ont un comportement étrange et ne sont pas conformes à POSIX; leur utilisation peut poser problème, ce qui concerne spécialement ce projet.

C'est pourquoi Christian prévoit dans un futur proche de tester plus d'implémentations de Yacc/Lex et serait heureux de recevoir de l'aide dans ce domaine. De l'aide pour les tests sur d'autres plates-formes et avec des compilateurs différents serait aussi très bienvenue.

Readline--

La bibliothèque GNU Readline [11] fournit des fonctions pour intégrer une ligne de commande polyvalente dans d'autres projets.

Le mode vi et EMACS fait partie des fonctionnalités de GNU Readline, qui peut aussi sauvegarder les précédentes saisies, les recréer et permettre à nouveau de les modifier ou encore compléter le début des commandes précédemment saisies d'une façon similaire au shell csh.

Le projet Readline-- de Christian Holm Christensen permet aux programmeurs C++ d'accéder à la bibliothèque GNU Readline au moyen de classes C++. Sans surprise, les développeurs C++ qui cherchent à inclure une interface en ligne de commande dans leurs applications sont les principaux destinataires de ce projet.

Le logiciel fut commencé lorsque Christian lui-même eu besoin d'une interface en ligne de commande pour tester son analyseur C++, une tâche pendant laquelle il créa également le projet précédent.

Actuellement, le plus gros problème est que la bibliothèque n'est pas thread-safe, il faut donc la manipuler avec précaution dans les applications complexes. Les prochains objectifs de Christian pour son projet sont de résoudre cela et d'améliorer l'interface, parce que d'après lui, même si l'interface est complète, elle n'est pas intuitive dans certains cas.

Option--

Développé par Christian, Option-- est un analyseur C++ des options en ligne de commande, une bibliothèque qui permet aux programmes C++ de trouver et d'évaluer les options passées en ligne de commande au lancement du programme.

L'avantage majeur du projet comparé à d'autres projets similaires est que les options possibles sont représentées par des classes abstraites, ce qui rend le projet très flexible. Cependant, Option-- ne fonctionne que pour les arguments non ordonnés. Donc si l'utilisateur doit être contraint par la syntaxe d'utiliser seulement une certaine option à une certaine position dans la ligne de commande, Option-- n'est pas un bon choix.

Les premières lignes de ce projet ont été écrites par Christian, lorsque le projet principal avait besoin d'options en ligne de commande, même si ce projet opta plus tard pour une autre solution.

Mais lorsqu'il découvrit lui-même une demande pour quelque chose de similaire, Christian compléta le projet qui est maintenant devenu si stable qu'il y a peu d'objectifs autres que de nouveaux tests.

Thread--

Le dernier projet de Christian Holm Christensen dans ce numéro est Thread--, un projet pour utiliser les processus légers dans les programmes C++.

Comme le concept de "Threads" n'est habituellement pas connu de tous les lecteurs, une rapide explication est sans doute nécessaire.

Pour l'essentiel, tous les ordinateurs fonctionnent linéairement. Si on leur donne une tâche, ils vont l'accomplir étape par étape dans l'ordre donné avec toute leur capacité. Dans la plupart des cas, cela permet cependant de ne faire fonctionner qu'un programme à la fois.

Afin de permettre de travailler simultanément sur plusieurs programmes — le fameux multi-tâches — le noyau exécuté par l'ordinateur, le processeur, passe de tâche en tâche. Tour à tour, chacune de ces tâches est à nouveau exécutée d'une façon strictement linéaire, mais cette méthode permet de répartir la capacité des ordinateurs entre différents programmes.

Parce que les programmes et leurs tâches deviennent de plus en plus complexes, travailler seulement de façon strictement linéaire dans un programme est de plus en plus insatisfaisant. Les threads permettent de diviser les programmes en différents "threads d'exécution" qui peuvent à leur tour être exécutés linéairement pour résoudre différentes parties de la complexité du problème.

L'interaction et la communication entre ces différents threads ont bien sûr besoin d'être coordonnés et contrôlés, cette fonction pouvant être réalisée au moyen de Thread-- en C++.

À la différence de projets similaires comme Boost::Thread, ZThread ou Common C++, Thread-- ne disperse pas de macros préprocesseur tout au long du code source. À la place, les parties spécifiques de l'implémentation sont mises en Traits. Cela rend la bibliothèque assez petite et extensible.

À l'origine, Christian commença à travailler sur Thread-- afin de tester la sécurité relative aux threads de Readline-- et d'après lui il fonctionne bien sur GNU/Linux, mais les versions 2.95.x et moins de GCC posent problème, donc il est conseillé de vérifier la version de GCC.

Les autres problèmes sont les sémaphores sous Solaris et les threads sous Win32; il n'a pas pu le tester sur d'autres plates-formes. De l'aide pour ces problèmes ainsi que de l'information sur les autres plates-formes sont tout à fait bienvenues.

En voilà suffisamment pour les projets réalisés par Christian. Les lecteurs habitués du meilleur du GNOUveau monde auront remarqué que deux éléments d'information essentiels manquent encore. Les voici.

Premièrement, le langage de programmation de tous ces projets est le C++ avec les outils Auto de GNU et deuxièmement tous les projets sont disponibles comme Logiciels Libres sous la Licence Publique Générale Moindre de GNU (LGPL). Ils sont tous rassemblés sur la page C++ de Christian [7].

Le 6e programme cadre de l'UE

Comme indiqué dans le numéro 40 [12] du Brave GNU World, la FSF Europe a écrit une recommandation [14] pour l'Union Européenne le 30 avril 2002. Cette recommandation, qui a été soutenue par plus de 50 groupes à travers l'Europe, expliqua d'abord les avantages du Logiciel Libre pour l'Europe et les pays européens pour ensuite suggérer de donner au Logiciel Libre un statut prioritaire.

Le contexte de cette recommandation était le 6e programme cadre pour le financement de la Recherche et du Développement Européens, qui a été décidé au cours de l'année dernière. Ces programmes s'étalent sur quatre ans et contiennent la plupart des fonds européens pour la communauté scientifique. L'un de ses principaux objectifs est de favoriser l'économie et la société européennes à travers des fonds de recherche et de développement.

Bien que le 5e programme cadre contenait déjà des premières initiatives pour les Logiciels Libres, le 6e programme cadre n'avait initialement prévu aucun plan pour favoriser les Logiciels Libres. C'est pourquoi la FSF Europe a émis la recommandation mentionnée précédemment.

Le 17 décembre 2002, le 6e programme cadre était finalisé et il semble que la recommandation de faire des Logiciels Libres la forme préférée pour les propositions de projet ait été entendue. Le programme de travail "Information Société Technologies" (IST), qui traite du financement de l'informatique et des technologies de l'information, contient maintenant un énoncé afin d'introduire les projets de Logiciels Libres dans le processus d'évaluation.

Cela signifie effectivement que le budget total du programme de travail ITS, qui contient 1725 millions d'euros, a été ouvert aux Logiciels Libres. C'est la plus grande somme jamais allouée au financement des Logiciels Libres, même si ce n'est pas bien sûr exclusivement pour eux.

Afin d'encourager maintenant les entreprises, les universités et les centres de recherche à lancer des projets pour et avec des Logiciels Libres dans ce programme cadre, la FSF Europe a envoyé une requête [16] le 18 décembre 2002, dans laquelle elle demande à toutes les parties intéressées de la contacter.

Le but est de créer si possible un projet de Logiciel Libre pour chacun des domaines importants cités dans le 6e programme cadre, afin d'éviter que ces fonds soient dépensés pour des logiciels propriétaires. Parce que ces domaines comme la e-démocratie, la e-santé ou la e-sécurité pourraient avoir des impacts énormes sur notre futur et doivent être approchés par des Logiciels Libres.

Cela prend beaucoup de temps et d'effort pour monter ces projets, les organiser et les coordonner avec l'administration de Bruxelles, mais la FSF Europe fera de son mieux pour voir les projets de Logiciels Libres utiliser les possibilités qu'elle a mis en place.

TUX&GNU@school

Avant la fin de ce numéro, j'ai le plaisir d'indiquer aux lecteurs une autre remarquable chronique. Mario Fux, lui-même un lecteur de longue date du Brave GNU World, a commencé l'année dernière à écrire un bulletin similaire dédié plus particulièrement aux Logiciels Libres dans l'éducation.

À ce jour, il a terminé 5 numéros du "TUX&GNU@school" en allemand et en anglais, qui ont trouvé leur nouvelle maison sur la page d'accueil de la FSF Europe [17]. Je souhaite à Mario, ainsi qu'à Christian Selig et Kristian Rink, qui l'aident en tenant une forme de ligne éditoriale, le meilleur pour l'avenir et encourage spécialement — mais pas seulement — les lecteurs du monde de l'éducation à y jeter un œil.

Au mois prochain

C'est terminé pour ce mois-ci, comme d'habitude je vous demande des questions, des idées et des commentaires par courrier électronique [1].

Cette adresse est aussi celle où les propositions de sujets doivent être envoyées. Et Je voudrais encourager tous les auteurs à prendre le temps de le faire. Cela peut sembler louche, comme d'écrire de la documentation, mais c'est un bon moyen d'informer les autres sur votre projet.

Et s'il vous plaît ne vous demandez pas si votre projet est assez important. En fait je n'ai pas encore rencontrer de projet qui ne soit pas assez intéressant pour en écrire au moins quelques lignes intéressantes.

C'est tout pour aujourd'hui, jusqu'au mois prochain.

Info
[1] Idées, suggestions, commentaires à l'adresse du Brave GNU World <column@brave-gnu-world.org>
[2] Page d'accueil du projet GNU http://www.gnu.org/home.fr.html
[3] Page d'accueil du Brave GNU World de Georg http://brave-gnu-world.org/
[4] Initiative « GNU C'est Nous » http://www.gnu.org/brave-gnu-world/rungnu/rungnu.fr.html

[5] Page d'accueil de Twin http://linuz.sns.it/~max/twin/
[6] Brave GNU World - numéro 46 http://brave-gnu-world.org/issue-46.fr.html
[7] C++ Packages http://cholm.home.cern.ch/cholm/misc
[8] Page d'accueil de Bison http://www.gnu.org/software/bison/
[9] Page d'accueil de Flex http://www.gnu.org/software/flex/
[10] La page de Lex & Yacc http://dinosaur.compilertools.net
[11] GNU Readline library http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
[12] Brave GNU World - numéro 40 http://brave-gnu-world.org/issue-40.fr.html
[13] Free Software Foundation Europe http://fsfeurope.org
[14] Recommendation by the FSF Europe for the 6th FP http://fsfeurope.org/documents/fp6/recommendation.html
[15] 6th Framework Programme http://www.cordis.lu/fp6/
[16] Call for participation of the FSF Europe http://mailman.fsfeurope.org/pipermail/press-release/2002q4/000047.html
[17] TUX&GNU@school column http://fsfeurope.org/education/tgs/

[ Numéro précédent | >Page d'accueil du Brave GNU World | Numéro suivant ]

Retour au site GNU.

Envoyez vos questions sur GNU et la FSF à gnu@gnu.org.
Il y a aussi d'autres façons de contacter la FSF.

Envoyez vos commentaires sur "Brave GNU World" (anglais ou allemand) à column@gnu.org,
et les commentaires sur cette page à webmasters@www.gnu.org,
les autres questions à gnu@gnu.org.

Copyright (C) 2003 Georg C. F. Greve
Traduction [FR] : Valéry Beaud

Permission vous est donnée de distribuer des copies exactes de cette page tant que cette note de permission et le copyright apparaissent clairement.

Last modified: Mon Mar 03 23:23:50 Westeuropäische Normalzeit 2003