XUL est-il encore le bon choix pour une application web riche ?
Par Clochix le mardi 16 septembre 2008, 23:58 - Lézarderies - Lien permanent
Celles et ceux qui suivent un peu ce journal savent que je développe depuis quelques temps une application web[1] dont l'interface utilise la technologie XUL. Le développement n'avance plus depuis quelques mois parce que je me suis lancé dans une itération de refactoring dont je n'arrive pas à me sortir, entre autre parce que quitte à effacer et ré-écrire des bouts de code, je ne cesse d'élargir le périmètre des travaux, et que j'ai fini par me demander s'il était encore judicieux de continuer à utiliser XUL, ou si je ne devais pas recommencer la partie client en pur HTML. Bref, je suis en plein doute, ce qui explique que je perde mes soirées à traîner sur des blogs et à m'épancher ici au lieu de coder[2].
Notes
[1] qui vise, soyons modeste, à être un client web universel. Pour l'instant des clients de messagerie électronique (POP et IMAP), instantanée (Jabber) et de base de données sont à peu près utilisables
[2] après mes doutes sur mon envie de continuer à faire du web, on pourrait penser que je suis en pleine crise de la quarantaine. Mais pas du tout, puisque j'ai toujours 10 ans
Quelques éléments de ma réflexion actuelle:
- Google prouve tous les jours avec le succès de ses applications bureautiques en ligne (en tête desquelles GMail) que HTML est largement suffisant pour créer des interfaces qui offrent une expérience utilisateur équivalente à celle d'applications en "client lourd". Nul besoin de passer par Flash ou Silverlight;
- après des années d'hésitations, le successeur de HTML 4 sera finalement probablement HTML 5, dont des parties du brouillon de la spécification commencent à être intégrées à Gecko et Webkit. Or le A de WHATWG est l'abréviation d'"application". Une importante partie des évolutions de HTML 5 concernent justement les applications web. Bien sûr, XUL profitera des évolutions de Gecko pour intégrer HTML 5 (la plus flagrante à ce jour est je crois le stockage local), mais en tant que langage de description d'interface web, il offrira de moins en moins de fonctionnalités le plaçant au dessus de HTML;
- il existe de plus en plus de frameworks clients ou serveurs qui proposent des composants d'interface riches en pur HTML. Je suis pas exemple très impressionné par qooxdoo : allez voir les démos, je trouve qu'elles n'ont rien à envier à une appli réalisée en XUL;
- le lancement par Google de son propre navigateur était annoncé depuis des années. Google ayant embauché un certain nombre de développeurs de Gecko, j'espérais que ce navigateur serait basé sur Gecko, qui s'imposerait, via sa présence dans 2 des 3 principales plate-forme d'accès au web, comme la principale alternative à IE. C'est finalement Webkit qui a gagné. Les applications XUL resteront donc cantonnées à Firefox. Et quel que soit le bien que je pense de Firefox, c'est toujours embêtant de dépendre d'un seul logiciel, sans alternative;
- XULRunner était l'occasion de déployer des applications web écrites en XUL comme des applications de bureau classique. Mais aujourd'hui Prism ou G-Chrome permettent de le faire pour n'importe quelle application HTML;
- les applications web ne font malheureusement pas partie des priorités de la Fondation Mozilla. C'est tout à fait compréhensible, elles ne représentent qu'une petite partie des usages possibles du web, et la fondation a pour but de promouvoir un réseau ouvert et accessible, et non juste un écosystème pour des applications. En ce sens, XULRunner est un peu délaissé en tant que plate-forme[1], et la fondation n'a pas spécialement cherché à diffuser largement ses technologies propres, comme XUL, par exemple en essayent de les faire normaliser;
- et c'est finalement là ce qui m'embête le plus. XUL n'est pas réellement "ouvert". C'est une technologie contrôlée par Mozilla, qui la fait évoluer en fonction de ses besoins, mais ne cherche même plus à la spécifier. La version 1.0 de la spécification est obsolète depuis longtemps, et si les fonctionnalités qui sont régulièrement ajoutées à XUL sont documentées, je n'ai trouvé aucune trace de leur spécification, juste quelques pages de discussion. XUL ne peut donc pas vraiment être considéré aujourd'hui comme un élément d'un web ouvert.
Tout cela n'enlève rien aux nombreuses qualités de XUL, mais je me demande si c'est encore un choix pertinent aujourd'hui pour créer des applications en ligne.
J'attends avec impatience vos arguments, et j'espère qu'on pourra en
discuter de vive voix samedi au MAOW. (car je n'ai pas du tout l'intention
d'abandonner l'écosystème Gecko, bien au contraire, il m'offre une occasion de
me remettre à des langages un peu plus exigeants comme C++, après des années de
p(hp)aresse, et là pour le coup c'est un troll
)
Notes
[1] depuis sa version 3, Firefox n'est "plus qu'"une application s'exécutant au dessus de XULRunner, mais ça n'a pas du tout été mis en avant dans la communication, et le déploiement massif de XULRunner que cela a entraîné n'a pour l'instant pas été suivi d'effets
Commentaires
XUL a quand même beaucoup d'avantages sur l'utilisation de HTML pour faire des interfaces : sa légèreté, et la rapidité de mise en application. Tu ne me fera pas croire que HTML, avec les kilos octets de javascript qu'il faut télécharger pour faire un minimum de chose, est plus simple.
Autre chose :
- l'accessibilité : les élements XUL sont naturellement accessibles, alors qu'en HTML, il faut ajouter les attributs ARIA pour bien faire comprendre que tel element HTML correspond à tel type d'élement d'interface. Et ça, peu de framework js/html le font
- rien à faire pour avoir le "look" de la plateforme de l'utilisateur. Va donc, en HTML, fournir une appli qui à la fois, à le look de windows sous windows, de mac sous mac, et de gnome sous linux... Bon nombre d'utilisateurs sont sensibles à ce genre de chose. faut voir les nombreuses plaintes des utilisateurs de Firefox avant sa version 3.0 où l'intégration n'était pas vraiment supere
Enfin, les avançées de XUL lui fait garder une longueur d'avance :
- le système de template : bye bye RDF, on peut fournir maintenant du XML classique comme source de donnée (FF 3.0).
- les nouveaux widgets de la version 3.0
- le drag and drop dans FF 3.1
- et j'en passe...
En tout cas, je ne vois pas ce que vient faire cette question du choix de XUL dans ta refactorisation et le fait que tu "ne cesse d'élargir le périmètre des travaux". Pour ce problème, c'est bien plus une histoire d'organisation de ton projet que de choix technologique. Surtout qu'à mon avis, quand on fait de la refactorisation, XUL est bien plus adapté car plus simple à mettre en oeuvre.
>Google prouve tous les jours avec le succès de ses applications bureautiques en ligne (en tête desquelles GMail) que HTML est largement suffisant
Tu es aller voir la gueule du code source ? C'est d'une complexité hallucinante. HTML n'est toujours pas fait pour faire des interfaces dignes de ce nom de manière simple.
>Mais aujourd'hui Prism ou G-Chrome permettent de le faire pour n'importe quelle application HTML;
Prism ou G-Chrome n'offre qu'une fonctionnalité qui permette de lancer le navigateur sans interface. Aucun rapport avec le fait que l'application distante soit en XUL ou HTML, et surtout rien à voir avec XulRunner. Dans les applications lancées par Prism/Chrome, tu n'a pas du tout les même possibilité qu'une appli desktop lancée par XUL : tu as toujours autant de restrictions car cela reste des applis distantes.
>C'est une technologie contrôlée par Mozilla
Elle est contrôlée par les contributeurs de Mozilla. Nuance. Si un développeur trouve qu'il manque des trucs dans XUL que ce soit pour le XUL distant ou le XUL chrome, il a toujours le moyen de proposer des patchs.
> en tant que langage de description d'interface web, il offrira de moins en moins de fonctionnalités le plaçant au dessus de HTML;
Pas d'accord avec ça. HTML 5 est loin d'avoir le même nombre d'élèments correspondant à des composants d'interface.
Pour moi, il y a 2 principaux facteurs :
1. la limitation ou non aux navigateurs Gecko
2. la taille et la complexité du code sans XUL pour faire de chouettes interfaces
Une fois que tu as les idées claires sur ces points, le choix est (presque) fait...
Au passage, j'aime bien aussi ExtJS [1] pour faire des interfaces sympas
[1] http://extjs.com/
Un projet pas ou mal documenté est un projet qui n'existe pas®.
Le reste est avant tout de la littérature. C'est pour ça que je me suis personnellement écarté de XUL pour ne produire des applications que sur une base standardisée, ce qui est effectivement le cas pour html, css et (java|ecma)script (même si les implémentations diffèrent d'une plateforme à l'autre, mais c'est très difficilement évitable). Si XUL avait été standardisé et adopté par l'industrie, je ferai certainement du XUL tous les jours, car c'est pourtant ma foi une technologie intéressante et puissante.
Entre HTML et XUL, je dirais que ça dépends ce que tu veux faire, et ce que tu peux faire!
Pour un client j'ai du faire une interface tout en HTML, car il trouve ça plus sympa qu'une interface classique (menubar, toolbar, etc). Par contre j'ai embarqué le tout dans une application XULRunner pour pouvoir exploité mes propres composants dans son interface HTML!
L'année dernière Benjamin Smedberg lors du Developers Day avait émis l'idée de remplacer le XUL par HTML comme plateforme de développement. J'étais sceptiques, mais aujourd'hui je comprends mieux l'intérêt de faire des évolutions via le HTML : le nombre d'utilisateurs, et développeurs, potentiel est bien plus élevé avec le HTML qu'avec le XUL. Ce qui n'enlève rien à l'intérêt du XUL au contraire. L'API Drag&Drop, les éléments audio et video, le CSS3, et autres sont directement exploitables en XUL, ce qui n'est pas encore le cas sur le Web en général car IE est toujours dominant.
Enfin si tu veux faire du dev HTML, je te conseille aussi extjs, c'est pas mal, et quand on a l'habitude du XUL, c'est assez facile à prendre en main.
XUL et HTML sont assez similaires, deux langages de description d'interface basés sur XML. L'avantage de XUL est que de nombreux composants n'ont pas à être chargés, parce qu'ils sont déjà dans le chrome. Mais la taille du chargement initial n'est pas vraiment un argument. Une appli web, je ne la charge qu'une fois par jour quand j'ouvre mon navigateur le matin. Et même si je dois recharger la page, les bibliothèques JavaScript sont mises en cache, donc au final la différence compte peu.
J'ai commencé à m'intéresser à ARIA, mais malheureusement sans avoir vraiment le temps d'entrer dedans. Ca mériterait de faire l'objet d'un atelier dans un prochain W3Café ou Mozilla Workshop, car la question de l'accessibilité des applis riches devient de plus en plus pressante AMHA. Mon impression actuelle est que la plupart des interfaces riches sont peu accessibles, quelle que soit la techno, mais il faudrait que je trouve le temps de lire tous les documents sur le sujet sur MDC.
Euh, mais le look de XUL n'est qu'une question de CSS, donc il suffit de détecter l'OS côté serveur et de balancer les CSS qui vont bien. De plus, la meilleure intégration de FF3 avec le look de l'OS est en partie dûe à l'implémentation de [-moz-appearance|http://developer.mozilla.org/fr/CSS/-moz-appearance]. Donc rien n'empêche de faire du HTML looké aux couleurs de l'OS.
Yep, mais on voit aussi arriver du templating en JavaScript (cf de fréquents articles sur Ajaxian par exemple). Et il me semble que l'utilisation du mécanisme de templating hors du chrome était soumis à quelques restrictions, du moins il y a longtemps, c'est pour cela que je construisais mes arbres à la main. Ca a peut-être changé, je ne suis pas à jour sur le sujet.
"- les nouveaux widgets de la version 3.0"
Oui, mais les frameworks comme qooxdoo ou [ZK|http://www.zkoss.org/|en] qu'on vient de me signaler fournissent aussi de nombreux widgets.
"- le drag and drop dans FF 3.1"
possible depuis longtemps en HTML "classique", par exemple en utilisant jquery. Ca m'a d'ailleurs refroidi de voir que j'arrivais à faire certaines manipulations d'interface plus facilement en HTML avec jquery qu'en XUL :-S
"En tout cas, je ne vois pas ce que vient faire cette question du choix de XUL dans ta refactorisation et le fait que tu "ne cesse d'élargir le périmètre des travaux". Pour ce problème, c'est bien plus une histoire d'organisation de ton projet que de choix technologique. Surtout qu'à mon avis, quand on fait de la refactorisation, XUL est bien plus adapté car plus simple à mettre en oeuvre."
En fait je suis en train de nettoyer le code en créant des composants pour l'affichage. Et je me demande si je continue à utiliser XUL pour ces composants, ou si je passe à HTML (mais je pars du pré-supposé que XBL sera bientôt supporté par Webkit, donc que je peux l'utiliser)
"Tu es aller voir la gueule du code source ? C'est d'une complexité hallucinante. HTML n'est toujours pas fait pour faire des interfaces dignes de ce nom de manière simple."
C'est du GWT donc codé en Java sur le serveur et généré automatiquement. Je suis d'accord que le code généré est très laid, mais les utilisateurs s'en foutent, ça fonctionne plutôt bien, et les dev codent avec des langages de plus haut niveau. Au final, on a un résultat utilisable et compatible avec la majorité des navigateurs, à la différence de XUL.
"Prism ou G-Chrome n'offre qu'une fonctionnalité qui permette de lancer le navigateur sans interface. Aucun rapport avec le fait que l'application distante soit en XUL ou HTML, et surtout rien à voir avec XulRunner. Dans les applications lancées par Prism/Chrome, tu n'a pas du tout les même possibilité qu'une appli desktop lancée par XUL : tu as toujours autant de restrictions car cela reste des applis distantes."
Oui, mais encore une fois je me pose la question uniquement pour les applis web, c'est à dire des applis utilisables de nimporte où à partir d'un simple navigateur sans rien installer. Prism renforce encore l'intérêt de ces applis en permettant de les utiliser dans en "standalone" quand je suis sur mon poste. Pour d'autres types d'applications, je vois tout à fait l'utilité de XUL et de XULRunner. Mais pour ces applis il est plus en concurrence avec Qt ou Gtk (cela dit, XULRunner comme AIR permettent aussi de faire de applis desktop en "simple" HTML)
Oui, mais la question de la prise de décision n'est pas très claire (et le site de la Fondation ne contient guère d'infos sur le sujet). J'ai justement vu passer cette nuit une présentation de John Lilly sur les mécanismes de décision au sein du projet, je vais la lire dès que j'aurai 5 minutes
>> en tant que langage de description d'interface web, il offrira de moins en moins de fonctionnalités le plaçant au dessus de HTML;
>Pas d'accord avec ça. HTML 5 est loin d'avoir le même nombre d'élèments correspondant à des composants d'interface.
Oui, je me suis trompé, c'est plus sur le backend que sur l'interface même que HTML 5 va proposer des avancées pour les applis web.
Pour moi, l'intérêt de XUL est surtout le temps de développement. Maintenant puisqu'on parle d'applications en ligne, il n'y a malheureusement pas de solution parfaite. Chacun décide en fonction de ce qui lui tient le plus à coeur. En fait, je ne crois pas qu'on puisse vraiment comparer...
> XUL et HTML sont assez similaires, deux langages de description d'interface basés sur XML
grrr. HTML n'est PAS un langage de description d'interface, mais un langage de structuration de document. ENORME NUANCE. C'est vrai que HTML5 mélange allégrement tout ça, et ça en devient un langage complètement fourre-tout imbitique (lis la spéc, tu comprendra).
>la question de l'accessibilité des applis riches devient de plus en plus pressante AMHA
D'où l'avantage de XUL : c'est natif, tu n'as rien à faire.
>possible depuis longtemps en HTML "classique", par exemple en utilisant jquery.
pardon ? les api de drag and drop présentes dans les bibliothèques existantes, c'est du FAUX drag'n drop. Aucune intéraction avec des applis tierces. le code est lourdingue quand on veut simuler du drag'n drop (et si il y a des apis dans jquery et cie, c'est pour cacher cette misère). Moi je parle de la nouvelle api drag'n drop HTML5 présente aussi dans XUL (et plus simple à utiliser que les composants XPcom de drag'n'drop qu'on utilisait avant) http://ljouanneau.com/blog/2008/08/... . Cette API permet de drag'n droper vers où à partir d'autres appli, avec une API plus clair et plus simple que de manipuler tout les évenements mouse* et cie.
>Oui, mais encore une fois je me pose la question uniquement pour les applis web,
oui et ? une appli web peut être en XUL ou HTML, je vois toujours pas le rapport avec le choix de XUL ou pas.
>Oui, mais la question de la prise de décision n'est pas très claire
C'est pourtant clair : il suffit de proposer un patch correct, avec une explication claire du pourquoi du comment. Point final.
Autre chose qu'a XUL et pas HTML : le modèle de boîte, largement supérieur à celui de HTML (va donc aligner proprement 2 div cote à cote, sans avoir à aligner 15 styles css)...
Je suis d'accord, HTML n'a pas été conçu pour créer des IHM, ni même des sites vitrines où le contenu est secondaire. Mais comme on n'avait que ça et que c'est le marché qui décide, il a été tordu pour lui faire faire autre chose que ce pour quoi il était prévu. Ca a pris beaucoup de temps mais il s'est finalement montré assez souple pour permettre de faire n'importe quoi (dans les deux sens du terme). Et malheureusement, aujourd'hui encore, on n'a que ça. C'est pour cela que je regrette que Mozilla n'ait pas cherché à normaliser XUL, qui est clairement beaucoup plus adapté que HTML pour créer des interface. Je regrette qu'on ne puisse avoir XUL pour construire des IHM, et XHTML 2 pour décrire les contenus structurés. Malheureusement aujourd'hui c'est HTML 5 qui est en cours d'implémentation dans les principaux navigateurs. Et si on veut s'adresser à un maximum d'utilisateurs c'est vers lui qu'il faut se tourner, même si techniquement ce n'est pas le meilleur choix.
Ok, on ne parle pas de la même chose. Je pensais au drag'n'drop à l'intérieur même de l'appli, qui est limité en XUL quand on n'est pas dans le chrome. Mais le drag'n'drop dont tu parles est, comme tu le dis, une spécification HTML 5, également utilisable en XUL. Donc ce n'est pas un avantage de XUL sur HTML 5
C'est toute la question: quelle techno choisir pour développer une appli web: XUL ou HTML ?
Je ne connais pas encore assez les processus de décision du projet, c'est pour cela que ça me parait encore un peu obscur. Comment sont décidées les évolutions de XUL ? Via des discussions ? des tickets dans Bugzilla ? Y a-t-il une direction générale, ou est-ce que ça avance au coup par coup ? Il me semblait avoir entendu parler d'un projet de spécification XUL 2.0, mais je ne trouve pas beaucoup d'information sur le sujet
Effectivement, c'est d'ailleurs la seule référence à XUL que j'ai trouvée dans le wiki de webkit: une tentative d'implémentation du modèle de boîte de XUL.
>C'est pour cela que je regrette que Mozilla n'ait pas cherché à normaliser XUL,
Il y a eu un groupe de travail au W3C pour normaliser un XUL like. Malheureusement, ça n'a pas abouti, un consensus n'a pas été trouvé, à cause semble-t-il de trop de lobbying de toute part (entre Microsoft qui veut imposer son XAML, Adobe son Flex, etc, et les autres qui veulent faire un truc fourre tout nommé HTML5...)
>quelle techno choisir pour développer une appli web: XUL ou HTML ?
Celle qui correspond à tes besoins et à tes contraintes. C'est sûr que si tu veux faire une appli accessible à tout les internautes... Mais si c'est pour l'admin d'une appli, ou une appli qui de toute façon n'a pas à être accessible par moniseur lambda (genre un truc comme phpmyadmin), ou encore un intranet où tu controle l'installation de Firefox sur les postes, XUL est largement envisageable.
>Comment sont décidées les évolutions de XUL ?
selon les besoins, que ce soit les besoins des développeurs de Firefox, que de ceux qui utilisent Gecko pour leurs propres applis, ou même des besoins des développeurs d'extensions.
Il ne faut pas oublier que Mozilla, ce n'est pas seulement une entité corp avec quelques dizaines de dev, mais aussi des centaines de contributeurs de par le monde.
> Via des discussions ? des tickets dans Bugzilla ?
Oui, quand quelqu'un a un besoin et veut apporter une évolution, il peut en discuter, il peut même proposer directement son patch. Tout passe par bugzilla. Si le patch est de qualité (d'un point de vue purement code, d'un point de vue sécurité, etc..), il sera accepté et inclus.
>Y a-t-il une direction générale, ou est-ce que ça avance au coup par coup ?
Pour le XUL, ça avance plus au coup par coup (comme beaucoup de choses dans Gecko), suivant les besoins des développeurs internes comme des développeurs externes. Un exemple, ma contribution sur les templates basées sur une source de données sqlite : il y avait un ticket dans le bugzilla là dessus, mais personne ne travaillait dessus, il était en suspend. Personnellement, j'ai pensé que ce serait une chouette fonctionnalité. je l'ai alors développé et après quelques corrections, ils l'ont intégré dans le trunk. Et pourtant, ils n'en n'avaient pas forcément besoin dans Firefox (mais finalement des extensions utilisent les templates avec sqlite
) .
Pour le reste de Gecko, oui il y a des grandes lignes qui sont décidés. ex: pour tel version de firefox, ce serait bien d'implémenter telle ou telle fonctionnalités de HTML5, ou encore, pour Mozilla 2, il est prévu une réécriture du coeur pour le simplifier et le déXPCOMifier. Mais globalement, toute contributions est la bienvenue, et en générale les contributions sont faites par des volontaires (internes ou externes).
>une tentative d'implémentation du modèle de boîte de XUL.
Et pour cause, une partie du modèle de boite de XUL repose sur des propriétés CSS qui feront peut-être partie de CSS3. Mais le temps que ça arrive sur les autres navigateurs...
Je suis partagé entre le découragement en lisant l'auteur qui formalise bien des inquiétudes que je ressens depuis quelques temps et l'espoir en lisant les réponses et réactions de Laurent.
J'espère que Laurent fera une petite intervention samedi, aux MOAW, pour rebooster la petite communauté qui y croyait et essaie d'y croire toujours ...
Les réponses de Laurent m'ont éclairé sur plusieurs points, mais pas vraiment rassuré: oui, XUL est une excellente technologie, mais je n'en ai jamais douté. Oui, XUL a de l'avenir car il est intimement lié à la plate-forme Gecko, et que celle-ci n'a jamais été aussi vivante.
Mais je me demande toujours si XUL va rester cantonné à l'infrastructure, c'est à dire au navigateur, ou s'il a un avenir pour le développement d'applications, si l'on admet que d'ici peu l'essentiel des applications seront en ligne (rien n'est moins sûr mais c'est une hypothèse à la mode en ce moment)
Tristan dit 2 mots de XUL dans son [chat au Monde|http://www.lemonde.fr/technologies/article/2008/09/17/google-chrome-un-danger-pour-mozilla-firefox-et-internet-explorer_1096438_651865.html], mais il se contente de répéter la ligne officielle de Mozilla. On le sent plus enthousiaste pour les créations du Lab (qui le méritent) que pour l'éventuel avenir de XUL dans les applis online.
Par ailleurs, j'ai été regarder de plus près les différentes alternatives à XUL en HTML, et je suis mitigé: du point de vue de l'utilisateur, elles disposent de toutes les widgets nécessaires pour offrir un bon confort d'utilisation. Pour le développeur, les frameworks apportent un niveau d'abstraction intéressant, et permettent peut-être de développer plus simplement. Mais le prix à payer est élevé: le code généré est très laid. Hélas, du moment que ça marche, je doute que grand monde se soucie de ce point.