Prenons un peu de recul et observons pourquoi c’est une grande nouvelle.
Cet article est une traduction du blogpost officiel par la fondation diaspora*
tl;dr : la prochaine version majeure de diaspora* (0.7.0.0) embarquera une nouvelle version majeure (0.2.0) du protocole “The federation” de diaspora*. La sortie de cette version montre que la phase de nettoyage est terminée et que la communauté est à présent capable de faire évoluer ce protocole. Sous licence AGPL 3.0 et à l’épreuve de nombreuses années de production, le protocole et son implémentation sont fiables et robustes. Nous encourageons les projets cherchant à créer le web social à s’y intéresser et nous investirons pour pousser à son adoption notamment en fournissant un outil pour tester automatiquement ses implémentations dans d’autres langages. En dehors de l’implémentation de référence en Ruby, il y a actuellement deux implémentations en PHP, une en Python et une en Go.
L’évolution du protocole depuis 2012
La communauté diaspora* s’occupe du protocole de diaspora* (la fédération) depuis le retrait des fondateurs en Août 2012. À ce moment, le code gérant le protocole de diaspora* était intégré profondément dans le logiciel diaspora* lui-même. Une telle architecture a des défauts majeurs. Pour le projet diaspora* d’abord : elle rend difficile l’isolement et la correction des bogues et il est compliqué de faire évoluer le protocole en maitrisant les risques de régressions. Pour le protocole et son adoption ensuite, car comprendre son fonctionnement impliquait de rétro-ingénieurer le code, complexe, du logiciel diaspora*. Quant-à réutiliser directement ce code dans d’autres projets, cela était presque impossible.
Un protocole qui est difficile à faire évoluer et à réimplémenter est inutile et voué à disparaître. Il est donc très vite devenu essentiel aux yeux de la communauté d’extraire l’implémentation du protocole dans une bibliothèque séparée, qui serait à la fois plus facile à faire évoluer, permettrait de contenir et mieux corriger les bogues, pourrait être reprise et inclue dans les projets qui le souhaitent et servir d’implémentation de référence du protocole pour ceux souhaitant créer une nouvelle implémentation dans un autre langage que Ruby. Une issue a été créée sur github en Août 2014 et le travail d’extraction a commencé. Le code nécessitait d’être en grande partie refactorisé et finalement, une nouvelle implémentation a été écrite quasiment from scratch. Raven24 (Florian Staudacher) puis SuperTux88 (Benjamin Neff) ont travaillé sur cette implémentation pendant plus d’un an. C’était la première grande étape : comprendre tout le code écrit par les fondateurs, et le réécrire dans un projet séparé, pour qu’il soit réutilisable.
Quand la bibliothèque a commencé à être suffisamment stable, le travail d’intégration à diaspora* a commencé. Cette seconde étape a été encore plus difficile. Il a fallu inclure la bibliothèque dans diaspora* puis, bout par bout, remplacer l’ancien code dans diaspora* par des appels à la nouvelle bibliothèque. Cela a commencé par la découverte des contacts des autres pods, effectuée grâce aux standards WebFinger et HCard. C’est chose faite en Juillet 2015 et en Août 2015. Beaucoup de travail a suivi mais, pour faire court, le nettoyage du vieux code et l’intégration du nouveau a été terminé en Juin 2016. C’est finalement avec la sortie de la version majeure 0.6.0.0 de diaspora* que tout ce travail a officiellement été disponible pour tous, le 27 Août 2016, 4 ans jour pour jour après le départ des fondateurs.
Pourquoi aujourd’hui est un grand jour !
Tout ce travail fait pendant ces 4 premières années était essentiel pour partir sur des bases saines. Il a même fait beaucoup de bien aux serveurs, la nouvelle implémentation étant plus robuste et mieux testée donc moins buggée. Mais pour les utilisateurs, aucune nouvelle fonctionnalité visible n’est apparue. Voici pourquoi cette deuxième version majeure est excitante : la phase de nettoyage étant terminée, Benjamin a pu, aidé par Senya, s’attaquer à une partie beaucoup plus intéressante : faire évoluer le protocole. Et des évolutions, dans cette nouvelle version majeure et depuis Août dernier, il y en a eu ! Regardez les notes de versions, elles sont imposantes ! On peut par exemple noter l’ajout de la date de rédaction aux commentaires transités, permettant ainsi d’être certain de les afficher dans le bon ordre et corrigeant donc un bug vieux de plusieurs années !. Il est possible d’afficher sa biographie en publique sur les autres serveurs. On voit aussi apparaître la notion d’évènement, que le protocole est maintenant capable de gérer même si ce n’est pas encore le cas du logiciel diaspora*. Mais la nouveauté la plus importante, c’est l’introduction de la fameuse notion de migration, qui va permettre aux utilisateurs de déplacer leur compte d’un serveur diaspora* a un autre tout en gardant leurs contacts, messages, commentaires… Une des promesses phares du projet diaspora*, qui donne le pouvoir complet à l’utilisateur en lui permettant de partir d’un serveur et d’aller vers un autre quand il le souhaite.
Rétrocompatibilité et adoption
Tous ces changements sont importants et ont une conséquence : cette version majeure n’est pas rétrocompatible avec celle embarquée par les serveurs utilisant une version 0.6.2.0 ou inférieure de diaspora*. Ces derniers ne seront donc pas capable de recevoir les messages envoyés par la future version majeure de diaspora*, la version 0.7.0.0. C’est pourquoi il est extrêment important de mettre à jour les serveurs régulièrement, ce qui est de toute manière impératif pour corriger les failles de sécurité.
Cette version démontre aussi que, forte de ses 4 années d’expérience, la communauté de diaspora* est aujourd’hui capable de mettre à disposition un protocole de réseautage social fiable et évolutif. Ses spécifications sont, évidemment, publiques. La Gem Ruby, implémentation de référence utilisée par diaspora*, est disponible sous licence AGPL 3.0 ( documentation, code source), et de nombreuses autres implémentations existent, comme celle en PHP utilisée par Friendica, celle en python utilisée par SocialHome, ou encore celle en Go utilisée par Ganggo. Notez que ces implémentations ne sont pas toutes complètes ni supportées officiellement par le projet diaspora*. Si vous souhaitez participer à l’évolution du protocole ou l’utiliser, n’hésitez pas, venez discuter sur Github, discourse ou sur #diaspora-dev sur IRC !
Keep rocking the free social web!