Journal Construisez un web décentralisé avec Salut à Toi et XMPP !

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
38
26
jan.
2018

Sommaire

Parmi les nombreuses nouveautés et évolutions de Salut à Toi pour la version 0.7 à venir, une a un particulièrement grand potentiel : Libervia (l'interface web) est devenu un cadriciel web (ou « framework web »).

« Mais il y en a déjà plein ! » vous entends-je dire… C'est vrai, mais celui-ci est décentralisé.

Construire sur du standard, avoir des outils pour créer décentralisé

Utiliser les comptes existants

Libervia s'appuie donc sur SàT et XMPP pour aider à construire voire reconstruire le web. Quel est l'intérêt ? Et bien déjà l'authentification, chose nécessaire sur la plupart des sites de nos jours, utilise le compte que vous avez déjà. Non je ne parle pas du compte sur le gros truc bleu ou l'oisillon piailleur, mais bien de votre compte XMPP, celui que vous utilisez avec SàT, Movim, Gajim, Conversations ou encore Pidgin, celui dont les données peuvent être chez vous dans votre salon, et avec lequel vous pouvez utiliser n’importe quel nom, celui avec lequel vos faits et gestes ne sont pas épiés.

Le ou la développeur/euse n'a donc pas besoin de gérer cela, et les utilisateurs n'ont pas à recréer un compte à chaque site ou à utiliser un compte centralisé (et ainsi dire aux aspirateurs à données du net où, quand et à quoi ils se connectent).

Autre avantage : on profite de l'existant ; si vous voulez intégrer d'autre moyens de vous authentifier (par exemple utiliser vos comptes GNU/Linux), vous n'avez qu'à activer ce qui va bien sur votre serveur (voir cette liste pour prosody, vous trouverez certainement une liste équivalente pour les autres serveurs.).

pubsub, la base de données décentralisée

XMPP n'est pas une technologie, mais un ensemble de technologies cohérentes, et pubsub est l'une d'elles. Pour mémoire, il s'agit d'enregistrer des données (ou « items ») dans des « nœuds » (qu'on peut voir comme des tables ou collections dans les bases de données), qui sont sur des services.

Un service pouvant être n'importe où sur le réseau, au même endroit que votre serveur web, à l'autre bout de la planète, sur l'intranet ou sur un .onion dans le réseau Tor. Bien sûr il est possible de garder des données localement si nécessaire, notamment pour le cache.

le cache parlons en justement, pubsub a une propriété très intéressante : on peut s'abonner à un nœud pour être prévenu des modifications sur celui ci (ajout/modification ou suppression de données). Ceci permet à Libervia d'avoir un système de cache automatique : une page peut être mise automatiquement en cache et celui-ci peut-être invalidé dès qu'une modification a lieu. Voilà encore de quoi simplifier la vie du développeur, et améliorer les performances côté utilisateur.

faciliter la vie

Libervia a été pensé pour faciliter la vie des développeurs.

changer l'apparence

Le système est entièrement basé sur un moteur de modèles (jinja2), qu'il est très facile d'étendre pour faire de nouveaux thèmes (du simple changement de CSS à la transformation de toute la structure des pages). Il suffit de créer un répertoire avec le nom du thème et de modifier ce que l'on souhaite, et uniquement ce que l'ont souhaite : les pages du thème par défaut vont être utilisées si nécessaire.

Intégration entre serveur et client

Un certain nombre d'outils sont présents pour faciliter l'intégration entre la partie cliente (dans le butineur) et la partie serveur (HTTP). Ainsi par exemple, il suffit de déclarer "dynamic = True" dans votre page Libervia (côté serveur), pour activer automatiquement un système de communication dynamique avec le navigateur (basé sur les websockets). Une méthode permet d'envoyer des données n'importe quand à la page, et une autre est appelée quand des données sont émises depuis le navigateur.

Ceci sera encore plus poussé dans la version 0.8, avec l'intégration prévue de transpileur Python vers Javascript. Libervia utilise jusqu'ici Pyjamas, un projet qui n'est plus maintenu et qui se base sur un Python 2 obsolète. Pour éviter d'être bloqué sur une seule option, le choix sera laissé au développeur d'utiliser un transpileur Python vers Javascript (Brython et Transcript sont prévus), du Javascript simple (dit « vanilla »), ou s'il ou elle aime se faire du mal, un cadriciel Javascript à la mode.

Gérer les tâches communes

Un système de traduction est intégré nativement (utilisant Babel), ainsi que des filtres pour les dates, le rendu d'interfaces venant du backend, ou encore la création de formulaires.

Les modèles sont prévus pour êtres réutilisables, ainsi il est simple d'intégrer, par exemple, des commentaires dans une page.

Un écosystème en symbiose

Je m'arrête là pour les fonctionnalités, même si la liste n'est pas finie (il est par exemple possible de générer des sites statiques à la manière d'un Pelican ou d'un Hugo).

Ce nouvel outil a déjà été mis en pratique dans certaines des nouveautés de la version à venir, notamment avec le gestionnaire de tickets et de demande d'intégration de patch (« merge requests ») mentionnés précédemment.

La prochaine version de Salut à Toi est un aboutissement, c'est la première version prévue pour être utilisée en production, et constitue désormais tout un écosystème de communication, de création et de travail collaboratif, compatible avec le reste de la famille XMPP.

Si vous voulez vous tenir à jour vous pouvez consulter mon blog (qui est fait avec Libervia) ou nous rejoindre sur le salon sat@chat.jabberfr.org.

Si vous voulez nous soutenir, vous pouvez soit adhérer à l'association, soit nous aider sur Liberapay.

  • # Super boulot!

    Posté par  (site web personnel) . Évalué à 9.

    Félicitions pour le boulot accomplis. J'utilise XMPP au quotidien et tes outils sont très utiles. J'ai hâte de tester tout ça plus en profondeur.

    J'ajoute qu'il est possible de tester facilement pour les utilisateurs d'Archlinux. Des PKGBUILD des versions de développement sont disponibles sur AUR et sur mon dépôt privé.

    Bon courage pour la suite. On a pas finis d'entendre parler de XMPP :-). Même s'il s'agit d'un petit mouvement, la communauté est sympathique, motivée et des initiatives comme la tienne, Movim, JabberFR et les autres répondent à de vrais besoins.

  • # des exemples?

    Posté par  . Évalué à 3.

    Y a t-il des sites qui utilisent votre framework et qui marchent sur le modèle que tu décris?

    Est-ce qu'il y a une notion de redondance, haute-disponibilité ? Si un site ("service"?) tombe que se passe t-il?

    • [^] # Re: des exemples?

      Posté par  (site web personnel, Mastodon) . Évalué à 5. Dernière modification le 26 janvier 2018 à 12:19.

      oui, mon blog, c'est à dire l'interface web de SàT. Tu peux voir le code sur repos.goffi.org (en particulier la partie pages servers et les modèles correspondant.

      Est-ce qu'il y a une notion de redondance, haute-disponibilité ? Si un site ("service"?) tombe que se passe t-il?

      Pas pour le moment, le framework en est à son début, on verra en fonction des besoins/demandes/ressources disponibles. Il ne se destine, pour le moment du moins, pas à des sites qui ont besoin de haute disponibilité : il y a besoin de maturité, tests en production, etc. avant ça.

      J'aimerais bien intégrer ces notions à XMPP même pour commencer, en particulier à Pubsub.

      • [^] # Re: des exemples?

        Posté par  . Évalué à 3.

        Merci Goffi, toujours aussi prompt à répondre aux questions.

        Après, j'imagine que c'est plus le rôle du/des server(s) XMPP (SàT?) que de Libervia dans ce cas-ci.

        • [^] # Re: des exemples?

          Posté par  (site web personnel, Mastodon) . Évalué à 6. Dernière modification le 26 janvier 2018 à 12:43.

          Libervia inclus un serveur HTTP, donc ça serait intéressant de prendre ça en compte à ce niveau aussi, mais c'est à voir bien plus tard.

          Oui côté serveur XMPP et service Pubsub ça serait très intéressant aussi. Il y a déjà eu un peu de travail dessus dans le passé au niveau des salons de discussions (avec distributed MUC et federated MUC). Disons que ça n'est pas la priorité à l'heure actuelle, mais ça pourrait en devenir une dans le futur, surtout si on arrive à transformer l'essai avec le version à venir et qu'on a un peu d'aide (pour mémoire: je suis le seul développeur actif pour le moment).

  • # Interopérabilité avec le Social Web ?

    Posté par  (site web personnel) . Évalué à 1.

    Salut,

    Est-ce que vous avez des plans pour supporter le protocole ActivityPub dans Libervia pour faciliter l'interopérabilité avec le social web ?

    Vu que XMPP comme le Social Web exposent des URIs pour parler des personnes et contenus, j'imagine qu'il doit y avoir moyen d'un côté comme de l'autre de travailler à faciliter les intéractions :)

    • [^] # Re: Interopérabilité avec le Social Web ?

      Posté par  (site web personnel, Mastodon) . Évalué à 9. Dernière modification le 28 janvier 2018 à 14:36.

      ActivityPub ré-invente la roue en refaisant ce que fait déjà XMPP depuis longtemps, et c'est fort dommage, du coup on se retrouve avec un standard de plus alors qu'on aurait pu unir nos efforts.

      Cette remarque faite, j'ai jeté un œil au protocole, et je pense qu'il serait assez facile de faire une passerelle XMPP, et du coup les sites communiqueraient ensemble au prix de ressources supplémentaires (faire des passerelles a un coût par rapport à une communication native, même si a priori je ne pense pas que ça serait énorme dans ce cas). Aussi si plusieurs sites suivent ActivityPub, ça simplifierait le travail (un seul protocole supplémentaire à gérer).

      En tout cas j'aimerais faire une passerelle ActivityPub, mais il faudrait pour cela que la version ait suffisamment de succès pour que j'ai de l'aide sur le développement.

      Dernière petite note: je trouve vraiment dommage d'inclure les notions de « like » et « followers » dans la base du protocole, c'est vraiment se calquer sur ce qui a été imposé par les réseaux propriétaires.

      • [^] # Re: Interopérabilité avec le Social Web ?

        Posté par  . Évalué à 3.

        Ça pose la question des relations entre XMPP et le w3c. Et euh, il y en a ? J’ai un peu l’impression que les deux s’ignorent royalement, et ça me semble un peu dommage.

        Il semble pourtant qu’XMPP soit un standard reconnu par l’IETF et que le principal donateur de l’IETF donne aussi pas mal au w3c si j’en crois Internet : https://www.quora.com/Whats-the-relationship-between-IETF-and-W3C (m’enfin c’était en 2011, je crois que le w3c a perdu de l’influence politique depuis).

        L’IETF ne s’assure pas d’une certaine cohérence entre les technos qu’elle promeut ?

        • [^] # Re: Interopérabilité avec le Social Web ?

          Posté par  (site web personnel, Mastodon) . Évalué à 5.

          Là je t'avoue que je n'en sais pas grand chose. Au niveau XMPP ça se passe entre l'IETF pour les RFCs de base (et des choses bas niveau comme https://tools.ietf.org/html/rfc7395) et la XSF qui a autorité sur les extensions (les fameuses XEPs). Je ne connais pas les liens exacts entre W3C et IETF.

          Ce qui m'intéresse c'est d'avoir un standard libre et relativement bien fait, et j'espère que ça ne se tire pas dans les pattes volontairement (avoir la main sur un standard donne un pouvoir, c'est pour ça qu'il faut faire très attention à ce qu'on utilise).

          • [^] # Re: Interopérabilité avec le Social Web ?

            Posté par  . Évalué à 3.

            Ok, peut être que la bonne approche c’est de tenter de communiquer directement avec ActivityPub pour avoir des infos ou collaborer, alors.

            • [^] # Re: Interopérabilité avec le Social Web ?

              Posté par  (site web personnel, Mastodon) . Évalué à 4.

              (tiens j'ai inversé l'URL et le texte clair dans mon précédent message)
              J'ai déjà été en contact avec un dév de Diaspora qui a contribué à ActivityPub (Jason), mais je pense que les 2 protocoles sont partis pour vivre leur vie séparément (je vois mal comment on peut faire pour collaborer à ce point, les technos sont assez différentes).

              Il est surtout important de faire des passerelles, les différents réseaux libres doivent pouvoir communiquer ensemble. Si j'avais de quoi dégager du temps je serais déjà dessus, mais avec mon rythme actuelle, il va falloir attendre un peu.

    • [^] # Re: Interopérabilité avec le Social Web ?

      Posté par  (site web personnel) . Évalué à 5.

      Peut être que le soucis ici c'est le mot "Web". L'IETF (et XMPP) a vocation à standardiser des protocoles s'appliquant sur le réseau "Internet" alors que le W3C ne s'occupe principalement que ce qui touche au Web (donc, en gros, ce qui est construit sur HTTP).

      Ce que j'ai répété pendant pas mal de temps dans mes conférences c'est que le "Web" et un sous-ensemble de "Internet" (HTTP repose sur TCP…).

      Ce n'est pas un soucis en soit mais XMPP a vocation d'être accessible depuis un nombre d'application bien plus grandes "by design" (ce qui est aussi une critique qu'on lui apporte, les premiers pas sur XMPP sont plus difficiles que de jouer avec une simple API REST/JSON). Aussi essayer de transformer un protocole "connecté" (construit sur des flux) comme XMPP en protocole "déconnecté" (construit sur des requêtes) est bien plus simple que l'inverse.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.