Tech Blog.

Thoughts, stories, ideas.

Matrix

7. April 2017

Matrix est un protocole qui met sa fonctionnalité principale sur le chat. Le protocole est conçu pour relier des solutions de chat existantes telles que XMPP (Jabber), IRC ou Mattermost.

Comparaison XMPP

XMPP a fondamentalement la même idée, une différence est la structure du protocole. XMPP a une base RFC et peut être étendu avec plusieurs XEPs. Cela rend le protocole très complexe et chaque serveur peut implémenter différents XEPs. En revanche, Matrix se compose d’une RFC dans laquelle tout est spécifié. Si de nouvelles fonctionnalités sont ajoutées, le protocole de base lui-même doit être étendu avec un RFC plus récent.

Fonctionnalité

Le protocole est basé sur HTTP. Chaque canal et chaque client sont affectés à au moins un serveur. Par exemple, le serveur example.com possède le canal foo, qui s’appelle “#foo:example.com“ selon le schéma de nommage correspondant. Mais ce canal peut être réparti sur plusieurs serveurs, de sorte qu’il peut également être rendu disponible par exemple via “#foo:example.org“. Ceci a l’avantage qu’un canal est toujours disponible même si un serveur tombe en panne.

Si un message est envoyé à un serveur, il est ensuite transmis à chaque serveur sur lequel un utilisateur a également activé cette salle.

Ponts

Par exemple, il existe une passerelle IRC que le réseau IRC Freenode rend disponible sur Matrix.org. Si vous rejoignez le canal “#freenode_#ansible:matrix.org“, on dirait qu’un nouvel utilisateur rejoint le canal “#ansible“, il y a une connexion par utilisateur et serveur IRC depuis le serveur Matrix.org. Du côté de Matrix, l’ensemble se présente comme un canal matriciel normal.

Actuellement, plusieurs ponts sont déjà disponibles. Voici un aperçu de la situation actuelle.

Service d’identité

Chaque utilisateur a une identification d’utilisateur matricielle, qui suit le schéma “@user:domain“, par exemple “@bob:matrix.org“. Les comptes matriciels sont stockés sur le serveur domestique correspondant. Pour lier les comptes Matrix à d’autres comptes, le service d’identité existe. Actuellement, seul Vector.im existe en tant que fournisseur de services d’identité connu. Toutefois, cette fonction est facultative, car les comptes réels sont situés sur les serveurs respectifs et seuls les liens vers d’autres comptes (en dehors de Matrix) y sont stockés.

Implémentations

Puisque Matrix est un protocole, il a encore besoin d’implémentations. Trois composants peuvent être visualisés séparément : les serveurs, les clients et les ponts.

Serveur

L’implémentation de serveur la plus courante est Synapse, qui est implémentée en Python. Ceci est fourni par les développeurs de protocole comme leur implémentation de référence.

Ponts

Il existe déjà un pont dans des réseaux très différents. Le plus courant est probablement l’IRC, dont il existe déjà plusieurs produits. La liste des réseaux pris en charge est déjà longue et des passerelles vers XMPP, Mattermost, Slack ou GitHub peuvent donc être utilisées.

L’intégration des ponts avec l’interface web riot.im est très simple. L’activation d’un nouveau bot fonctionne de la même manière que la création d’un nouveau canal et l’ajout du bot correspondant. Pour cela, il y a un point de menu “Gérer les intégrations” dans les Réglages de la salle. Ces ponts sont fournis par Riot, mais la sélection est limitée. Si vous voulez ajouter d’autres robots et passerelles ou si, par exemple, un réseau IRC n’est pas disponible, le robot ou la passerelle correspondant doit être fourni.

Clients

Il y a déjà beaucoup de clients. Synapse est livré avec une petite interface web. L’une des interfaces les plus courantes est Riot, qui est disponible sous forme d’application Web, d’application Android et d’application iPhone. Riot est une application web pure, qui accède à l’API de Matrix. Il n’a pas de base de données elle-même ou de données persistantes en arrière-plan.

Un autre client est[WeeChat](https://weechat.org/), pour lequel il existe un[Plugin](http://matrix.org/docs/projects/client/weechat.html). C’est intéressant pour tous ceux qui aiment servir un client dans la console.

Perspectives

Matrix facilite l’accès aux différents protocoles existants via un seul protocole. La possibilité de choisir le client vous-même est un atout supplémentaire.

Diverses implémentations sont encore en phase alpha à bêta. Cela limite considérablement le choix des composants individuels.

Le protocole ne connaît qu’un ensemble réduit d’en-têtes HTTP. Par exemple, le Server Name Indicator (SNI) n’est pas implémenté, ce qui signifie que Matrix ne peut être utilisé derrière un reverse proxy que dans certaines circonstances.