Depuis quelques jours, la blogosphère GWT est secouée par des voix qui s’élèvent pour annoncer sa mort prochaine et son remplacement par une autre technologie Google nommée Dart. L’idée de ce billet est de vous apporter un éclairage sur ces débats, souvent techniques et pas toujours très factuels.
GWT est une technologie innovante créée il y a de cela 6 ans par Google et permettant de créer une application Web entièrement en Java tout en faisant abstraction de la complexité inhérente à JavaScript et HTML. Côté client, on code en Java avec des composants graphiques de haut niveau (Bouton, Menus, Grilles, etc…) et côté serveur on s’intègre avec n’importe quel serveur d’application (Java ou non d’ailleurs). Principal avantage de GWT : il est possible de partager et donc réutiliser les mêmes types (Java) entre client et serveur. Autre bénéfice de taille, GWT tire partie de tous les avantages des IDE Java modernes (complétion des méthodes, Debug via des points d’arrêt, Refactoring, Testabilité).
Après plusieurs années de développement autour de GWT, Google a décidé il y a quelques mois de créer un nouveau langage de développement Web nommé Dart. Ce langage à la syntaxe très séduisante a été conçu pour être performant (procédé de snapshotting) tout en apportant des réponses aux quelques lacunes de Java (closure, ….). D’un point de vue structurel, Dart s’appuie sur un paradigme orienté objet et propose un mode « compilable » (génère du JavaScript) et interprétable (exécuté directement dans le navigateur via une machine virtuelle).
Le contexte étant posé, où se situe le nœud du problème ? Pour créer Dart, Google a eu la bonne (ou mauvaise pour certains) idée de réutiliser certains talents de l’équipe GWT. Un turn-over s’est opéré qui s’est traduit par l’arrivée de nouveaux développeurs GWT, le changement du leader et le départ de contributeurs historiques, mais non moins charismatiques. Il n’en fallait pas plus à certains pour établir un lien de cause à effet entre Dart et GWT. Dart a été créé pour remplacer GWT.
Soyons clairs, Dart est un nouveau langage, cela signifie en pratique qu’il faudra réécrire un IDE adapté (c’est en cours), mettre en place de nouveaux outils de développement et surtout convertir ou intégrer les innombrables framework qui constituent aujourd’hui la norme JEE (entre autre). Un travail non seulement titanesque mais assez rocambolesque quand on connait la taille et la diversité de l’écosystème Java.
Google, à de nombreuses reprises, par la voix de Ray Cromwell (autre contributeur historique) a réaffirmé sa volonté de poursuivre son investissement dans GWT. L’équipe n’a pas été réduite, l’activité non plus. En interne, les produits les plus stratégiques de Google sont écrits en GWT et la Roadmap de la 2.5 est des plus alléchantes avec de nombreux travaux autour du compilateur (et l’intégration de Closure). GWT a prouvé sa maturité, ses performances (nous l’utilisons au quotidien chez DNG et nos clients en sont pleinement satisfaits) et surtout sa productivité hors pair.
Dart est un projet encore embryonnaire venant s’ajouter aux innombrables projets R & D de la firme. On peut l’affirmer aujourd’hui sans trop de risques, Dart, pas plus qu’ActionScript d’Adobe, Silverlight de Microsoft ou JavaFX d’Oracle, ne pourra s’imposer sur tous les navigateurs. Pour faire tourner Dart, il faudra, soit une VM, donc un plug-in, chose difficilement concevable aujourd’hui, soit une cross-compilation vers JavaScript (c’est le cas aujourd’hui) et le choix du langage devient alors le seul critère déterminant (difficile pour faire changer la face du monde). Choisir entre Java et Dart, c’est un peu comme choisir entre Java et Ruby ou Java et Scala. On ne cesse de prédire la mort de Java depuis 10 ans, ce langage n’a jamais été aussi fort et populaire qu’aujourd’hui, même sans les closures et les qualités de scripting.
Google nous a déjà habitués par le passé à faire marche arrière sur un grand nombre de projets (Google Go, Google Buzz, Google Wave, …). Google Web Toolkit a été adopté à partir du premier jour où la communauté l’a découvert, que soit au sein de Google ou à l’extérieur.
Malgré tous ces gages, nous ne devons occulter la possibilité qu’un jour Google fasse machine arrière. Dans ce cas, étudions les scénarios qui pourraient découler d’un changement de stratégie :
- Scénario du pire : Google arrête les développements GWT : Dans ce cas, la firme se met une balle dans le pied car la communauté GWT se désintéressera instantanément de son écosystème (Google Apps, GAE, Google Maps, …). Il devra non seulement réécrire des pans entiers de son système d’information (AdWords, Google Reader, …) mais surtout prendre le risque de décevoir une large communauté Java qui lui est très favorable. Malgré ce scénario du pire, nous pourrions assez facilement imaginer un convertisseur Java vers Dart car les deux langages sont finalement très proches (en effet, le périmètre des API Java utilisées côté client par GWT est assez réduit).
- Scénario du meilleur : GWT évolue au même rythme qu’aujourd’hui, Dart s’arrête dans quelques mois faute d’un support plus large des développeurs et végète avant d’être offert à Apache (qui devient de plus en plus le sombre placard de tous les projets Open Source égarés).
- Scénario le plus réaliste : GWT devient le standard de facto dans la communauté Java pour les développements Web applicatifs et Dart, tout comme Google Closure (et d’autres !), devient un projet essentiellement utilisé en interne.
N’oublions pas une chose fondamentale, le cœur de GWT est son compilateur. Le langage n’est finalement pas si structurant que cela, il est déjà possible de coder du GWT en Scala. On peut très bien imaginer faire communiquer du Dart et GWT façon Java côté client.
La marge de progression de GWT est encore énorme. L’avènement des spécifications HTML 5 va dynamiser son adoption. Dans le même temps, les navigateurs seront de plus en plus performants vis-à-vis de JavaScript.
GWT est donc loin, très loin d’être mort. Son principal contributeur et utilisateur, Google, n’a aucun intérêt à le faire. Officiellement, le discours de Google est sans équivoque, GWT et Dart sont des technologies complémentaires et GWT reste un élément clé dans la stratégie Cloud de Google.
Tout le reste n’est finalement que littérature…
Sami Jaber (DNG Consulting)