La ByteCode Alliance souhaite intégrer des applications binaires dans votre navigateur
En 2015, un consortium comprenant Google, Microsoft, Mozilla et le projet WebKit annoncé WebAssembly. Cette semaine, Mozilla, Intel, Red hat et Fastly ont annoncé la création d’un nouveau consortium appelé Bytecode Alliance, dont l’objectif est de favoriser le WebAssembly et d’autres « nouvelles bases logicielles » qui permettront d’exécuter du code non fiable par défaut de manière sécurisée, à l’intérieur ou à l’extérieur du navigateur Web.
Pour beaucoup, cela soulève une question évidente : qu’est-ce que WebAssembly ? WebAssembly (wasm) était et est toujours un projet potentiellement passionnant, offrant un moyen d’exécuter un bytecode natif à l’intérieur du navigateur pour une augmentation potentiellement très importante des performances par rapport aux moteurs Javascript utilisés alors et aujourd’hui.
Javascript est souvent mal compris comme un langage de script interprété à l’exécution. Bien qu’il soit généralement chargé dans le navigateur sous forme de code source, il peut être interprété ou compilé en bytecode et exécuté. Compilation signifie une exécution plus performante – en particulier à l’intérieur de boucles serrées – mais aussi une pénalité de démarrage pour le temps nécessaire à la compilation du JIT lui-même.
Il y a en fait beaucoup plus sous le capot avec Javascript JIT, y compris différents modes de compilation, la spécialisation, l’optimisation et le renflouement. Lin Clark, de Mozilla, a écrit un excellent livre, facile à lire explication pour hacks.mozilla.org, si vous voulez plus de détails.
Dans le but de supprimer cette pénalité de compilation JAT, Mozilla a introduit asm.js-un sous-ensemble spécialisé de Javascript qui est le plus souvent utilisé comme cible de compilation source-source pour les langages de programmation plus lourds comme C. Un programme en langage C compilé en asm.js et exécuté en AOT (Ahead Of Time) sera compilé en bytecode (selon Mozilla) sera généralement à 50% ou plus des performances entièrement natives du code C compilé avec Clang.
Le reste du problème avec asm.js est que, en tant que sous-ensemble de Javascript, vous pouvez effectuer des opérations ou exprimer des données d’une manière que vous ne pourriez pas faire en Javascript. WebAssembly propose de changer cela, avec la prise en charge native des entiers 64 bits, des décalages de chargement et de stockage, et un accès direct aux instructions CPU fréquemment utilisées pour des tâches spécifiques telles que la cryptanalyse.
Malheureusement, le projet WebAssembly n’a pas eu beaucoup de visibilité depuis 2015. Même aujourd’hui, il est difficile de trouver un exemple concret de ce que WebAssembly peut faire – le support dans différents navigateurs est douteux au mieux, et il est même difficile de trouver des démos fonctionnelles à exécuter localement dans le toolkit. La démo la plus accessible que nous avons pu trouver était Google Lab’s squooshune application simple qui vous permet de jouer avec différents algorithmes de stockage et de compression d’images en temps réel.
L’impact potentiel de WebAssembly et de l’interface WebAssembly System s’étend bien au-delà du navigateur. La Bytecode Alliance envisage une plate-forme qui peut être utilisée, non seulement pour exécuter du code à vitesse native à l’intérieur des navigateurs, mais en général pour faciliter la réutilisation en toute sécurité du code non fiable sur plusieurs plates-formes, y compris les serveurs, les périphériques, les mobiles et les dispositifs IoT.