Première rédaction de cet article le 26 octobre 2009
Dernière mise à jour le 25 août 2010
N'espérez pas trouver ici une réponse définitive à cette question. Je débute, moi aussi, et je suis loin d'avoir tout compris. Et ce que j'ai compris, je l'ai peut-être compris de travers. Mais, au moins, grâce au Web, je peux partager mon ignorance.
Dans un grand concert d'agitation médiatique,
Google a lancé les premières invitations pour
participer au béta-test de Google Wave. (Le projet a depuis été abandonné par Google.) Cette
technique marketing permet à la fois de donner aux destinataires de
l'invitation l'impression flatteuse d'être des privilégiés, et à
l'infrastructure technique et humaine de Google de ne pas s'écrouler
sous une charge subite. Mon identificateur Google Wave est
bortzmeyer@googlewave.com
pour ceux qui veulent
essayer avec moi. Attention, même si ça y ressemble, ce n'est
pas une adresse de courrier.
D'abord, à quoi sert Google Wave ? Tout le monde bute sur cette question. Google ne fournit que des vidéos de démonstration, jolies mais peu claires, et des documents techniques touffus. Le texte écrit est apparemment réservé, chez Google, aux techniciens, les autres n'ont qu'à regarder les images. Sur les jolies vidéos, on voit plusieurs personnes éditer un document multimédia partagé via l'Internet. Soit, et alors ? Google Docs, de la même entreprise, en fait autant depuis longtemps (ou bien, en plus libre, PiratePad/EtherPad). On voit aussi deux personnes communiquer en « temps réel ». En quoi est-ce différent de la traditionnelle messagerie instantanée telle qu'elle se fait avec XMPP ou, depuis encore plus longtemps, avec IRC ? Ou bien Google Wave serait-il un concurrent du courrier ? On a bien vu des gens écrire qu'il éviterait le spam, en raison du stockage du document chez l'émetteur (idée tout à fait fausse, comme le montre bien la présence d'un bouton de signalement de spam sur le banc de test...)
Les points importants de Google Wave, semble t-il, sont justement
ceux qui ne sont pas dans les vidéos. Par rapport à Google Docs, la
grande différence est que Google Wave n'est pas (ou, plus exactement,
ne sera pas) un service centralisé. Avec Google
Docs, vous abandonnez tout à Google. Vos documents sont hébergés chez
Google qui peut en faire ce qu'il veut. Google Docs était donc un
grand retour en arrière par rapport à ce que permet l'Internet. Google
Wave, au contraire, est fédératif (comme le
courrier électronique). Chacun peut (au moins
en théorie) avoir son serveur Wave chez lui et créer des identités à
lui, ne se terminant pas par @googlewave.com
.
Sur cette base, de nombreuses applications semblent possibles. La plus évidente est la création en commun de documents. Aujourd'hui, pour un travail en groupe, il y a deux solutions :
Comme aucune de ces méthodes n'est idéale, et que ce scénario est très fréquent dans tous les environnements de travail, il existe donc une bonne raison de tester des nouvelles méthodes. Google Wave est l'une de celles-ci, comme l'explique bien Daniel Tenner dans « What problems does Google Wave solve?.
Google Wave permet en effet d'avoir une copie faisant autorité du document (le document, la wave, l'« onde », a en effet un serveur Wave de référence, où elle est conservée), tout en permettant les modifications faites par divers participants, y compris via leurs propres serveurs Wave. Par contre, Google Wave ne semble pas permettre de travail en mode déconnecté du réseau. Comme d'autres applications, il s'appuie sur la légende comme quoi nous serons, dans un futur inspécifié, connectés en permanence.
Une des difficultés à évaluer Google Wave est la différence entre la théorie et la pratique. Ainsi, en théorie, Google Wave n'impose aucune dépendance vis-à-vis de Google. En pratique, il n'y avait au début qu'un seul serveur Wave et surtout qu'un seul service d'hébergement, celui de Google (googlewave.com). Depuis, des annonces diverses ont été faites (par exemple que Novell intégrait le protocole Wave dans ses produits, comme « Pulse », qui a été montré en janvier 2010), allant dans le sens d'une réalisation des promesses de Wave comme système fédératif.
Voici donc ce que j'ai compris de l'utilité de Google Wave et de l'utilisation qu'on peut en faire. Maintenant, je vais devoir être un peu plus technique pour développer d'autres points.
Google Wave repose sur plusieurs protocoles, tous ouverts et publics, ce qui est un de ses principaux avantages. Ainsi, le protocole entre serveurs Wave (le protocole de fédération) est une extension du protocole XMPP de messagerie instantanée, protocole normalisé dans le RFC 6120. XMPP a un mécanisme normalisé d'extension, XEP 114 et c'est dans le cadre de ce mécanisme que Google a spécifié les extensions Wave.
Ce protocole entre serveurs Wave dépend d'une technique très complexe pour gérer les modifications indépendantes du document : la transformation d'opérations. Elle dira quelque chose à tous ceux qui ont transpiré sur des techniques analogues pour les VCS comme par exemple la théorie des patches de darcs. Pour un point de départ, voyez l'excellent résumé de Wikipédia sur la fusion des modifications et pour une vision plus complète de cette transformation « The Secret Sauce Behind Google Wave ». Les extensions (encore !) de Google à cette technique de transformation des opérations sont décrites dans « Google Wave Operational Transformation ». (Les utilisateurs de Xwiki noteront qu'il existe un projet similaire pour Xwiki.)
Quel est le principe de la transformation d'opérations ? Lorsque
plusieurs sites modifient le même document de manière non
coordonnées, et s'envoient les modifications, on souhaite que le
document résultant soit le même sur tous les sites. Or, une mise en
œuvre naïve ne va pas produire ce résultat. Supposons seulement
deux sites, Alice et Bob. Supposons des documents qui soient composés
d'une simple chaîne de caractères, par exemple « abcdef ». Supposons
enfin qu'on modélise les changements possibles par seulement deux
opérations, delete(C, N)
qui détruit le caractère
C situé au point N, et insert(C, N)
qui insère le
caractère C au point N.
Alice supprime le A initial (delete('a', 1)
)
et Bob ajoute un x en deuxième position (insert('x',
2)
). Alice a désormais le document « bcdef » et Bob le
document « axbcdef ». Ils s'envoient les opérations effectuées, pour
se synchroniser. Si chacun effectue bêtement l'opération de l'autre,
Alice va se retrouver avec « bxcdef » (elle a inséré le caractère 'x'
en seconde position, bien que les caractères aient tous été décalés
par la suppression de 'a') et Bob va avoir « xbcdef ». Les deux
documents sont désormais différents.
La solution de la transformation des opérations consiste à
transformer l'opération d'édition avant de
l'appliquer. Un algorithme possible, pour cette modélisation, est « la
transformation d'un insert
par rapport à un
delete
se fait en gardant N si le N du
delete
lui était supérieur et en remplaçant N par
N-1 si le N du delete
était inférieur » (notez
que, pour le cas où les deux N sont égaux, il faut décider
arbitrairement qui gagnera : dans Wave, chaque onde - ou plus
exactement chaque ondelette - a un site de référence, qui gagne toujours
en cas de conflit).
Avec cet algorithme, l'opération insert('x',
2)
de Bob devient, lorsqu'elle est transformée par Alice,
insert('x', 1)
. Ainsi, la lettre 'x' est bien
insérée au début et les deux documents sont désormais identiques. Bien
sûr, les vraies transformations sont bien plus complexes et il existe
des tas de façons de les spécifier. L'article de Wikipédia
donne une première idée. Par exemple, il faut maintenir une horloge
(un compteur) sur chaque site, et indiquer, pour chaque opération
transmise, l'« heure » à laquelle elle a été faite pour que les
transformations soient appliquées à la bonne version.
Contrairement au protocole entre serveurs, le protocole entre un client Wave et un serveur Wave est très différent et n'est pas spécifié à l'heure actuelle (mais des discussions existent). On ne peut donc pas écrire un client Wave standard. Le seul opérationnel aujourd'hui est le client Web de Google, qui utilise un protocole nommé GWT (des « clients » comme WaveBoard sont juste des emballages d'un navigateur Web). Il existe aussi des clients expérimentaux comme un mode Emacs.
Si la variété des protocoles nécessaires pour Wave vous perturbe, vous trouverez de bonnes explications dans des articles comme « Google Wave Protocols: Clearing the Confusion » (avec un beau dessin), « Wave's Web of Protocols » ou dans « Wave Protocol Thoughts ». Si vous aimez regardez les paquets qui circulent sur le réseau, pcapr.net a déjà des paquets Wave.
En parlant de logiciel, s'il n'existe pas aujourd'hui d'autres services Wave que celui de Google, notons qu'un logiciel serveur, écrit en Java, existe sous une licence libre. Il est fourni par Google et vient avec son propre client (incompatible avec le service de Google, comme indiqué). Comme il fonctionne dans le cadre du XEP 114, il a besoin d'un serveur XMPP pour marcher. Google recommande Openfire mais publie aussi une documentation pour le faire marcher avec ejabberd. (Et des gens y sont arrivés avec Prosody).
Les serveurs de googlewave.com
n'acceptaient
d'ailleurs pas de parler avec d'autres, au lancement du service (cela
a changé le 2
novembre, avec la vraie ouverture de la fédération).
S'il n'existe pas de protocole standard pour le client, il y a par contre une API pour écrire des robots qui parleront à Google Wave et un protocole sous-jacent (RPC avec JSON). Il y a par exemple du code pour un robot en Python mais qui ne marche apparemment qu'avec l'App Engine. Des robots plus ou moins utiles apparaissent déjà, comme celui qui fait la passerelle avec Twitter.
Pour résumer, une technique très prometteuse, qui avait de bonnes chances de succès, qui est largement ouverte, mais qui était très loin d'être finalisée et qui ne le sera probablement pas. Le code a été publié en logiciel libre, quelques développements sont encore prévus. La maison officielle de Google Wave est désormais l'incubateur Apache.
Parmi les articles intéressants :
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)