IOCCC 2025 : Le concours du code C le plus illisible au monde
Mine de rien, le programmeur moyen a déjà assez de mal à relire son propre code après trois semaines sans caféine. Alors imaginez un concours où l’obfuscation n’est pas un accident, mais une mission. Le concours code C obfusqué (IOCCC pour les intimes) vient de frapper un grand coup en 2025 avec des créations qui frôlent l’art pur. Autant dire que si vous cherchez à embaucher un stagiaire qui comprend ces trucs-là, préparez-vous à payer en café et en nuits blanches.
Un concours qui fête ses 40 ans… et la déchéance de l’humanité
Créé en 1984, l’IOCCC n’a pas pris une ride. À l’époque, les ordinateurs avaient la puissance d’une calculatrice rouillée. Aujourd’hui, ils font tourner des IA, des jeux en 4K et des bloqueurs de pubs intrusifs. Pourtant, une constante reste : le code doit faire exactement ce qu’il doit faire… mais personne ne doit comprendre comment. Dans mon atelier, j’ai vu des générations de développeurs se briser les dents sur des fichiers C de 20 000 lignes où tout fonctionne… sauf l’espoir.
La semaine dernière, un client m’a appelé parce que son logiciel de gestion de stock plantait toutes les heures. Après 45 minutes dedebugging, j’ai découvert que la macro #define V (1) était en fait une variable qui valait 0. Le type qui a écrit ça avait cru malin de remplacer un « VRAI » par un « V ». Mieux. Évidemment, ça plantait quand la condition était fausse. Preuve que l’obfuscation, c’est comme un piercing sur le nez : ça ne sert à rien, mais ça fait joli.
Tetris sur Game Boy : le summum de l’inutilité géniale
Le grand gagnant cette année, c’est un code qui fait tourner Tetris sur un émulateur Game Boy… avec moins de 5 Ko de C volontairement incompréhensible. Pour être honnête, je ne sais même pas par quel bout le prendre. Le gars qui a pondu ça a utilisé :
- Des macros qui s’appellent elles-mêmes
- Des variables déclarées 10 lignes après leur première utilisation
- Des boucles
forqui s’exécutent 255 fois… ou jamais, selon l’humeur du compilateur - Des commentaires en langue klingon pour « décorer »
Pourquoi ? Parce que c’est beau. Parce que c’est gratuit. Parce que dans un monde où tout doit être « propre et maintenable », il reste une place pour l’art absurde.
Moi, à la place, j’aurais juste écrit un Tetris en 10 lignes de Python qui tourne dans un terminal. Mais bon, où serait le fun ? Un client m’a déjà demandé de « rendre son site plus obfusqué » pour « empêcher les gens de copier ». Je lui ai répondu que s’il voulait du code incompréhensible, il n’avait qu’à embaucher des consultants en SAP. Trois mois de délai, 50 000€, et il pourrait revenir me voir pour que je lui explique pourquoi son ERP crash toutes les 20 minutes. Tout le monde y gagne.
Le C, ce langage maudit qui refuse de mourir
Le C a 50 ans cette année. Cinquante ans. Et il est toujours là, comme un vieux rockeur qui refuse de lâcher la scène. Pourquoi ? Parce que c’est le seul langage où tu peux écrire un code qui fait « coucou » en 2 caractères main(){puts("coucou");}… ou un noyau Linux entier en 10 millions de lignes.
Dans mon métier, je vois encore des usines avec des machines à coudre pilotées par des vieux PC sous DOS. Leurs programmes sont écrits en C, et le type qui sait encore compiler ça est parti à la retraite en 2003. Résultat : chaque mise à jour Windows les fait pleurer. La semaine dernière, j’ai passé deux jours à désactiver des services Windows qui bloquaient l’accès au port série. Le client m’a dit : « Mais Marc, c’est juste une MAJ ! » Si seulement c’était juste une MAJ…
L’IOCCC, c’est un peu l’antidote à cette folie. Au lieu de produire du code « maintenable », on produit du code qui fait mal aux yeux. Et contre-intuitivement, ça marche. Parce que le C, c’est comme le sexe sans préservatif : ça peut tout faire sauter… mais quand c’est bon, rien ne vaut ça.
Pourquoi ce concours est une insulte… et une nécessité
D’un côté, l’IOCCC est une insulte à tout ce que j’enseigne à mes apprentis. « Un code propre, c’est un code maintenable », leur dis-je. « Pas un truc qui ressemble à un puzzle de 500 pièces sans image de référence. » Mais de l’autre… il y a quelque chose de poétique dans cette folie. Ça rappelle que la programmation, c’est d’abord un jeu. Un jeu où le seul but est de défier l’entendement.
Je me souviens d’un client, en 2018, qui m’a demandé de « rendre son base de données plus rapide ». Après deux semaines de profiling, j’ai découvert que la requête SQL faisait 12 jointures inutiles et qu’il stockait ses images en base. Je lui ai proposé de réécrire ça proprement. Il a refusé. À la place, il a payé un stagiaire pour remplacer tous les SELECT * par des SELECT 1/0 AS impossible. « Comme ça, au moins, personne ne regardera le code. » Mission accomplie. À ce jour, son site crash toujours quand on clique sur « Commander ».
L’IOCCC, c’est ça aussi : une revanche contre la médiocrité. Une preuve que même dans l’informatique, où tout doit être « professionnel », il reste une place pour le chaos créatif. Alors oui, je râle. Oui, je trouve ça inútile. Mais bon sang, comme c’est beau.
Comment survivre à un code C obfusqué (si vous y êtes obligés)…
Vous tomberez sur un de ces monstres un jour. Peut-être que ce sera un collègue qui a quitté l’entreprise en laissant derrière lui un fichier .c de 500 lignes avec une seule macro récursive. Voici comment survivre :
- Ne touchez à rien. Le code fonctionne. Si vous le modifiez, vous allez tout casser. Faites comme avec un patient sous respirateur artificiel.
- Copiez-collez des blocs entiers. Ne réécrivez jamais une ligne. Si vous devez ajouter une fonctionnalité, copiez un bloc similaire et modifiez-le paresseusement.
- Utilisez des outils de déobfuscation.
indent,astyleouclang-formatpeuvent parfois rendre le code un peu lisible. Mais attention : dans 30% des cas, ça casse tout. - Priez. Ou offrez un café à un expert. Ou les deux.
- Documentez. Ajoutez des commentaires du genre « /* WTF ? */ » ou « /* Ici, on fait semblant que la variable x existe */ ». Ça fera rire les générations futures.
Et si vraiment vous devez le maintenir… changez de métier.
Et demain ? L’obfuscation sera-t-elle remplacée par l’IA ?
(Spoiler : non)
Certains me disent que l’IA va rendre l’obfuscation obsolete. Qu’avec un prompt bien formulé, même un ChatGPT saura générer du code compréhensible. Ils ont tort. L’IOCCC ne mourra pas. Parce que l’obfuscation, ce n’est pas juste du code illisible. C’est une déclaration d’indépendance.
C’est dire : « Je ne veux pas que mon code soit compris. Je veux qu’il soit exécuté. Et je m’en fous du reste. »
L’IA générera des codes propres, documentés, maintenables. Elle écrira des tests, elle respectera les conventions, elle fera des revues de code. Bref, elle fera tout ce que je fais tous les jours pour des clients qui payent. Mais elle n’écrira jamais un Tetris obfusqué en 5 Ko. Parce que l’IA ne joue pas. Elle ne prend pas de risque. Elle ne fait pas de l’art.
Alors vive l’IOCCC. Vive les fous qui écrivent du code qui ne sert à rien… sauf à prouver que l’informatique est encore un terrain de jeu.
Le mot de la fin (ou comment j’ai sauvé mon client de son propre génie)
Source : Les news de Korben
Pour conclure, sachez que j’ai récemment été contacté par un client qui avait écrit son site web entier… en un seul fichier PHP obfusqué. Pas de base de données, pas de structure, juste 2 000 lignes de <?php eval(gzuncompress(base64_decode('...'))); ?>. Le site marchait. Les clients pouvaient commander. Les commandes arrivaient dans sa boîte mail. Mais lui ne savait plus comment ça marchait.
Je lui ai proposé de tout réécrire de manière propre. Il a refusé. « Ça marche, pourquoi changer ? » Alors je lui ai juste ajouté un commentaire en haut du fichier :
/* Ce code a été écrit par [Nom du client],
qui a depuis quitté la planète Terre.
Personne ne sait comment il fonctionne.
Ne le touchez pas. Merci. */
Depuis, ça marche toujours.