__ __ _ _____ ____ ___ ____ _____ | \/ | / \|_ _| _ \|_ _/ ___| ____| | |\/| | / _ \ | | | |_) || | | | _| | | | |/ ___ \| | | _ < | | |___| |___ |_| |_/_/ \_\_| |_| \_\___\____|_____|
Connexion…
💡 Dans le terminal : cat L puis Tab écrit « cat LISEZMOI.txt » à votre place.
Ce que vous voyez est un vrai Linux (avec un vrai bash), qui tourne dans votre navigateur, sans serveur : rien n'est envoyé ailleurs, tout s'exécute sur votre machine.
bash
Le jeu est un simple script, creer_jeu.sh. Il fabrique l'arborescence ~/matrice : dossiers, fichiers d'énoncé, archives, liens, droits… Les mots de passe n'y figurent jamais en clair : la commande verifier ne conserve que leur empreinte SHA-256. Les épreuves « d'état » (créer un fichier, écrire un script) sont contrôlées en inspectant le système de fichiers.
creer_jeu.sh
~/matrice
verifier
Un Dockerfile part d'Alpine Linux (une distribution minuscule), y installe bash, GNU coreutils, grep, find, tar, diff, crée l'utilisateur neo et exécute le script générateur. Résultat : une image de conteneur identique pour tout le monde.
Dockerfile
neo
Un navigateur ne sait pas lancer un conteneur. L'outil container2wasm (c2w) contourne le problème : il emballe l'image avec un noyau Linux et l'émulateur QEMU compilé en WebAssembly. Le navigateur exécute donc un PC x86_64 émulé, qui démarre ce Linux. Comme le démarrage est long, la machine est préparée à l'avance et sauvegardée en « instantané » (snapshot) : à l'ouverture de la page, elle est restaurée au lieu d'être redémarrée de zéro, ce qui explique les quelques dizaines de secondes de chargement.
c2w
creer_jeu.sh ─► Dockerfile (Alpine + bash) ─► image de conteneur │ c2w --to-js ▼ noyau Linux + QEMU (WebAssembly) + instantané ─► navigateur
localStorage
SharedArrayBuffer
Une simulation en JavaScript apprendrait à imiter un terminal. Ici, vous manipulez les vraies commandes, avec leurs vrais messages d'erreur : ce que vous apprenez fonctionne ensuite sur n'importe quel Linux, un serveur, un Mac ou le terminal de Windows (WSL).