
Il y a des projets qui répondent à un besoin réel. Et puis il y a ceux qui commencent par : « Tiens, je me demande si ça marcherait encore… ». Celui-ci appartient clairement à la deuxième catégorie. 🤓
Pour les plus vieux d’entre nous – disons pudiquement la génération qui a connu Internet avant que tout soit une app – IRC évoque probablement quelques souvenirs. C’est notamment avec IRC, UnrealIRCd et un serveur Linux que j’ai commencé à mettre sérieusement les mains dans l’administration système il y a de nombreuses années…
UnrealIRCd proposait à l’époque une fonctionnalité que j’avais toujours trouvée amusante : un mode permettant à un IRC Operator d’être présent dans un channel tout en étant totalement invisible pour les utilisateurs classiques. 🥷
Des années plus tard, par pure curiosité, j’ai voulu voir s’il était possible de reproduire ce comportement sur un UnrealIRCd moderne. Et surtout : est-ce qu’une IA serait capable de développer ça pour moi si je la guide et que je lui explique les différents comportements à avoir ?
Un petit défi pour Codex
L’exercice était intéressant parce qu’il ne suffisait pas de demander « écris-moi un module UnrealIRCd ». Il fallait comprendre les API actuelles d’UnrealIRCd 6, retrouver le comportement historique recherché et surtout trouver une façon propre de le reproduire sans modifier le code source du serveur (car là je ne suis pas certain que j’aurais été capable de guider Codex 😅).
Après plusieurs itérations et un peu de peer review croisé entre ChatGPT et Claude, nous sommes arrivés à une architecture plutôt élégante.
Et le résultat m’a franchement surpris : la première version que j’ai réellement envoyée au compilateur a compilé du premier coup sur UnrealIRCd 6.2.7.
Bon, le premier chargement a immédiatement rappelé qu’en informatique, il ne faut jamais célébrer trop vite : +I, le mode historique que je voulais utiliser, existe aujourd’hui pour autre chose. Le module utilise donc finalement +X.
Comment ça fonctionne ?
L’idée générale est assez simple : l’IRCOp reste réellement présent dans le channel. On ne touche pas à l’état interne d’UnrealIRCd.
Le module construit simplement une vision différente pour les utilisateurs qui ne sont pas IRC Operators :
+X/-Xactive ou désactive l’invisibilité ;- JOIN, PART et QUIT sont filtrés pour les utilisateurs classiques ;
- NAMES, WHO/WHOX et WHOIS sont également filtrés pour ne pas révéler la présence de l’IRCOp ;
- les changements de privilèges comme
+oou+vne révèlent pas non plus sa présence ; - lors de l’activation de
+X, un PART synthétique fait disparaître proprement l’IRCOp des clients déjà connectés ; - lors du
-X, le client reçoit au contraire un JOIN classique ; - les messages et les actions restent visibles : l’objectif est de masquer l’appartenance au channel, pas de rendre l’IRCOp anonyme. 🥷
Les autres IRC Operators, eux, continuent de voir la réalité du serveur.
Et ça marche vraiment ?
Sur UnrealIRCd 6.2.7, j’ai notamment testé l’activation et la désactivation du mode, JOIN/PART/QUIT, NAMES, WHO, WHOIS, les changements de privilèges, les messages, les KICK et même le retrait du statut IRCOp.
Dans ce dernier cas, +X est automatiquement supprimé et l’utilisateur réapparaît normalement dans le channel. Plutôt propre. Et surtout, les actions effectuées par l’IRCop ne révèlent pas durablement sa présence dans le channel.
Je ne prétends évidemment pas avoir testé toutes les combinaisons possibles. Lors de mes tests, j’ai monté un réseau IRC composé d’un seul et unique serveur. En revanche, je n’ai pas eu l’occasion de tester ce module dans une infra multi-serveurs ou encore avec des services IRC type Anope (anciennement Epona). C’est un projet expérimental : utilisez-le à vos risques et périls.
Le code est disponible librement sur GitHub – unrealircd-invisibility sous licence GPL-2.0-or-later, comme UnrealIRCd.
Est-ce que ça va révolutionner Internet ? Clairement pas. 🤣
Mais presque 25 ans après mes premières bidouilles sur IRC, voir une IA ressusciter en quelques heures une fonctionnalité qui me rappelait mes débuts sous Linux… ça valait largement le détour. 😎



