Qu'est-ce que WebAssembly ?
WebAssembly (Wasm) est un format d'instructions binaire concu pour l'execution a haute performance dans les navigateurs web. Lance en 2017 et supporte par tous les navigateurs majeurs, Wasm permet d'executer du code compile (C, C++, Rust, Go) dans le navigateur a une vitesse proche du natif. Il ne remplace pas JavaScript mais le complete pour les taches intensives en calcul.
Fonctionnement technique
Le code source est compile en un module Wasm binaire (.wasm) a l'aide d'un compilateur specifique au langage source : Emscripten pour C/C++, wasm-pack pour Rust, TinyGo pour Go. Le navigateur charge le module, le valide (verification de securite en temps constant), le compile en code machine natif (JIT ou AOT), puis l'instancie avec les imports necessaires. Wasm s'execute dans un sandbox securise avec le meme modele de securite que JavaScript (same-origin policy, pas d'acces direct au systeme de fichiers).
Cas d'utilisation
Les cas d'utilisation ideaux sont les applications necessitant des performances elevees : jeux video dans le navigateur (Unity, Unreal Engine compilent en Wasm), edition d'images et de video (Photoshop Web, Figma utilise Wasm), compression et chiffrement, simulations scientifiques, machine learning (inference de modeles), et emulation (DOSBox en Wasm). Des applications de bureau entieres ont ete portees dans le navigateur grace a Wasm : AutoCAD, Google Earth, LibreOffice.
Interaction avec JavaScript
Wasm et JavaScript communiquent via une interface d'appel. JavaScript peut instancier des modules Wasm, appeler leurs fonctions exportees et partager de la memoire lineaire. Les outils comme wasm-bindgen (Rust) et Emscripten (C++) generent automatiquement les bindings entre les deux mondes. La memoire partagee (SharedArrayBuffer) et les Web Workers permettent le multithreading. Les performances optimales necessitent de minimiser les allers-retours entre JS et Wasm.
WebAssembly hors du navigateur (WASI)
WASI (WebAssembly System Interface) etend Wasm au-dela du navigateur en fournissant un acces standardise au systeme d'exploitation (fichiers, reseau, horloge). Les runtimes comme Wasmtime, Wasmer et WasmEdge executent des modules Wasm cote serveur. Avantages : portabilite (un seul binaire pour toutes les plateformes), securite (sandbox par defaut, capabilities), et demarrage ultra-rapide (microsecondes). Docker et Kubernetes explorent l'integration de conteneurs Wasm comme alternative legere aux conteneurs Linux.