URL: https://linuxfr.org/news/salut-a-toi-gnulinuxfrorg
Title: Salut à Toi (GNU/)LinuxFr.org !
Authors: Goffi
Date: 2011年06月01日T15:21:58+02:00
License: CC By-SA
Tags: xmpp, réseau_social, jabber, sàt, tarot, rmll et debian
Score: 57
Petite note pour les impatients : cette dépêche est longue, aussi vous pouvez directement vous diriger vers les liens pour trouver les captures d’écran et vidéos, ainsi qu’une démo technique de l’interface Web. Autre point important : je cherche de l’aide de toute sorte (développement, graphisme, CSS, don, etc.). Là encore, la fin de la dépêche entre plus dans les détails.
#La présentation « en gros »#
« Salut à Toi » (SàT) est un client [[XMPP]] qui permet d’avoir plusieurs interfaces, qui peuvent être adaptées à un usage ou une plate-forme particulière. Le projet touche à beaucoup de domaines et se veut un terrain d’expérimentation : il est assez difficile à résumer. En vrac, on peut dire que vous y trouverez une interface pour bureau (qui se rapproche d’un client Jabber classique), une interface Web (qui se rapproche de ce que la mode veut appeler « réseau social »), une interface console, une interface en ligne de commande, des jeux, du transfert de fichiers, etc.. Le projet se veut aussi multi-plate-forme et modulaire.
----
[Blog (pour suivre l’évolution)](http://www.goffi.org)
[Vidéo 1](http://www.goffi.org/post/2011/05/02/Pr%C3%A9sentation-vid%C3%A9o-de-Salut-%C3%A0-Toi)
[Vidéo 2](http://www.goffi.org/post/2011/05/08/Pr%C3%A9sentation-vid%C3%A9o-de-Salut-%C3%A0-Toi-2%3A-jeu-de-tarot-et-client-courriel)
[Vidéo 3 + annonce SàT 0.2 & Libervia](http://www.goffi.org/post/2011/05/31/Salut-%C3%A0-toi%2C-le-web-!)
[Page du projet](http://wiki.goffi.org/wiki/Salut_%C3%A0_Toi)
[Démo technique de Libervia](http://www.libervia.org)
[Listes de diffusion](http://lists.goffi.org/)
[Wiki sur les différents projets](http://wiki.goffi.org)
----
#Avant de commencer, un peu de vocabulaire#
- [[XMPP]] : bon, je suppose que si vous êtes ici vous savez ce que c'est, mais en gros il s’agit d’un protocole libre de communication (messagerie instantanée, mais pas seulement, loin de là !).
- [[Jabber]] : alors là, il y a ~~troll~~débat entre ceux qui disent que Jabber est juste l’ancien nom de XMPP et ceux qui disent que XMPP c’est le protocole, Jabber le réseau fédéré. Si vous voulez vous lâcher sur la définition, allez-y ! Moi, ça me passe un peu au dessus de la tête. :)
- [[XEP]] : XMPP Extension Protocol : des extensions au protocole XMPP.
- [[RFC]] : Request For Comments : documentation technique pour Internet.
- roster : liste de contacts avec souscriptions.
- groupes : dans votre _roster_, vous pouvez assigner vos contacts à des groupes (plus proche d’une étiquette que d’une catégorie).
- [[IMAP]] : protocole pour récupérer et lire (et gérer) les courriers électroniques en les laissant sur le serveur.
- [[SMTP]] : protocole majeur de transfert de courriel.
- [[Maildir]] : format de stockage d’une boîte de courriel.
- [[MUA]] : Mail User Agent, ce qu’on appelle souvent (à tort) client de courriel.
- [[IPC]] : Inter-Process Communication, des mécanismes permettant à des processus de communiquer.
- [[DBus]] : un type d’[IPC](http://fr.wikipedia.org/wiki/Communication_inter-processus) développé par _freedesktop.org_ et utilisé comme standard par la majeure partie des applications de bureau libres.
#Les licences#
L’archive SàT (comprenant le démon, Primitivus, Wix et jp) sont sous [GPL](http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU) v3+.
Libervia (interface Web) est sous licence [[AGPL]] v3+.
`urwid-satext` (composants Urwid pour Primitivus) est sous [[LGPL]] v3+.
#Partie technique#
_Salut à Toi_ est un client XMPP / Jabber basé sur une architecture démon / frontal (_daemon / frontend_), comprendre que le métier est côté démon, et la vue est côté frontal.
Les deux sont reliés par une IPC, appelé pont (_bridge_) dans le projet : pour le moment, c’est D-Bus qui est utilisé, mais il serait très aisé d’utiliser autre chose.
Tout est codé en Python, mais il est possible d’utiliser d’autres langages, en particulier pour les frontaux : il suffit de pouvoir communiquer avec D-Bus. Ainsi, une interface Qt en C++ est actuellement dans les cartons.
Le serveur est modulaire : le cœur se concentre principalement sur les RFC, et la plupart des XEP sont implémentées via des extensions (plugins).
Un système d’interface générique légère en [[XML]] est utilisé pour qu’une extension puisse avoir une interface qui sera affichée différemment selon le frontal. Ce système est utilisé par l’extension [[_couchsurfing_]], ce qui permet d’avoir une interface d’envoi de messages à la fois sur le client de bureau (Wix) et sur le client console (Primitivus).
Pour les interfaces plus complexes, elles sont développées séparément dans les différents frontaux. C’est le cas du jeu de Tarot : le moteur est commun et implémenté dans le démon, et l’interface est développée séparément dans Wix et dans Primitivus, ce qui permet d’être vraiment adapté aux spécificités (le jeu de Tarot en console se joue facilement au clavier, et les cartes sont relativement lisibles malgré l’utilisation de texte uniquement).
Le côté réseau est basé sur le réputé [[Twisted]], c’est un choix qui a plusieurs avantages : l’architecture de Twisted est à mon sens excellente (tout est asynchrone, fonctionnement sur une seule boucle), et cette bibliothèque est extrêmement complète et supporte un nombre impressionnant de protocoles, ce qui permet de développer rapidement des fonctionnalités qui touchent au réseau.
Par dessus Twisted est utilisé Wokkel, développé par un développeur de Twisted (et membre actif de la communauté XMPP) en vue de son intégration à celui-ci.
Le choix des technologies permet de tester (prototyper) rapidement une idée : grâce à Python et Twisted, j’ai pu développer un serveur IMAP / SMTP en quelques jours (voir par ailleurs). Libervia, le client Web, est lui-même développé à 100 % en Python, grâce à [Pyjamas](http://pyjs.org/), ce qui permet un développement très rapide.
D’autre part, l’architecture permet d’avoir des interfaces adaptées à un usage ou une plate-forme, de manière plus poussée qu’une interface graphique générique multi-plate-forme.
Le démon permet à SàT de fonctionner **sans interface graphique**, très utile sur un serveur, ou de sortir d’une interface graphique en laissant le client tourner en fond (pour finir un transfert de fichier par exemple).
##Un seul et même client##
C’est un point important, et j’insiste là-dessus : le projet SàT ne forme **qu’un seul et même client**. Autrement dit, si vous envoyez un message à travers une interface, il apparaîtra dans les autres comme si vous l’aviez entré. Ceci permet plusieurs choses : déjà vous ne créez et paramétrez qu’une fois vos profiles, ensuite si une fonctionnalité n’est pas prise en charge dans une interface, vous pouvez en utiliser une autre de manière transparente.
Des choses inédites peuvent également être envisagées : par exemple, une interface peut ne gérer qu’un seul composant (par exemple, la liste de contacts _roster_) et le faire bien (dans la philosophie Unix), tandis qu’une autre ne fera qu’afficher les fenêtres de discussions.
#Les différents frontaux#
Je vais les présenter rapidement, vous pouvez avoir des descriptions plus détaillées par ailleurs (Wiki, anciens journaux, etc.).
##Wix, le frontal bureau classique##

Surtout utilisé comme référence pour les implémentations, Wix n’est pas le plus intéressant en cela qu’il est très classique (et un peu moche, il faut le dire ;)). Cependant, il a pour but de fournir tout ce qu’on attend d’un client complet, et de fonctionner sur la plupart des plates-formes de bureau. Il est possible qu’il prenne une orientation un peu plus originale à l’avenir.
##Primitivus, le frontal console##

Celui-ci est destiné aux amoureux de la console, ou au cas où un serveur graphique n’est pas disponible. Primitivus a une interface relativement lisible et dégagée, la vidéo liée plus bas montre un peu plus clairement son fonctionnement (première vidéo).
Primitivus a été développé autour d’Urwid, une excellente bibliothèque de création d’interfaces console, et plusieurs composants (_widgets_) on été développés à cette occasion. Constatant que ces composants pouvaient servir à d’autres projets, ils ont été mis dans un projet séparé (Urwid-satext pour _Urwid’s SàT extension_) et placés sous LGPL à la demande de l’auteur d’Urwid.
##_jp_, l’outil en ligne de commande##

_jp_ est un peu un couteau suisse, il a des tas de fonctionnalités potentielles. Un des usages principaux, est l’envoi simple et efficace de fichiers : j’utilise bien plus la console que les interfaces graphiques, et c’est souvent relativement énervant de devoir passer par _x_ boîtes de dialogue pour envoyer un simple fichier à un contact, alors que je suis dans le Shell. Avec _jp_, je peux l’envoyer en une ligne (`jp fichier monjid@serveur.tld`), avec une syntaxe qui sera d’autant plus rapide à utiliser quand les complétions automatiques seront adaptées, et que certains raccourcis seront utilisables (je compte permettre bientôt l’utilisation d’une syntaxe type `« jp fichier pierre »`).
D’autre part, _jp_ permet aussi de rediriger, via un tube (_pipe_), les sorties des commandes Unix. Les cas d’utilisations sont très nombreux, et ça en fait un outil idéal pour les scripts (il devient par exemple très facile à votre serveur de vous prévenir à la fin d’une longue tâche, ou de vous envoyer des journaux d’activité via XMPP).
L’outil va progressivement gérer d’autres fonctions, comme la publication d’articles ou de _micro-blogs_, par exemple.
Là encore, la vidéo liée montre l’état actuel de l’outil (1re vidéo).
##Libervia : le petit nouveau qui a de l’avenir##

J’ai attendu de développer ce frontal pour publier cette dépêche. Libervia est un frontal Web, et je compte lancer rapidement un site éponyme qu’il animera.
Le but assumé est de fournir une alternative respectueuse de la vie privée et des utilisateurs, aux services populaires privés et massivement centralisés actuels, mais aussi d’expérimenter, tant au niveau de l’interface que des fonctionnalités.
De nombreuse choses sont à dire ici, comme la gestion des droits centrée sur l’utilisation des groupes, l’interface dépouillée et à composants (_widgets_), la barre de saisie universelle, l’indicateur visuel qui montre clairement qui pourra voir votre message, etc..
Non seulement tout ceci est expliqué dans la 3e vidéo, mais en plus, une version de démonstration est accessible en ligne (voir plus bas). Je vous recommande toutefois fortement de voir la vidéo avant de tester.
J’aimerais une ouverture définitive du site en juillet (oui, d’ici un mois !), mais ce ne sera possible qu’avec de l’aide (voir plus bas).
#Quelques fonctionnalités en vrac#
Outre les fonctionnalités inhérentes à l’architecture et aux technologies utilisées (multi-interface, multi-plate-forme, modularité, prototypage rapide, etc.), SàT permet en l’état actuel de :
- utiliser votre client de courriel (MUA) pour lire et envoyer vos message XMPP. En effet, 3 extensions de SàT lui permettent d’avoir une gestion de Maildir, d’IMAP et de SMTP. L’idée était de réutiliser l’existant qui est parfaitement adapté pour les messages de type « normal », en attendant de développer cette gestion dans les interfaces. A terme, il devrait être possible d’utiliser XMPP comme alternative au courriel (cf [mon billet à ce sujet, qui explique cela en détails](http://www.goffi.org/post/2011/01/18/Recevez-et-envoyez-vos-messages-XMPP/Jabber-avec-votre-lecteur-de-courriel-gr%C3%A2ce-%C3%A0-Salut-%C3%A0-Toi-!)) ;
- pas grand-chose à voir avec XMPP, mais une extension permet d’envoyer des messages sur `couchsurfing`. C’était surtout un prétexte pour utiliser l’interface XML que j’ai mentionnée plus haut ;
- récupérer plusieurs fichiers d’un coup : `jp`, l’outil en ligne de commande, permet (entre autres) d’envoyer facilement tout un dossier d’un coup et de manière standard en le compressant, mais aussi de récupérer plusieurs fichiers à la suite, sans avoir à confirmer à chaque fois ;
- [[microblog]] : Libervia permet le micro-blogage, non seulement d’une façon classique (ouverte à tous), mais aussi par différents flux privés. C’est un point extrêmement important pour la vie privé, et il se veut simple à utiliser (une gestion trop compliquée des droits risque de limiter leur utilisation, c’est d’ailleurs une technique utilisée pour volontairement limiter leur usage par certains services).
Le _roster_ est au centre de son fonctionnement : les groupes — présents de base dans les RFC — permettent de bien séparer les informations que vous envoyez. Vous pouvez (si vous le désirer, bien entendu), envoyer des messages (et bientôt photos, fichiers, etc.) uniquement à vos amis, ou à votre famille, vos collègues, etc.. Il y a également un flux public, ouvert à tous, y compris ceux qui n’ont pas de compte XMPP.
À noter que d’autres clients, en particulier Jappix, travaillent aussi sur le micro-blogage. On se contacte de temps en temps, et j’espère que nous pourrons unir nos efforts pour offrir un support digne de ce nom à cette fonctionnalité sur XMPP.
- un jeu de Tarot : quand vous êtes malheureusement trop loin pour jouer autour d’une table.


#Les Jeux#
Les jeux sont une part importante du projet, et plusieurs sont déjà planifiés :
- Le jeu de Tarot était un tir d’essai afin d’élaborer une XEP générique pour les jeux de cartes. L’idée est d’utiliser XMPP comme plate-forme pour jouer aux jeux de cartes avec ses amis. La XEP doit permettre d’utiliser tout type de jeu de cartes (54 / 52 / 32 cartes traditionnelles européennes, de Tarot, italiennes, etc.), et tout type de règles ;
- J’envisage à assez court terme de faire la même chose pour les jeux de plateau ; enfin, déjà les jeux qui se jouent avec un tablier type damier ou proche. Un jeu de [[Xiangqi]](échecs chinois) est prévu assez rapidement ;
- Dans les cartons est aussi prévu un jeu de questions-réponses (_quiz_) travaillé graphiquement et rapide à jouer à ses heures perdues ;
- à plus long terme, on peut tout envisager, y compris des jeux temps réel.
#Le contrat social#
Peut-être le point le plus important de tout le projet : un contrat social a été rédigé, et définit les engagements pris vis-à-vis de ses utilisateurs. Vous pouvez le trouver [en ligne](http://www.libervia.org/contrat_social.html) ou le lire directement depuis Libervia.
#Et maintenant ?#
Les deux gros chantiers dans l’avenir proche sont la finalisation des fonctionnalités actuelles et la stabilisation du code.
J’ai atteint le premier stade que je visais : les grandes lignes du projet sont tracées. Maintenant j’aimerais prendre un peu de temps pour poser un peu les choses, revoir ce qu’il y a à revoir. En particulier, nettoyer les petites _bidouilles_ à droite à gauche, le style de codage, les tests qui sont insuffisants, mettre sur pieds des automates de test avec les différents serveurs XMPP disponibles, finir les choses à moitié faites, etc..
C’est le moment idéal pour venir donner un coup de main :).
Mais de nouvelles fonctionnalités sont déjà prévues à court terme : en particulier, le partage de photos et le jeu de _quiz_ précédemment mentionné.
#Vous voulez participer ?#
Eh bien, toute l’architecture pour gérer les contributions est déjà en place.
D’autre part, le projet touche d’autres projets très intéressants, comme [Twisted](http://twistedmatrix.com), [Wokkel](http://wokkel.ik.nu/), [Urwid](http://excess.org/urwid/), [Pyjamas](http://pyjs.org/), etc.. Ce peut être l’occasion de les découvrir ou se perfectionner avec, et j’espère, d’y contribuer également.
##Les aides qu’il faudrait##
- des développeurs ! Il commence à y avoir trop de choses à gérer pour moi tout seul. En particulier, j’ai besoin de monde pour les ports sur les autres architectures (*BSD, Android, Mac OS X, Windows, etc.). Tout ayant été développé en utilisant des technologies portables, cela devrait demander un travail raisonnable ;
- des testeurs : il faut que SàT fonctionne avec la plupart des butineurs, la plupart des serveurs XMPP, la plupart des plates-formes ; et il faut tester pour ça ;
- des graphistes : il y a de nombreuses choses à faire : icônes, conception visuelle, etc.. Quelqu’un m’aide sur ce point depuis peu (Raiden), et il a déjà fait des maquettes pour le site qui sont très encourageantes ; comprendre que l’aspect va s’améliorer rapidement ;
- des CSS : Libervia devrait offrit différentes présentations ;
- des traductions ;
- des dons : à supposer que le projet ait du succès, est-ce que vous seriez prêt à donner un peu ? Dois-je mettre en place un système de don ?
- etc.
Si vous êtes intéressé, commencez par vous inscrire à une des listes de diffusion, elles sont disponibles sur