Table des matières

Cette page est là uniquement pour servir de mémo. C'est une ancienne version qui a servie en interne avant la mise en place du serveur chez Arise. Une meilleure présentation technique est prévue.

Matrix

Protocole de communication décentralisé et fédéré (comme le mail).

Matrix permet de synchroniser un historique de messages sous format JSON entre plusieurs serveurs. Les messages sont regroupés par canaux (ou channels). L'usage principale aujourd'hui est la communication instantanée textuelle et la visio conférence, mais on peut imaginer d'autre chose (IoT, RV, …).

Un serveur publique officiel est disponible à l'adresse matrix.org. Une liste non officielle des serveurs (publics et privés) existe aussi : https://www.hello-matrix.net/public_servers.php. Le serveur Arise arrive bientôt 😉

C'est un protocol fédéré, ce qui veut dire qu'un channel est partagé entre tous les serveurs qui ont au moins un user faisant partie du channel. Imaginons par exemple :

Si mon serveur cervoi.se disparaît, Alice et Bob peuvent toujours communiquer ensemble. Par contre, plus personne ne peut rejoindre le channel vu que son adresse est #coucou:cervoi.se et que cervoi.se ne répond plus. Pas de problème, Alice (ou Bob) peut créer une adresse #nimportequoi:alice.fr rendant de nouveau ce channel accessible depuis l'extérieur.

Concrètement, une adresse (appelé alias dans le jargon Matrix) n'est qu'un pointeur vers un channel, qui dispose d'un identifiant interne (appelé MXID) caché à l'utilisateur. La channel #matrix:matrix.org dispose par exemple de plus de 30 alias différents.

Pour avoir une idée rapide de comment que ça marche, il y a une jolie animation sur http://matrix.org (section How does it work?).

Matrix propose aussi du chiffrement de bout en bout (end to end ou E2E), comme Whatsapp ou Signal.

C'est une techno jeune qui manque encore de certaines fonctionnalités, mais qui est déjà parfaitement utilisable (surtout dans un cadre non professionnel comme le nôtre), évolue très vite et est ouvert à la communauté. En 5 mois d'utilisation j'ai déjà vu plusieurs features s'améliorer de manière significative, et j'ai même contribué au bridge IRC (Moïse, 08/07/2017).

Features

Serveur

L'implémentation de référence actuelle est Synapse, un serveur pour Matrix écrit en Python. Un serveur écrit en Go est sur les rails et sera le prochain serveur de référence. Une implémentation par la communauté en Rust avance aussi.

Synapse implémente toute l'API Matrix. Il fonctionne avec une base de données SQLite ou PostgreSQL. Il peut supporter l'authentification auprès d'un LDAP. Un client minimaliste est fourni mais il est recommandé de le désactiver par mesure de sécurité (client et serveur sur le même domaine, c'est pas terrible).

Un dépôt Debian est disponible, ça s'installe tout seul.

Synapse a la réputation d'être assez consommateur en ressources, que ça soit mémoire ou disque. Cependant après 5 mois d'utilisation je trouve sa consommation assez raisonnable (témoignage by Moïse le 08/07/2017)

root@ns3033797:~# du -sh /var/log/matrix-synapse/
1.1G	/var/log/matrix-synapse/
root@ns3033797:~# du -sh /var/lib/matrix-synapse/*
2.7G	/var/lib/matrix-synapse/homeserver.db
3.4G	/var/lib/matrix-synapse/media
4.0K	/var/lib/matrix-synapse/results.txt
8.0K	/var/lib/matrix-synapse/uploads

À noter qu'ici les logs ne sont pas compressés.

Concernant la mémoire et le CPU, je le fais tourner avec 2Go de ram et un processeur Intel(R) Core(TM) i5-2300 CPU @ 2.80GHz qui se touche la nouille.

L'administration est assez minimaliste. Du fait du protocole fédéré, il ne peut pas vraiment y avoir de super utilisateur sur un serveur (les autres serveurs ne le reconnaîtraient pas). La plupart des taches d'administration (supprimer des utilisateurs par exemple) doivent se faire en tapant directement dans la DB pour l'instant. Cependant une API d'administration est apparu dans la release 0.22.0, permettant pour l'instant de supprimer totalement un channel (encore une fois, si le channel était fédéré entre plusieurs serveur, il n'a pas vraiment disparu de l'univers Matrix).

Clients

Web

Le client web de référence est Riot. On peut y accéder sur l'instance officielle https://riot.im/app/ qui permet de se connecter à n'importe quel serveur, ou l'installer (c'est une page statique, full js).

Features :

La plupart des paramètres du client sont sauvegardés sur le serveur matrix de l'utilisateur (c'est un mécanisme de l'API), ce qui permet une synchronisation entre les différents clients (y compris le client mobile).

Points négatifs :

Mobile

Le client mobile de référence est Riot.im. Disponible pour Android et IOS (à confirmer).

Features :

Points négatifs :

Bridges

Les développeurs de Matrix ont mis l'accent très tôt sur les bridges (ou passerelles en bon français). Leur idée n'est pas d'imposer Matrix à tout le monde, mais plutôt de pouvoir fédérer tous les différents moyens de communication existent grâce à Matrix (d'où le nom). Si vous vous rappelez ce xkcd, voici la réponse de Matrix :

L'ajout d'un bridge à un serveur Matrix nécessite d'être administrateur du serveur, puisqu'il faut procéder à un échange de clef (étape manuelle).

IRC

Le bridge IRC est le bridge le plus utilisé et développé.

Features :

Dans les features manquants / problèmes :

Le serveur officiel du projet (matrix.org) propose plusieurs bridges IRC, cependant il nous faudra installer notre propre bridge (et serveur) si l'ont veut bridger irc.iiens.net avec Matrix. C'est une appli nodejs qui s'installe en 2 commandes, la seule contrainte étant d'avoir une IP sur laquelle le serveur Matrix peut nous joindre (ça peut se faire sur le réseau local dans notre cas, ou sur un réseau nommé Docker dans la mise en place Docker).

Doc