Synchroniser

Publié le par /

Parmi les différentes expériences que j’ai en ce moment sur le feu pour apprendre à développer des applications Web, un petit machin tout simple de prise de notes. Une fois réglé la question du stockage local, je me suis dit qu’il serait pratique, lorsque j’aurai un terminal mobile, de pouvoir récupérer sur ma machine principale les notes saisies dans les transports. Renseignement pris, il n’existe pas encore d’API de synchronisation dans Firefox OS, et ça ne semble pas une priorité, le premier marché visé étant les pays émergents et non les geeks qui jonglent entre plusieurs terminaux. Je réfléchis donc depuis quelques jours à une solution de synchronisation.

L’apprenti geek en moi jouerait bien avec CouchDB, une base de données qui incorpore nativement des fonctionnalités avancées de synchronisation. Mais cela signifierait en avoir une instance sur un serveur et donc devoir administrer sur le long terme ce service. Or je ne veux plus rajouter de trucs sur mon serveur. Surtout, c’est une solution qui réserverait mon application aux boutonneux et boutonneuses dans mon genre, capable d’installer un serveur. Une solution accessible à tout internaute me plairait davantage, surtout si elle évite le piège de dépendre d’un entrepôt central.

Le problème de la synchronisation est qu’à moins de le faire directement entre deux terminaux (bientôt possible avec WebRTC ?), elle demande de passer par une passerelle, et que celle-ci constitue souvent un point de centralisation. Le meilleur exemple est sans doute Google. Pour y remédier, il faudrait que les internautes puissent facilement disposer de leur propre instance de serveur de synchronisation. Je me souviens de projets pour installer facilement des paquets de logiciels, dont le serveur Sync de Mozilla. Mais je crois qu’ils ne sont malheureusement jamais sortis du cercle des boutonneux.

À vrai dire, si l’on cherche un service largement répandu chez des internautes non technophiles, réellement décentralisé, encadré par des spécifications, et qui permet à chacun et chacune de lire et d’écrire des données, je ne vois qu’un seul candidat : la messagerie (éventuellement la messagerie instantanée, à présent que XMPP a pratiquement tout unifié).

Pourquoi ne pas donc utiliser un compte mail comme serveur de synchronisation ? Ou du moins de stockage de données partagées entre plusieurs instances d’une application. L’idée n’est pas neuve, GmailFs par exemple permettait d’utiliser un compte Gmail comme espace de stockage. Tout ce dont l’utilisateur aurait besoin pour synchroniser ses différents terminaux serait une adresse mail.

Si l’idée est simple, la réalisation risque de l’être nettement moins. Pour en arriver là, il faudrait :

  • définir un protocole de communication avec le serveur de messagerie. Ce protocole devrait offrir plusieurs méthodes de connexion. Si le serveur est accessible en IMAP ou POP3 et que l’application a accès à de vrais sockets (comme la TCP Socket API présente dans Firefox OS), les échanges ne poseront pas de problèmes. Sinon, il faudra soit envisager des passerelles (un service Web gérant les échanges IMAP), mais qui réintroduisent un point de passage obligé, soit des connecteurs pour que l’application navigue sur les Webmails et simule une connexion IMAP (sur le modèle par exemple de DavMAIL qui crée un vrai serveur POP/IMAP/SMTP au dessus du Webmail d’Exchange) ;
  • définir un format de stockage des données, et gérer les diverses limitations des services (taille des messages, recherche plus ou moins aisée, etc) ;
  • trouver des algorithmes performants de synchronisation, qui minimisent les échanges réseau. C’est sans doute la partie la plus simple, de telles fonctionnalités étant déjà présentes dans de nombreux logiciels libres ;
  • on peut aussi imaginer un répertoire listant les connecteurs disponibles en fonction de l’adresse de l’utilisateur, et les installant à la demande. Par exemple un utilisateur de FirefoxOS utilisant une adresse GMail pourrait utiliser un connecteur IMAP natif, quand le possesseur d’une adresse hotmail devrait passer par une surcouche du Webmail (le tout de manière évidemment transparente).

J’ai cette idée en tête depuis quelques jours, et sa mise en œuvre est très largement au dessus de mes compétences et de mes disponibilités. J’en jette donc le brouillon ici pour voir ce qu’elle vous inspire.

Pour réagir, n'hésitez-pas à m'écrire : clochix chez clochix.net ou à soumettre l'url de votre commentaire :
(Je traite les mentions à la main, elles peuvent mettre plusieurs jours avant d'apparaître)

Si vous avez un compte Github, vous pouvez me proposer des corrections en éditant ce billet

Fork me on GitHub