De nos jours, les programmes affichant une interface graphique permettant une interaction entre l'utilisateur et les fonctionnalités le font par le biais d'une bibliothèque de fenêtrage. Il en existe un grand nombre, toutes différentes mais remplissant un rôle similaire. On peut notamment citer
wxWidgets,
Qt,
Tk,
GTK ou la partie GUI de l'
API Win32. Parmi toutes ces bibliothèques, deux se détachent des autres : il s'agit de Qt et de GTK. En effet, ces deux bibliothèques Open Source (sous licence GPL pour la première, et LGPL pour la deuxième) sont très utilisées dans le monde du libre. Elles permettent de créer facilement des fenêtres dans vos programmes libres, et permettent de faire cela de manière
portable (c'est-à-dire que le même code source fonctionnera sous Windows, Linux ou Mac OS).
L'inconvénient de cette multitude de bibliothèques de fenêtrage est simple : tout d'abord, pour l'utilisateur, c'est un nombre assez important de choses à installer, qui souvent prennent en plus de la place sur le disque dur. Ensuite, le style des applications (comment sont affichés les boutons, les menus, etc.) est différent selon les bibliothèques. Finalement, si deux applications utilisent la même bibliothèque, les paramètres de cette dernière ne sont mis en mémoire qu'une seule fois. Inversement, plus on utilise de bibliothèques différentes, plus la mémoire vive est sollicitée.
L'un des logiciels bien connu programmé avec la bibliothèque GTK est le célèbre navigateur libre
Firefox. Cependant, puisque ce navigateur n'était disponible qu'avec la bibliothèque GTK jusqu'à maintenant, il était plus ou moins bien intégré à l'environnement KDE, qui utilise Qt (dont bluestorm a déjà parlé dans
une news il y a quelques mois, et dont j'ai également parlé à l'occasion de
la sortie de la version 4.1). De plus,
Nokia, nouvelle société en charge de Qt, était intéressée par le fait de pouvoir utiliser Firefox sur ses téléphones mobiles ou PDA basés sur la bibliothèque Qt.
C'est ainsi que les développeurs de Nokia et du projet Mozilla ont travaillé conjointement à la réalisation d'une version du moteur Mozilla (utilisé notamment par Firefox, Thunderbird et XULRunner) utilisant Qt plutôt que GTK. À l'occasion de l'
Akademy 2008 (organisée par le projet KDE), des résultats concrets de cette version ont été montrés au grand public, commençant maintenant à être utilisable.
Le travail à réaliser pour Nokia
Tout d'abord, un navigateur Web comme Firefox est divisé en deux parties bien distinctes au niveau de l'interface :
- Le moteur de rendu Web, nommé Gecko chez Firefox, qui traduit le code XHTML d'une page web en image affichée dans le navigateur. C'est la partie la plus conséquente d'un navigateur web, et également la plus complexe pour les développeurs.
- Le navigateur en tant que tel : les menus, les barres d'outils, les boutons et tout le reste. Dans Firefox (comme dans les autres programmes utilisant le moteur de Mozilla), toute cette partie est programmée en XUL (un dialecte de XML) et en JavaScript. Cela permet aux extensions de modifier l'interface du navigateur. Ce XUL est ensuite traduit en éléments graphiques puis affiché à l'écran.
Le moteur de rendu Web, Gecko, utilise en interne la bibliothèque de dessin vectoriel
Cairo (du dessin vectoriel permet de créer des graphismes redimensionnables à l'infini sans perte de précision) pour créer des images à afficher. Le travail des développeurs a tout simplement été de programmer un
backend Cairo utilisant la classe QPainter de Qt pour dessiner dans un élément graphique en utilisant Qt. L'affichage d'éléments graphiques dans la page Web (comme par exemple les boutons, les textarea ou les champs d'édition) sont gérés très facilement avec Qt, permettant de dessiner très facilement ce genre de choses dans une surface de dessin.
Ce travail sur Cairo est actuellement terminé et les développeurs sont en train de demander son intégration officielle aux développeurs de Cairo pour en faciliter la tâche (l'exemple de
swfdec, le lecteur Flash libre, a notamment été avancé par Jonathan Riddell).
Le travail sur XUL et le support des thèmes est actuellement encore en cours de travail. Ainsi, la version actuelle de Firefox utilisant Qt est encore dépendante de GTK pour tout l'aspect extérieur du navigateur, mais cela ne devrait plus durer longtemps (comme le dit Oleg Romaxa, de Nokia, «
it works but doesn't currently draw anything »).
L'intérêt d'un Firefox utilisant Qt
L'idée de créer une version de Firefox utilisant Qt n'a probablement pas été mise en oeuvre par Nokia uniquement dans l'intérêt commun des utilisateurs. Il est légitime de se poser des questions sur le pourquoi de ce travail, surtout en sachant que
QtWebKit, moteur Web intégré à Qt depuis les dernières versions, réalise également le travail de Gecko et aurait demandé moins de travail pour les développeurs de Nokia.
La raison avancée par la plupart des gens est simple : Nokia réalise la plupart de ses affaires dans le marché du téléphone mobile, où la technologie Qt devient de plus en plus présente (notamment avec le projet Qtopia, permettant l'intégration de Qt dans des systèmes embarqués). Un navigateur Web devient maintenant le standard dans ce genre d'appareils. Cependant, Nokia n'a pas utilisé Webkit pour une raison très simple : ce projet est très lié à
Apple, qui l'utilise dans son navigateur Web
Safari. Or l'
iPhone d'Apple est l'un des principaux concurrents de Nokia sur le marché du téléphone portable. Il est donc important pour Nokia d'utiliser un autre moteur de navigateur Web, en l'occurrence Gecko, celui de Firefox.
Ce projet présente aussi un avantage considérable pour les distributions Linux basées sur l'environnement KDE, qui sont souvent obligées de fournir les bibliothèques GTK de base pour permettre aux utilisateurs d'utiliser Firefox. Un Firefox basé sur Qt permettra à ces gens de fournir une version de Firefox tout à fait intégrée dans l'environnement et sans s'encombrer d'une bibliothèque supplémentaire.
Liens externes
Le travail entamé par Nokia sur cette branche de Mozilla est tout simplement une bénédiction pour les utilisateurs d’environnements basés sur Qt tels que certains téléphones portables ou tout simplement KDE. Il permettra ainsi d’avoir un système uniforme et plus léger, tout en utilisant le navigateur Firefox, que l’on a plus besoin de présenter.
Merci aux quelques personnes de #sdz qui se sont fait un plaisir de me relire (elles se reconnaitront).
Merci également au Chapelier Toqué pour la zCorrection de cette news.