Journal La première bêta de Slidge (passerelles XMPP) est dehors !

Posté par  (site web personnel) . Licence CC By‑SA.
30
4
sept.
2022

Note: ceci est la traduction de ce billet de mon blog, avec plus de blagues reloues dedans parce que je suis quand même plus à l'aise en français.

Après un an et demi de travail ~acharné (presque autant que pour un album d'Asterix), une très longue pause et quelques ré-écritures, c'est avec joie et fierté que je vous annonce une nouvelle révolution dans le monde de l'informatique, et dans l'histoire de l'humanité en général, la sortie de la première bêta de Slidge.

Noël est en avance cette année

Slidge? Kekecé?

Slidge te permet d'utiliser ton client XMPP habituel pour parler à tes potes qui n'ont pas encore entendu parler de notre seigneur et sauveur XMPP et qui utilisent d'autres réseaux de messagerie instantanés "historiques". C'est un composant serveur XMPP, qui se comporte comme un client alternatif pour l'autre réseau tout pourri (=pas XMPP), en utilisant ton compte sur cet autre réseau. Tes potes "historiques" ont un "JID marionnette" (gros-naze@msn.example.com) et tu leur parles en oubliant que ces nazes t'ont dit que tu étais relou la dernière fois que tu as entamé ta diatribe sur les protocoles ouverts, la décentralisation, et Meta qui tue des bébés phoques; et qu'ils ont refusé d'essayer Quicksy sur leur ordiphone.

Slidge à proprement parler n'est en réalité qu'une bibliothèque, et n'est utile pour un utilisateur final qu'à travers ses plugins. Bonne nouvelle, il existe déjà des plugins pour 7 différents réseaux tout pourris (+ 1 pour être notifié de réponses à ses commentaires sur hackernews, mais c'est vraiment un gadget).

Mais pourquoi tu as fait ça?

Après avoir découvert la messagerie instantané avec mIRC, ICQ et ensuite MSN dans les années 90/début 2000, j'ai été émerveillé par pigdin et j'en ai été un utilisateur ravi pendant des années (et j'ai sacrément impressionné du monde avec son mode "madame Irma").

Mais depuis quelques années, depuis que j'ai finalement cédé aux sirènes de la téléphonie mobile intelligente, j'étais assez frustré de ne pas avoir la même chose, mais en mode "multi périphériques" (waou).

Heureusement, c'est possible -théoriquement- avec les passerelles XMPP, mais à part l'excellent biboumi pour IRC, ça n'a jamais marché aussi bien que j'aurais voulu, pour les réseaux tout pourris qui m'intéressent, du moins. Spectrum2 est le logiciel généralement recommandé pour les passerelles XMPP, mais il n'est plus tellement mis à jour et notamment, ne compte pas implémenter les nouveaux trucs modernes™ comme les réactions aux messages (que je trouve pas aussi inutiles qu'elles n'y paraissent à première vue; seul movim les implémente à ma connaissance, j'espère que d'autres clients suivront).

Mais ça marche vraiment?

Pour moi oui.
Mais pour l'instant que pour les messages directs; les groupes devraient faire partie de la version 0.2.0, un jour.

Je serais ravi si vous le testiez chez vous et/ou que vous jetiez un œil au code source. Je suis avide de retours de tout types, rapports de bogue comme critiques sur l'implémentation, les technos utilisées, le style, n'importe quoi ! Écrire du code un peu moins dégueu est une des raisons qui m'ont poussé à m'investir dans ce projet, et je suis pas susceptible (enfin pas trop, quoi).

Des détails techniques

Slidge est écrit en python asynchrone, avec slixmpp. J'essaye d'y utiliser mypy de manière intelligente, et y a même quelques tests (trop peu…) qui se lancent avec pytest.

Mon plan c'est de rendre l'écriture de plugins facile avec l'interface des plugins, qui devrait raisonnablement abstraire les spécificités de XMPP et exposer des méthodes et classes faciles à utiliser. Normalement, grâce à la richesse de l'écosystème python, les plugins ne devraient être que de fines couches entre bibliothèques spécifiques à un réseau tout pourri et l'interface des plugins.

Captures d'écran

Plutôt que de tristes captures d'écran de logs, voici movim (gauche) et l'application signal officielle (droite):

Gauche: movim; droite: application de bureau signal

C'est-y pas trop cool ? Ça marche aussi avec n'importe quel autre client XMPP, et du coup c'est encore plus cool.

Mais comment je fais pour l'essayer ?

Le plus simple c'est d'utiliser des conteneurs, comme moi sur mon serveur XMPP perso, mais il y a aussi un paquet pypi pour ceux qui préfèrent.

Cloner le dépôt git et tout essayer localement est très facile avec docker-compose, qui lance un serveur XMPP de test localement et un client XMPP dans le navigateur.

Faire ça est une très bonne idée, comme ça vous aurez déjà votre environnement de développement tout prêt pour réparer le bug que vous avez trouvé et/ou implémenter une nouvelle fonctionnalité. ;-)

  • # Très cool

    Posté par  . Évalué à 5.

    Sans blague, super idée, super projet de se focaliser sur l'interopérabilité.
    XMPP me faisait briller les yeux en 2005, je l'ai utilisé pendant longtemps, et puis j'ai cédé aux sirènes de Matrix/Element pour son côté « moderne ».
    Mais j'ai quand même gardé mon serveur XMPP, avec un relais entre mon salon anonyme ouvert (saurez-vous le trouver) et un salon Matrix. Parce que je trouve ça bête d'avoir deux protocoles ouvert qui ne se parlent pas.

    • [^] # Re: Très cool

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

      Bête, je suis bien d'accord, d'ailleurs https://todo.sr.ht/~nicoco/slidge/27

      J'ai choisi XMPP plutôt que matrix car j'aime bien le côté 'fonctionne avec peu de ressources' aussi bien côté serveur que (certains) clients.

      Merci pour tes encouragements !

    • [^] # Re: Très cool

      Posté par  (Mastodon) . Évalué à 2.

      mautrix supporte également plus de protocoles, comme par exemple whatsapp qui est presque devenu incontournable (mais qui nécessite tout de même d'avoir l'app whatsapp android qui tourne quelque part même si ce n'est pas sur son propre téléphone.)

      • [^] # Re: Très cool

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

        En effet, mautrix supporte tout un tas de trucs, d'ailleurs j'utilise leur boulot pour le plugin slidge Facebook.

        app whatsapp android qui tourne quelque part même

        C'est pour ça que j'ai pas beaucoup creusé plus loin, pour l'instant je survis encore en étant "le relou qui a pas whatsapp". Mais ça ne devrait pas être trop compliqué de faire le plugin slidge-whatsapp. J'ai décidé de ne pas ajouter de plugins supplémentaires pour l'instant, j'ai ce que je voulais et je veux me concentrer sur l'amélioration de slidge "core", notamment en factorisant un peu des trucs qui se répètent dans plusieurs plugins, et en réglant les bugs que certains peuvent rencontrer.

        Personnellement, j'aime mieux utiliser XMPP qui est ratifié par l'IETF et a une gouvernance démocratique, et est globalement beaucoup plus simple (et c'est une bonne chose, informatique verte, tout ça) que Matrix.

        Mais c'est bien qu'il y en ait pour les goûts. ;)

      • [^] # Re: Très cool

        Posté par  . Évalué à 8.

        Le problème de Matrix c'est la partie serveur qui pèche un peu : matrix-synapse est un énorme consommateur de ressources. Il y a bien une palanquée de serveurs alternatifs, certains en Python (raté pour les perfs), d'autres en Rust, en passant par du Go, mais aucun n'est dispo dans les dépôts de Debian stable. Personnellement, par simplicité, en dehors de quelques rares webapps, je n'utilise pas de services qui ne soient pas disponibles dans les dépôts.
        Du coup, finalement, un bon vieux Prosody n'est pas un si mauvais choix pour faire ses passerelles vers d'autres services.

        Emacs le fait depuis 30 ans.

        • [^] # Re: Très cool

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

          pas de services qui ne soient pas disponibles dans les dépôts

          Je te comprends, c'est tellement chouette un petit apt update && apt upgrade pour pas se prendre la tête. Malheureusement c'est pas (encore?) le cas pour slidge. Cependant, avec podman des dépôts debian, on peut faire tourner slidge comme un service systemd "presque normal", et c'est pas si mal.

  • # Super

    Posté par  (site web personnel, Mastodon) . Évalué à 6. Dernière modification le 05 septembre 2022 à 16:21.

    Super de voir des nouveaux projets dans les passerelles, et de voir que que tu cherches à faire une belle intégration avec des fonctionnalités récentes.

    Est-ce que tu comptes te concentrer sur les messages, ou tu envisages à terme de faire des passerelles vers les blogs (XEP-0277) aussi ?

    Petit détail : ça serait pas mal dans ton tableau de mettre en plus de l’icône le nom de la fonctionnalités (soit en tooltip, mais c'est pas super accessible et ça ne va pas sur appareils tactiles, soit écrit quelque part). Il y a un lien vers les XEP concernées ce qui est super, mais c'est très technique pour l'utilisateur lambda, et tout le monde ne connaît pas tous les numéros des XEPs par cœur (et ça éviterait de cliquer pour chaque colonne du tableau).

    Bravo et bonne continuation.

    • [^] # Re: Super

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 05 septembre 2022 à 17:53.

      Merci Goffi pour ton soutien! Mon plan c'est de me concentrer sur les messages parce que c'est dont j'ai besoin (enfin besoin c'est un grand mot, c'est ce que je veux, quoi).

      XEP-0277 c'est ce qu'utilise movim, c'est bien ça ? Mon petit doigt me dit qu'il y a déjà une passerelle activitypub/xmpp en cours de préparation par des gens plus compétents que moi. ;-)
      Tu pensais à quelque chose en particulier ? Facebook, Twitter, par exemple ? Ça a l'air horrible, donc j'ai envie d'essayer maintenant.

      Plus sérieusement, il faut que je jette un œil à pubsub/PEP parce que je n'y connais rien, mais que j'aimerais bien gérer avatar/pseudo/détails de manière propre, ça serait un premier pas.

      Oui, ce tableau est pourri, les icônes ne marchent même pas tous sur Firefox de mon macbook (du boulot, j'ai pas eu le choix, pas taper), mais le texte entier ça fait un tableau trop large trop moche. Juste une légende en dessous c'est probablement une bonne idée, je vais faire ça.

      • [^] # Re: Super

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

        XEP-0277 c'est ce qu'utilise movim, c'est bien ça ? Mon petit doigt me dit qu'il y a déjà une passerelle activitypub/xmpp en cours de préparation par des gens plus compétents que moi. ;-)

        Oui voilà c'est ça. La XEP-0277 en elle même n'est pas bien compliquée (c'est surtout un moyen de mettre des éléments Atom dans XMPP), mais pour une passerelle ça signifie qu'il faut faire un serveur pubsub. C'est un peu de boulot, mais une fois fait c'est réutilisable, il faut voir que que slixmpp propose là dessus.

        C'est bien plus adapté que les messages pour tout ce qui se rapproche d'un blog/microblog/forum, surtout quand il y a des réponses voire des arbres (comme Reddit, HackerNews… ou LinuxFr par exemple).

        Effectivement c'est ce que j'utilise pour la passerelle ActivityPub, et j'aimerais bien à terme l'utiliser pour une passerelle avec les courriels et notamment les listes de diffusion.

        Tu pensais à quelque chose en particulier ? Facebook, Twitter, par exemple ? Ça a l'air horrible, donc j'ai envie d'essayer maintenant.

        J'ai vu FB dans ton tableau, c'est pour ça que je me suis posé la question, mais je suppose que c'est le messenger que ton projet gère.

        Oui, ce tableau est pourri, les icônes ne marchent même pas tous sur Firefox de mon macbook (du boulot, j'ai pas eu le choix, pas taper), mais le texte entier ça fait un tableau trop large trop moche. Juste une légende en dessous c'est probablement une bonne idée, je vais faire ça.

        Oui une légende c'est très bien, et ça permet de mettre un peu plus de texte pour expliquer si nécessaire.

        Bonne continuation en tout cas, j'espère que ton projet va avoir une longue vie :)

        • [^] # Re: Super

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

          Pas de plugin XEP-0277 dans slixmpp, mais j'ai qu'à contribuer. J'avoue que pubsub me fait un peu peur et que mes clients habituels ne permettent pas grand chose avec; cependant c'est un problème de poule et d’œuf.

          Je n'avais pas pensé pas que ça pourrait être adapté aux discussions arborescentes, mais l'idée a l'air très cool, pour linuxfr, hackernews et reddit, en effet. J'aimerais vraiment me consacrer aux MUCs (et MIX? pas sûr) dans un premier temps (enfin dans un second temps, dans un premier, j'aimerais peaufiner un certain nombre de trucs).

          Pour facebook en effet c'est en fait messenger. Je pense que récupérer le "flux d'actualité" ou je sais pas comment ça s'appelle maintenant risque d'être vraiment galère, je n'y crois pas trop.

          Salut à toi et encore merci pour tes encouragements.

  • # Et pour les MUC ?

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

    Merci pour cette passerelle, ça a l'air d'être assez transparent pour les utilisateurs, une fois installé et de ce que je vois des copies d'écran. Par contre ça demande de gérer son propre serveur xmpp ou que l'admin de notre instance mette cette passerelle en place, si j'ai bien compris ?

    Pour l'implémentation des groupes, comment tu envisage ça le jour où tu t'y attaque ? Pour le moment tout ce que j'ai testé est inconfortable au possible, avec un bot qui parle et préfixe chaque message du nom de l'intervenant, c'est super lourd visuellement. Et suivant les réseaux c'est en plus assez compliqué à mettre en place… Je rêve de juste paramétrer un plugin sur mon client xmpp favori (en entrant mes identifiants de la plate-forme visée), et qu'ensuite si je décide de me connecter à un salon mattermost/discord/rocket chat/autre, alors l'affichage serait le même que sur un salon xmpp : juste le nom de la personne qui cause et son message. Mais je ne sais pas si c'est possible.

    La difficulté aussi c'est que ces réseaux implémentent des discussions en fil. Personnellement ça me gave, je n'aime vraiment pas ce genre de chose, mais bon si un groupe les utilisent, il faut faire avec… Là, je ne sais pas trop si XMPP pourrait gérer ce genre de chose, tu as déjà exploré le sujet ?

    • [^] # Re: Et pour les MUC ?

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

      de ce que je vois des copies d'écran

      Bon je suis comme tout le monde, j'ai pris une capture d'écran où ça marche vraiment bien, mais bon parfois il peut y avoir des trucs bizarres qui arrivent quand même, hein. En tout cas je l'utilise et ça me va bien. Pour l'instant j'ouvre un peu les clients officiels de temps en temps pour vérifier que j'ai rien loupé, mais ça n'a pas eu trop l'air d'arriver depuis un moment, d'où ma décision de tagger ça "beta0".

      ça demande de gérer son propre serveur xmpp ou que l'admin de notre instance mette cette passerelle en place

      Oui. Si ce n'est pas ton propre serveur, l'admin pourra lire tes messages et/ou se faire passer pour toi, donc l'auto-hébergement est vraiment très encouragé. Enfin bon, c'est chouette aussi de se faire confiance entre êtres humains, ça me saoule un peu quand l'inquiétude pour la vie privée/sécurité glisse vers la défiance généralisée envers autrui. Bref…

      implémentation des groupes, comment tu envisage ça

      Vaste sujet! Pour la petite histoire, ma première itération de slidge, avant la longue pause, incluait les MUCs, mais c'était beaucoup trop ambitieux, surtout que je suis pas un vrai dev (je fais de la 'science des données' (wouaou), je sais pas si tu as déjà vu le genre de code que les gens comme moi sont payés pour pondre, ben c'est pas joli joli). J'ai finalement trouvé plus raisonnable de me concentrer sur les messages directs pour l'instant.

      Je compte essayer de faire ça aussi bien qu'avec les super passerelles comme biboumi ou aria-net, avec lesquelles chaque participant apparaît comme un utilisateur XMPP normal. C'est vraiment très laid le bot qui préfixe ses messages par le nom de celui qui l'a posté, pas de ça chez moi! ;)

      Il y a plusieurs difficultés. Sur XMPP, tu es sur un MUC avec une ressource (un client) bien défini, contrairement à la plupart des réseaux dont le fonctionnement est plus proches des MIX, mais que très peu de clients XMPP implémentent (et qui ne font pas l'unanimité dans la communauté, si j'ai bien compris). Il faut que je trouve une manière élégante de gérer tout ça, normalement avec les bookmarks MUCs ça devrait être possible, mais je ne suis pas encore sûr du comportement souhaitable. Idéalement, j'aimerais bien que tu puisses voir tous les groupes auxquels tu as accès via service discovery, ou bien Jabber Search, ou quelque chose du genre…

      discussions en fil

      Je crois que Movim l'implémente, et je comptais expérimenter un peu avec un de ces 4, mais j'ai pas mal de lecture de XEP à faire avant de commencer. Parce que bien sûr je ne me lance jamais dans une implémentation sans avoir tout lu. Je suis crédible ?

Suivre le flux des commentaires

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