WebAssembly propulse l'IA au cœur des navigateurs web

WebAssembly propulse l'IA au cœur des navigateurs web En compilant un code pour l'exécuter nativement dans Chrome, Firefox ou Safari, le langage ouvre de nouvelles perspectives en matière d'applications web, du traitement d'image au machine learning.

Booster la performance des applications web les plus exigeantes : tel est l'objectif de WebAssembly. Erigé par le consortium W3C à l'état de recommandation fin 2019, le langage est déjà pris en charge par les principaux navigateurs web. Sa promesse ? Réaliser des traitements logiciels directement sur le terminal de l'utilisateur, et ainsi supprimer les temps de latence réseau qu'ils pourraient générer s'ils étaient pris en charge par un système distant, dans le cloud par exemple. Tout en proposant, en plus, une expérience fonctionnelle riche, équivalente à celle d'un application installée en local. On pense évidemment à la simulation, au jeu vidéo... voire au machine learning.

Historiquement, WebAssembly est issu du projet ASM.js. Une initiative lancée par la fondation Mozilla en 2013. ASM.js consiste à compiler un développement, écrit en C par exemple, en un programme JavaScript optimisé, à la syntaxe allégée, et sans gestion dynamique de l'allocation de mémoire. Inspiré d'ASM.js, WebAssembly voit officiellement le jour en 2015. Exit le sous-ensemble JavaScript de son grand frère. Le nouvel assembleur se présente sous la forme d'un bytecode intermédiaire compilé en langage machine par les navigateurs. L'objectif étant in fine d'obtenir des performances au plus proches d'un code natif.

Des tests probants

"Rapidement, les principaux éditeurs de navigateurs se sont mis d'accord", constate Nicolas Decoster, ingénieur en informatique scientifique chez Magellium, groupe français expert en géo-information et vision par ordinateur. Chrome, Edge, Firefox et Safari, tous intègrent désormais une machine virtuelle WebAssembly. En parallèle, l'outil de compilation historique du projet ASM.js, Emscripten, est étendu pour gérer la conversion de sources C et C++ en WebAssembly. Orientée bas niveau, la syntaxe de ce dernier se limite à des nombres (entiers ou flottants) en 32 ou 64bit. Un jeu d'API permet ensuite au programme d'interagir avec la couche JavaScript du site web. "Egalement adapté à l'exercice, le langage Rust offre l'un des meilleurs mapping entre objets JavaScript et bitcode WebAssembly", estime Nicolas Decoster.

"WebAssembly se rapproche d'un code natif et bénéficie du multithread"

Qu'en est-il des performances de WebAssembly, notamment en matière d'IA ? "A l'occasion d'une étude réalisée pour le Cnes, nous avons eu l'occasion de tester un modèle de machine learning conçu pour reconnaître des avions dans des images satellites", explique Nicolas Decoster. "Nous sommes partis d'un code C pratiquement pas modifié. Le temps d'exécution que nous avons obtenu en WebAssembly était certes deux fois moins rapide qu'en lignes de commande, mais du coup largement acceptable pour un scénario d'utilisation." Et Jonathan Rivalan, responsable recherche et développement au sein de la SS2L Alter Way, de rappeler : "WebAssembly est nativement multithread à la différence de JavaScript. Ce qui contribue à une meilleure maîtrise de la vitesses d'exécution et permet de tendre vers un résultat potentiellement immédiat."

Jérémie Patonnier, web advocates au sein l'ESN Zenika, évoque d'autres cas d'usage liés à l'IA telles la reconnaissance vocale ou faciale. "Grâce au multithread, WebAssembly permet d'exécuter ce type de modèle en bénéficiant des ressources machines locales de manière optimisée", complète le web advocates de Zenika. Nicolas Decoster insiste : "L'architecture est bien conçue. En terme de sécurité, le code binaire est exécuté dans la sandbox du navigateur qui isole dans un espace mémoire clos les données pour empêcher les communications avec le reste du système."

Pour la majorité des sites web, il y aurait encore peu de sens à passer au WebAssembly. "Des intégrateurs HTML aux développeurs back en passant par les développeurs front end, aucun de ces profils n'a pour vocation en l'état de programmer en C, C++ ou Rust et mener des projets WebAssembly", commente Jonathan Rivalan. "En revanche au cas par cas, les directions techniques pourront éventuellement faire appel à ce type de compétences". Evidemment, on pense au premier chef aux banques et assurances ainsi qu'aux fintech qui pourraient capitaliser sur WebAssembly pour améliorer leurs services en ligne, sur le front de la simulation d'investissement financier et de prêt par exemple.

"Une montée en puissance rapide ne m'étonnerait pas"

Plus prosaïquement, WebAssembly constitue également un levier pour compléter les fonctionnalités manquantes des navigateurs. "Par exemple s'ils ne supportent pas un format vidéo ou d'image, vous pourrez l'implémenter en WebAssembly", indique Jérémie Patonnier chez Zenika. Parmi ses tests réalisés pour le Cnes, Magellium a eu l'occasion d'expérimenter cette piste. "Nous avons compilé en WebAssembly le format OpenJPEG (une implémentation open source du JPEG 2000, ndlr)", précise Nicolas Decoster. Objectif : afficher une image en ultra-haute définition (50 000 x 70 000 pixels), avec à la clé la possibilité de naviguer et zoomer à l'intérieur via des web workers ne décompilant que la zone sollicitée.

Dernier étage de la fusée, le projet Wasi lancé par Mozilla début 2019 a pour ambition de libérer WebAssembly des navigateurs. Sa philosophie ? Proposer une API taillée pour lancer des appels non seulement vers un navigateur mais également vers un OS : en direction de son système de fichiers, de ses connexions réseau, de ses ressources mémoires. On peut imaginer qu'à terme Wasi soit porté sur plusieurs systèmes d'exploitation (Linux, Mac, Windows) et qu'il devienne ainsi un environnement de développement à la fois multi-langage (C, C+, Rust…) et multiplateforme.  

Les éditeurs SaaS, premiers intéressés

WebAssembly demeure en phase exploratoire. "Les entreprises doivent encore se familiariser avec la technologie. Il existe encore assez peu de compétences dans le domaine. Sans compter que le standard va encore très probablement évoluer", prévient Jérémie Patonnier. "Mais je ne serais pas étonné que WebAssembly monte en puissance assez vite." Parmi les acteurs qui pourraient rapidement s'en saisir figurent les fournisseurs d'applications SaaS ou souhaitant passer au SaaS. Certains éditeurs de logiciels ont d'ailleurs déjà passé le pas. Dans le BtoB, c'est le cas d'AutoDesk qui a décliné en WebAssembly son studio de conception assisté par ordinateur AutoCad. Dans le BtC, Google a pris le même chemin avec Google Earth.

Jonathan Rivalan chez Alter Way renchérit : "Avec WebAssembly, on pourrait imaginer qu'Adobe propose des adaptations web de Photoshop et After Effects proches des performances de leurs éditions historiques en client lourd." Pour Nicolas Decoster, cela ne fait aucun doute. "WebAssembly va devenir un environnement standard pour exécuter du code compilé de bas niveau dans les navigateurs".

Langages