Les supports des conférences données à l'OSCON 2008 réservent (comme chaque année) pas mal de bonnes surprises[1] Je suis ainsi tombé sur une présentation de Jesse Vincent sur une solution pour s'échapper du nuage ("Prophet, your path out of the cloud"), c'est à dire récupérer le contrôle sur toutes nos données stockées sur les réseaux.

La question de la propriété et du contrôle est un de mes thèmes de réflexion favori. Qui possède et contrôle les outils que nous utilisons, qui possède et contrôle nos données ? Pour conserver ou se ré-approprier les uns et les autres, plusieurs solutions techniques existent[2]: les licences libres et les formats ouverts par exemple. Mais un nouveau danger est en train de monter en puissance en même temps que le réseau: la centralisation du stockage des données. Cela peut paraître paradoxal, puisque qu'Internet est fondamentalement décentralisé. Mais c'est un fait. Pour pouvoir accéder à nos données de partout, pour ne plus les disperser entre nos différents terminaux, nous les centralisons à quelques endroits du réseau, dans le nuage comme on dit. Tous les mails sur un serveur, les photos sur un site, les agendas sur un autre, les documents bureautiques sont rédigés et stockés en ligne, etc. Et parfois nous centralisons cela encore plus en confiant quasi aveuglément le tout à une seule et même entité quasi divine, Grand Frère (avec un g bleu suivi de 2 yeux pour mieux vous regarder mon enfant). Un exemple parmi d'autres, ces sociétés qui confient l'ensemble de leurs outils et données, mails, agenda, messagerie instantanée, documents, backups, etc, etc, à Google. Celui-ci est certes très pratique, toujours disponible, de partout, et à la pointe du progrès. Mais au final, à qui appartiennent encore les informations ? Qui les contrôle, qui a le pouvoir de les dupliquer, modifier, archiver, supprimer ? Nous abandonnons ainsi peu à peu le contrôle de pans entier de nos existences, devenons dépendant d'outils et de systèmes de stockage qui eux ne dépendent pas de nous.

Une réponse à cette centralisation est un retour à l'essence d'internet, un réseau décentralisé et capable de résister aux incidents. Des logiciels commencent à apparaître, souvent basés sur le P2P. Des réseaux entiers comme Freenet ou GNUnet, des gestionnaires de source, des messageries instantanée. Prophet est de cette génération. Ses parents la définissent comme une "grounded, semirelational, peer to peer replicated, disconnected, versioned, property database with self-healing conflict resolution" (rien que ça, cf ci-dessous pour l'explication).

En introduction à sa présentation, Jesse Vincent compare le web 2.0 au métayage, ce système dans lequel un propriétaire loue sa terre à un travailleur en échange d'une partie de la récolte. Le sort des métayers est rarement enviable, ils ne possédent ni la terre ni leurs outils, sont soumis au bon vouloir du propriétaire, et peuvent tout perdre à la première mauvaise récolte s'ils sont incapable de payer le loyer. Aujourd'hui, comme des métayers, nous ne possédons pas les outils avec lesquels nous créons, nous ne possédons pas les serveurs qui hébergent nos données, et nous sommes dépendants de dizaines de services en ligne. Mais que se passe-t-il lorsque le service tombe en panne[3] ? N'est pas accessible à tout le monde (uniquement sur invitation par exemple) ? Est "contraint" de livrer vos informations à la police ou à d'autres personnes qui ne vous veulent pas que du bien ? Se permet de décider si vos données son sûres et conformes aux bonnes mœurs ou s'il faut en interdire l'accès[4] ?. Vous n'avez pas la main sur les outils que vous utilisez, vous êtes à la merci d'un prestataire qui peut vous virer d'un jour sur l'autre sans aucun recours.

Ces services sont certes pratiques et proposent souvent des API vous permettant d'accéder à vos données selon diverses méthodes. Mais cela contribue aussi à vous rendre de plus en plus dépendant d'eux.

Certaines applications commencent à proposer des modes déconnectés, c'est à dire la possibilité de travailler localement sur vos données, sans être connect. Mais ces modes n'offrent pour l'instant pas grand chose de plus que les applications clientes du temps des ordinateurs personnels. Pour Jesse, un application capable de fonctionner en étant déconnectée devrait pouvoir se passer complètement de serveur, et se synchroniser de façon transparente.

C'est en partant de ces considération que Jesse Vincent et Chia-liang Kao ont décidé d'écrire une base de données capable de fonctionner en mode déconnecté et de se synchroniser: 'Prophet'

Quelques caractéristiques de Prophet:

  • elle s'exécute sur terre et non dans le nuage. C'est à dire sur votre machine, sans avoir besoin du réseau;
  • elle peut se synchroniser via des adaptateurs avec des services en ligne
  • elle est "semi-relationnelle", c'est à dire que la gestion de relations entre objets est possible mais découragée car elles sont coûteuses (c'est peut-être une des faiblesses du projet, j'ai pour ma part tendance à chercher à mettre des relations partout);
  • la base est répliquée en utilisant le principe du peer-to-peer, on peut mettre à jour n'importe quelle réplique, y lire ou publier du contenu, en créer une nouvelle... et les mises à jours se propagent d'instance en instance.
  • elle peut fonctionner sans être connecté, les synchronisations ont lieu lorsque c'est possible;
  • le mécanisme de réplication se base sur une historisation de toutes les modifications. On peut ainsi accéder à l'ensemble des versions de tout contenu, et bien sûr revenir en arrière;
  • la base ne stocke pas d'objets à schéma figé mais des propriétés. Tous les enregistrements de même type ne sont pas obligés d'avoir les mêmes propriétés. On peut créer des propriétés, les modifier, supprimer et effectuer des recherches dessus. On peut également ajouter des tests de validation et des convertisseurs sur les types;
  • la base est capable de gérer les conflits de façon semi-automatique au moment de la synchronisation: elle mémorise toutes les résolutions pour pouvoir résoudre les autres cas identiques. En cas de conflit, elle peut ainsi soit se baser sur son "expérience", soit sur une préférence donné par l'utilisateur à une modification, soit sur une consultation (vote) des différentes instance, ou, à défaut, demander à l'utilisateur;
  • Prophet n'a pas besoin de serveur central, chaque instance communique directement avec les autres; Elle permet ainsi de créer des réseaux privés où plusieurs ordinateurs partagent les mêmes données;
  • last but not least, Prophet est "Open Source" (mais pas forcément libre, je n'ai pas trouvé trace de licence).

Jesse et Chia-liang l'utilisent pour développer un système de suivi de fonctionnalités non documentées (bugtracker), SD (simple defect).

Une des force de Prophet semble être sa capacité à s'interfacer avec les services en ligne existant. Il "suffit" pour cela d'écrire un connecteur. Vous pouvez ensuite avoir les données de vos services dans plusieurs répliques sur différentes machines, et les synchroniser avec le nuage. Mieux, cela peut également vous permettre de faire communiquer facilement des services entre eux. En reprenant l'exemple du bugtracker, Jesse et Chia-liang ont écrit des connecteurs pour les 2 bugtrackers qu'ils utilisent. Ils peuvent ainsi importer les bugs des 2 dans SD, les mettre à jour, et les re-synchroniser, créant dans l'un les tickets venant de l'autre !! Ils cherchent aujourd'hui des volontaires pour écrire des connecteurs pour tous les autres systèmes de gestion de ticket. Et cela peut évidemment s'étendre à n'importe quelle base en ligne, carnet d'adresse, suivi de projet, etc, etc.

D'un point de vue technique, Prophet propose déjà plusieurs API: en mode REST et nativement en PERL. Pour l'instant, les données sont stockées physiquement dans des fichiers, mais toutes les bonnes volontés sont les bienvenues pour créer d'autres backends basés sur n'importe quelle base de données;

Les perspectives offertes par cette présentation sont enthousiasmantes, ne reste plus qu'à espérer que le projet tienne ses promesses.

Quelques liens:

  • le site de Prophet et SD.
  • un billet sur le blog d'OReilly
  • Apache CouchDB est une base de données orientée document (c'est à dire qu'elle stocke des documents non typés). Elle est accessible via une API REST, est distribuée, et gère la réplication entre instances et les conflits. C'est un projet de la fondation Apache. Qui utilise JSON, Javascript et est dispo dans Sid. Zut, encore un truc qu'il faut que je regarde d'urgence !

PS:

  • que font 2 geeks éloignés de 15.000km quand ils se retrouvent une semaine à Hawaii ? ils écrivent 8.000 lignes de Perl, évidemment :-D
  • absolument rien à voir mais en cherchant plus d'infos sur Prophet je suis tombé sur le site perso de Jesse et amoureux de son fond d'écran.

Notes

[1] et pas mal de frustration aussi quand on voit la liste des conférences pour lesquelles aucun support n'est dispo...

[2] les solutions techniques ne sont bien sûr qu'un pis-aller, le vrai problème est ailleurs, mais sur un terrain dont je préfère discuter autour d'une bière qu'ici

[3] tiens, justement, le fameux stockage en ligne Amazon S3 a été inaccessible pendant plusieurs heures le 20 juillet

[4] et les lois, en France par exemple 'obligent' de plus en plus les fournisseurs d'accès et de services à agir sur vos données