Introduction
Ayant débuté la programmation sous Windows comme la plupart des programmeurs, je me souviens de mes premières difficultées pour appréhender le développement sous GNU/Linux.
Ce texte a pour objectif de présenter les différents outils qui permettent le développement d’interfaces graphiques, en espérant que cela puisse vous guider.
Présentation
Linux a longtemps eu la réputation d’être un système complexe. Ce sentiment tend à disparaitre côté utilisateur grâce à des distributions comme Mandriva ou Ubuntu. Quid du développement ?
De part son inspiration Unixienne, Linux possède un catalogue extraordinaire d’outils en ligne de commande. En effet les Unix ont longtemps été cantonné côté serveur pour leur sécurité et fiabilité. Grâce à Linux et à des distributions orientées poste de travail, on retrouve de plus en plus d’Unix pour une utilisation cliente. Parmis les environnements de bureau (desktop), deux sortent largement du lot : GNOME et KDE.
En plus de proposer un gestionnaire de fenêtre, un panel (barre de tâche) et des outils de personnalisation, ces environnements proposent également des bibliothèques permettant de programmer simplement des interfaces graphiques qui pourront être intégrées dans l’environnement. Intégré entend une omogénisation visuelle de votre application avec les autres et des outils pour qu’elles puissent communiquer entre elles.
A quoi doit s’attendre un développeur lorsqu’il veut coder une interface graphique sous Linux ?
Tout d’abord il doit comprendre l’esprit qui anime les systèmes Unix. Depuis toujours les développeurs Unix préfèrent développer un logiciel dédié à une tâche et qui la fait bien. L’intérêt de ce principe c’est que l’on peut très simplement enchainer des commandes via des pipes ’’|””, exemple :ps ax | moreQuel que soit le logiciel que vous souhaitez développer, il y a de forte chance qu’il existe déjà sous Linux son pendant en ligne de commande (exemple, Gwget une interface graphique à wget). Cela veut dire qu’environ 80% du boulot est déjà fait ! Votre travail ne consiste donc à ne faire qu’une interface graphique à ce logiciel. Rien ne vous y oblige, mais vous y avez tout intérêt. Une rapide recherche via les outils de gestion de paquet de votre distribution (Synaptic pour les Debian/Ubuntu) vous renseignera sur un éventuel programme en ligne de commande, voir aussi Freshmeat. Ensuite vient le choix de la blibliothèque graphique.
En fonction de votre affinité avec le bureau GNOME ou KDE, vous choisirez Gtk+ ou Qt. GTK+ est codé en C et Qt en C++, mais rien de vous oblige à utiliser ces langages pour exploiter ces bibliothèques graphiques. En effet il existe des passerelles (binding) vers d’autres langages :
GTK+ et Qt sont des bibliothèques portables et un logiciel les utilisants fonctionnera aussi bien sur Linux, Mac OsX et Windows. Si vous souhaitez que votre programme ne tourne que sous Linux vous pouvez alors utilisez des bibliothèques supplémentaire fournies par GNOME et KDE, qui vous faciliteront le développement et l’intégration avec ces bureaux :
Malgré le fait d’utiliser des bibliothèques différentes, les 2 projets travaillent ensemble pour unifier leurs fonctionnalités. Ainsi grâce au projet Freedesktop, lorsque par exemple, vous utilisez les fonctions founies par GNOME pour afficher une icone dans la zone de notification du panel, si votre programme est lancé sous KDE il affichera de même son icone dans le panel KDE.
Voici rapidement le décors présenté. Ce qui vous intéresse maintenant c’est de connaître les possibilités offertes sous Linux pour développer votre application. De plus il y a des chances pour que vous n’ayez pas envie de développer en C ou C++, et cela se comprend se sont des langages bas niveau, en 2006 vous voulez vous simplifier la vie ! :) Sachez qu’il existe au moins 4 langages de haut niveau vous permettant de développer des applications multimédias, réseaux, base de données, IHM, café, ... :
Tout ce qui est dit ici est possible via ces 4 langages et vous trouverez certainement dans votre distribution ou sur Internet des applications le démontrant. Je ne connais pas assez ces langages pour pouvoir les comparer, mais je pense qu’ils sont tous équivalent. Sachez que Python est une référence dans le développement en général et également le développement d’interface graphique. Perl est utilisé massivement par les administrateur système et la société Mandriva l’utilise pour développer leurs outils graphiques. Mono est un clone libre de .NET, malgré sa jeunesse il est en train de se répendre à toute vitesse. Enfin Ruby se répend également très rapidement, notamment via Ruby on Rails. Ces 4 langages permettent aussi bien le développement de scripts, pages web, que d’interfaces graphiques via des bibliothèques associées, et ils sont multi plates-formes. Personnellement j’utilise Ruby et GNOME.
Les outils
Vous êtes habitué aux interfaces de développement simples et intégrés, en voici vous permettant de programmer sous Linux :
Anjuta
Anjuta est un environnement de développement et de débuggage complet. Il vous permet de développer aussi bien des programmes en ligne de commande que des programmes graphiques en Gtk+. Il gère des projets, possède un assistant, intègre un débugeur (gdb) et Glade.
Glade
Glade vous permet de construire à la souris votre IHM en GTK+. Fonctionne sur Linux et Windows
Kdevelop
Kdevelop le pendant de Anjuta pour l’environnement KDE.
Qt Designer
QtDesigner vous permet de construire à la souris votre IHM en Qt.
Emacs
Si vous êtes habitué à Emacs voici un navigateur de code : ECB
Monodevelop
Monodevelop est l’environnement de développement dédié à Mono, lui même codé en GTK#.
Boa Constructor
Boa Constructor est un IDE dédié à Python.
GPS
GPS est un IDE dédié au C ou au langage ADA.
Devhelp
Devhelp est un complément indispensable aux IDE. Il permet de consulter via une interface graphique différentes documentations tel que les API (GTK+, GLIB, SDL, ...), ou des outils (GCC. Emacs, autotools, make, ...). Il intègre un navigateur html ce qui permet l’utilisation des liens.
Monodoc-browser
Idem à Devhelp mais dédié aux documentations Mono.
Les bibliothèques
Comme on l’a vu pour les biblitohèques graphique il en existe également plusieurs dans chaque domaine. Je présente ici les plus robustes et essentiellement celles orientées GNOME. Ne connaissant pas assez KDE je vous laisser voir les sites de Trolltech et KDE.
Base de données
GNOME-DB est la bibliothèque unifiant les accès à une multitude de base de données : PostgreSQL, Mysql, Sqlite, Oracle, DB2, ... GNOME-DB propose plusieurs Widget à intégrer dans votre interface graphique et il encapsule la libgda qui est la bibliothèque d’abstraction aux sgbd. Si vous ne souhaitez pas faire une application GNOME mais simplement Gtk+ utilisez alors directement la libgda.
Multimédia
Gstreamer vous permet la lecture et l’encodage de fichiers vidéos et audio. Elle gère plusieurs codecs vidéo comme, certains divx, mov, mpeg, theora et audio comme le wav, mp3, ogg, flac, ...
Multimédia orienté jeux vidéos
La libSDL est une bibliothèque multi-plateforme qui propose un ensemble de fonctionnalités semblables à DirectX sous Windows et fourni un accès à OpenGL :
- Video
- Evènements (clavier, souris, joystick, ...)
- Audio
- CD-ROM audio
- Threads
- Timers
- Endian independence
Fichiers
GNOME-vfs est une bibliothèque d’accès aux fichiers. Elle gère l’accès via les protocoles samba, ftp, sftp, http et bien sûr locaux.
libglade
Si Glade vous permet de dessiner votre interface, la libglade vous permet de l’afficher en lisant le fichier xml de Glade. De plus elle gère le lien entre le nom des callback définie dans Glade avec la fonction de callback qui est dans votre code.
Les langages de haut niveau
Ne connaissant que Ruby je ne donne ici que des liens le concernant.
Ruby
Langage script completement orienté objet. Il est multiplateforme et il existe des passerelles pour utiliser Gtk+ ou Qt.
- Ruby
- RubyFR.org
- La bibliothèque standard
- Un livre
- La documentation pour utiliser la passerelle Ruby-GNOME2
Ruby-GNOME2
Ruby-GNOME2 est la passerelle (binding) Ruby vers l’API de GTK+ et GNOME. Elle fonctionne également sur windows.
exemples de programmes l’utilisant : alexandria, geekast, la liste (encore petite) sur Rubyforge.
La même chose pour Qt pour ceux qui préfèrent KDE : QtRuby
Python
Si vous souhaitez utiliser python pour vos IHM, voir pygtk.
Les sites d’aide et tutoriaux
Gtk-fr
GTK-fr contient plusieurs articles pour apprendre à utiliser Gtk+. Il y a également un forum.
PROG Qt
PROG.Qt idem pour Qt.
libglade
Une petite introduction de ma part sur la libglade et le C. La version en Ruby-GNOME2
RubyGtk+
Une introduction à Ruby/GTK+
RubyFR.org
Le site francophone RubyFR.org dédié à Ruby.
AFPY
Le site francophone AFPY dédié à Python.
GNOME France
gnomefr le site des utilisateurs et développeurs francophone de GNOME.
KDE France
KDE-france le site des utilisateurs et développeurs francophone de KDE.
Installation rapide
Vous êtes intéressé par ces technologies et vous souhaitez les tester. Les installations sont très simple sur les distributions Debian (passez en root et n’utilisez pas sudo pour effectuer ces commandes) et Ubuntu.
- perl :
sudo apt-get install libgtk2-perl libgnome2-perl libgtk2-gladexml-perl - python :
sudo apt-get install python-gnome2 - ruby :
sudo apt-get install ruby-gnome2 - mono :
sudo apt-get install mono - les environnement de développement :
sudo apt-get install anjuta kdevelop emacs21 ruby-elisp python-mode devhelp-books monodevelop monodoc-browser
Je suis motivé pour me lancer mais je ne sais pas quoi faire
Il n’y a pas de secret pour aboutir un projet. Par expérience je vous affirme que celui qui aboutira est celui qui vous manque. Cherchez donc ce qui vous manque sous Linux. Regardez les shareware qui vous plaisent sous Windows et adaptez les sur Linux ! Cela a été la démarche de RMS, Linus et de tous les contributeurs de logiciels libres. Cela fonctionnera également pour vous.
Conclusion
Si vous utilisez une bonne distribution Linux vous pourrez installer, s’ils ne le sont pas déjà, ces langages et toutes ces bibliothèques très facilement. Le plus gros travail consistera à les utiliser ensemble. Le plus simple est de vous faire des classes utilisant ces bibliothèques.
A suivre
J’espère que cette petite présentation du développement d’IHM sous Linux vous a permis de vous éclairer et orienter, et pour finir je ne dirais qu’une chose : Messieurs les développeurs au long court rejoignez nous !





