Alors que les clients Jabber (Psi, Coccinella, Kopete...) se développent petit à petit, et que le nombre d'utilisateurs du réseau gagne sans cesse en importance, les serveurs aussi se modernisent. Aujourd'hui, présentons ejabberd, l'un des plus puissants serveurs disponibles, qui vient de passer en version 2 plus de 15 mois après la dernière publication.
Le réseau Jabber
La
messagerie instantanée est un des domaines les plus morcelés de la communication sur Internet : contrairement aux pages webs ou aux emails, les utilisateurs sont enfermés dans des réseaux fermés qui ne sont que très peu inter-opérables : si vous êtes sur MSN, vous ne pouvez pas discuter avec un ami (par exemple d'un autre pays) qui utilise ICQ.
Une réponse à ce problème est
Jabber, un système de messagerie instantanée standard et
ouvert : le protocole de communication de Jabber, nommé
XMPP, est en effet une norme IETF (un des organismes de standardisation des technologies informatiques, de même que le célèbre
W3C pour les standards du Web). L'ensemble du système Jabber est ouvert, disponible à tous, et repose sur d'autres normes, en particulier le langage
XML. L'ouverture et la normalisation de ce format permettent une grande interopérabilité : chacun peut créer un logiciel utilisant Jabber, et, s'il respecte les spécifications minimales, communiquer avec les autres utilisateurs de Jabber.
Une particularité de Jabber est qu'il est
décentralisé : dans un système de messagerie instantanée classique, par exemple MSN, l'ensemble du réseau est géré par un seul serveur (ou un seul groupe de serveurs), il est donc centralisé. Jabber, au contraire, permet à différents utilisateurs d'utiliser des serveurs différents. Cela fonctionne comme les emails : quand vous êtes sous Hotmail, vous pouvez envoyer à un ami ayant une boîte mail chez Gmail : vous envoyez votre message au serveur Hotmail, qui le transmet au serveur GMail, qui le transmet à votre ami. De même, vous pouvez contacter quelqu'un sur un autre serveur Jabber, les serveurs s'occupant de la transmission des messages.
Cette structure décentralisée a de nombreux avantages, entre autres :
- La charge est répartie sur différents serveurs, ce qui permet d'en utiliser plusieurs petits plutôt que un gros
- L'utilisateur est libre de choisir son serveur (qui peut être installé sur sa propre machine), ce qui garantit la confidentialité des communications (pas de serveur unique qui pourrait espionner ou censurer, comme cela s'est vu pour certains protocoles propriétaires), un chiffrage des messages étant disponible
- Les pannes générales sont évitées : contrairement à des réseaux classiques (comme le réseau MSN), la panne d'un serveur n'affecte que ses utilisateurs, et pas le reste du réseau
- On peut créer des serveurs Jabbers qui ne soient pas connectés au reste de l'Internet, par exemple à l'intérieur d'une entreprise
On peut par ailleurs spécialiser certains serveurs, par exemple en les transformant en "passerelles", qui sont des serveurs communiquant de Jabber vers un autre protocole. Il existe par exemple plusieurs serveurs gratuits proposant par exemple une communication depuis Jabber vers MSN (bien que le protocole de Microsoft soit loin d'être entièrement supporté, car il est fermé et il faut donc deviner son fonctionnement).
Jabber est par ailleurs développé publiquement, selon un mécanisme de proposition d'améliorations (nommées XEP, XMP Extension Protocols). Sa base XML le rend facile à étendre pour lui ajouter des fonctionnalités spécifiques, qui ne sont pas nécessaires à tous les clients, comme la
Voix sur Ip.
Le serveur ejabberd
Les serveurs sont les éléments clés de l'infrastructure Jabber. Ce sont eux qui gèrent les connexions des utilisateurs et leur mise en contact. Comme Jabber repose sur un protocole ouvert, de nombreux logiciels serveurs sont disponibles, dont certains sont
libres et sont installables n'importe où; vous pouvez installer un serveur Jabber chez vous si vous le souhaitez : si le SDZ avait un serveur Jabber, vous pourriez avoir des adresses Jabber en @siteduzero.com, la classe ! C'est l'un de ces serveurs libres, ejabberd, qui fait l'actualité avec la sortie de sa très attendue version 2.0.
Ejabberd se distingue par un vaste support des XEPs, ainsi que l'intégration de nombreux services comme les discussions multi-utilisateurs, la présence d'un "annuaire des utilisateurs", etc., ce qui en fait un serveur complet utilisable dès son déploiement. Il est également possible d'utiliser de nombreux modules, par exemple des transports (AIM, ICQ, MSN, SMS...) ou d'autres bases de données que celle proposée par défaut (par exemple PostgreSQL). Enfin, il se caractérise par une certaine facilité d'administration, en proposant par exemple plusieurs interfaces différentes (web, ligne de commande, en passant directement par Jabber...), ainsi que des scripts de migration depuis jabberd14 (le tout premier serveur jabber, écrit en C++).
Il en existe de nombreuses autres, dont la liste est disponible
sur le site officiel.
Cependant, les qualités principales d'ejabberd sont une très grande stabilité, y compris aux moments les plus critiques (certains tests parlent de 350 000 sessions simultanées !), ainsi qu'une bonne capacité pour le logiciel à être regroupé au sein de
grappes de serveurs. Ces nombreuses qualités font d'ejabberd un serveur puissant et maniable. Cela explique par exemple que la Jabber Software Foundation ait décidé en 2006 de l'utiliser à la place de jabberd14, auparavant installé depuis 1999.
La sortie, le 21 février dernier, de la version 2 du serveur a donc provoqué un certain remous.
ejabberd 2 apporte donc son lot de nouveautés, parmi lesquelles, entre autres,
- Des améliorations du service LDAP (un service d'annuaire) ainsi que quelques retouches aux services déjà disponibles.
- Une traduction dans 24 langues (un appel aux traducteurs avait été lancé en plein mois de janvier), parmi lesquelles le Catalan ou l'Esperanto.
- Ainsi que le support d'une extension du protocole permettant à l'utilisateur de publier différentes informations d'importance secondaire, comme la musique qu'il écoute, son avatar, etc. Cette technologie, nommée PEP, est supportée partiellement par certains clients comme Psi ou Coccinella dans leurs versions les plus récentes.
Une puissance qui ne vient pas de nulle part - le langage erlang
Comment expliquer cette fiabilité hors normes du serveur ejabberd ? Elle est en grande partie liée au langage de programmation choisi. En effet, plutôt que l'habituel C++, les programmeurs d'ejabberd ont choisi un langage exotique, moins connu, et spécialisé dans les applications concurrentes : Erlang.
Développé initialement par Ericsson pour des besoins internes (écrire des logiciels de routeurs téléphoniques), ce langage a été conçu pour réaliser des logiciels stables, avec une gestion des erreurs (matérielles aussi bien que logicielles) optimale, capables de supporter des milliers d'activités en parallèle (c'est ce qu'on appelle la concurrence) sans ralentissements, et ce pendant des années entières, sur un réseau entier (on dit qu'il est distribué), composé de machines hétérogènes (donc erlang devait être parfaitement portable). Enfin, erlang tourne sur une
machine virtuelle, qui gère les processus : utiliser des processus natifs, dépendants du système, aurait perturbé le caractère multi-plateforme du langage, et, surtout, aurait diminué les performances. Les processus erlang sont en effet très légers, et il est fréquent d'en voir plusieurs dizaines de milliers tourner en même temps, sur une même machine.
On comprend qu'Ericsson ait eu besoin de toutes ces caractéristiques : imaginez un réseau téléphonique dont certaines parties du réseau se mettent à ne plus fonctionner inopinément, ou un nombre limité d'utilisateurs connectés en même temps ? Ainsi, dans un tel système, il est fréquent de voir des chiffres tels que 2 heures de panne en... 40 ans.
Comme le SDZ est aussi fréquenté par des programmeurs, nous avons pensé que vous pourriez souhaiter en apprendre plus sur ce langage : il est toujours enrichissant de se confronter à des langages qui changent nos habitudes, afin d'élargir notre point de vue, et de progresser.
Voici donc, pour les programmeurs parmis vous, un petit exemple de programme erlang (attention, c'est différent !) :
Code : Autre - Afficher / masquer les numéros de ligne-module(todo_list).
-export([start/0, loop/1]).
loop(Liste) ->
receive
{add, X} -> loop([X|Liste]);
{del, X} -> loop([Y || Y <- Liste, Y =/= X]);
{From, show} -> From ! Liste,
loop(Liste);
close -> io:format("Fin de la connexion~n")
end.
start() ->
io:format("Création d'un processus~n"),
spawn(todo_list, loop, [[]]).
Si vous souhaitez en apprendre un tout petit peu plus sur ce langage (ou même simplement comprendre cet exemple), un mini-tuto a été écrit pour l'occasion :
Avant goût du langage erlang : une todo-list distribuée. N'hésitez pas à aller le lire, il n'est pas si long et devrait vous intéresser (si vous aimez la programmation).
Placé sous une licence open source en 1998, le langage est ainsi sorti des laboratoires d'Ericsson, pour être adopté par une petite communauté qui grossit chaque jour un peu plus. Outre ejabberd, voici certains projets représentatifs.
Yaws, un serveur web.
Yaws est un serveur HTTP développé en erlang, pouvant tourner de façon indépendante ou bien embarqué au sein d'une autre application. Ses fichiers de configuration ressemblent à ceux écrits pour Apache, mais les modules sont également écrits en erlang, et il permet un développement web ressemblant à celui proposé par PHP avec ce langage. Grâce à la très bonne gestion des processus d'erlang, il supporte ainsi des milliers de connexions en parallèle.
Mnesia, une base de données modulaire.
Vous connaissez certainement des bases de données comme MySQL ou autres. Mnesia en est une, qui se différencie des bases de données "habituelles" par plusieurs points : premièrement, ça n'est pas une base de données de type SQL. Les requêtes sont ainsi faites en erlang pur. Deuxièmement, elle est à la base faite pour garder les données en mémoire, et non pas pour les stocker sur le disque - c'est possible, bien sûr, mais c'est une option à préciser

. Enfin, elle est particulièrement légère, et donc adaptée à l'embarqué, tout comme erlang.
Elle peut donc être utilisée dans d'autres applications - par exemple dans Yaws, ou dans ejabberd

.
Bob l'éponge fait avec Wings 3D
Wings3D, un logiciel de modélisation.
Sans être aussi puissant qu'un Blender, le logiciel utilise une extension OpenGL d'erlang afin de modéliser des polygones en trois dimensions. Il est également utilisé pour le texturage. Il ne permet pas de faire d'animation, mais peut en revanche être utilisé pour des besoins simples, étant réputé pour sa simplicité d'utilisation.
En conclusion
Pour conclure, ejabberd est un serveur puissant, dont les améliorations seront très certainement appréciées par les différents administrateurs ou utilisateurs qui l'utilisent.
Si vous décidez de l'utiliser, il est très fortement conseillé d'apprendre erlang afin de le personnaliser par vos propres modules. Vous intéresser aux autres applications en erlang vous permettra également d'en tirer partie en les utilisant conjointement - par exemple pour faire une page web décrivant votre noeud Jabber

.
Merci à
Dark-Side et
lastsseldon pour leurs conseils, ainsi qu'à
Linktim et
Octal pour leurs relectures diligentes.
Note :
Cette news a été écrite par
iPoulet;
bluestorm n'a fait que modifier des passages.