Présentation
WASM_OS est un prototype d’exécution d’un système d’exploitation entièrement compilé en WebAssembly (WASM) et chargé dans une page web. Le projet se positionne comme une démonstration de la capacité du runtime WASM intégré aux navigateurs modernes (Chrome 89+, Firefox 86+, Safari 14+) à héberger un environnement POSIX complet, y compris un gestionnaire de processus, un système de fichiers virtuel et une interface de console. Le binaire principal, fourni sous forme de fichier .wasm, est généralement de l’ordre de quelques mégaoctets et se télécharge via HTTP(S) avant d’être instancié par le moteur JavaScript du navigateur.
Architecture technique
L’architecture repose sur trois couches distinctes. La première couche est le moteur WebAssembly du navigateur, qui assure l’isolement mémoire et la compilation JIT du code binaire. La seconde couche, écrite en C/C++ et compilée avec Emscripten, implémente un noyau minimal capable d’interpréter les appels système POSIX via l’interface WASI (WebAssembly System Interface). Cette couche expose un système de fichiers en mémoire, mappé sur IDBFS (IndexedDB) pour la persistance entre les sessions. La troisième couche, écrite en JavaScript, orchestre le chargement du module, initialise le système de fichiers et redirige les flux d’entrée/sortie vers le DOM, permettant ainsi d’afficher une console interactive dans la page.
Performances et contraintes
Le modèle d’exécution impose des limites strictes. Le sandbox WASM ne donne aucun accès direct au matériel ; toutes les opérations d’I/O passent par les API du navigateur, ce qui introduit une latence supplémentaire, notamment pour les accès disque simulés via IndexedDB. La mémoire allouée au module est plafonnée à la valeur définie par memory.grow, typiquement 256 MiB, ce qui contraint la taille des applications pouvant être exécutées. Le moteur JIT optimise le code au moment de l’instanciation, mais les performances restent inférieures à celles d’un noyau natif, surtout pour les appels système fréquents. De plus, le support multithreading de WASM (via les workers) reste partiel dans les navigateurs, limitant la capacité de WASM_OS à exploiter plusieurs cœurs.
Perspectives et limites
WASM_OS montre que les navigateurs peuvent servir de plateforme d’exécution pour des environnements POSIX, ouvrant la voie à des applications web autonomes capables de faire tourner des outils Linux classiques (gcc, vim, etc.) sans serveur dédié. Cependant, l’absence de support complet pour les périphériques (GPU, réseau bas niveau) et la dépendance à la politique de sécurité du navigateur (CSP, sandbox) restreignent les cas d’usage à des scénarios de démonstration ou d’enseignement. Le projet reste ouvert, et les futures spécifications WASI pourraient enrichir l’ensemble d’APIs disponibles, améliorant ainsi la viabilité d’un OS complet dans le navigateur.