WebAssembly hors navigateur : exécuter du code non fiable en toute sécurité
Photo : GitHub

WebAssembly hors navigateur : exécuter du code non fiable en toute sécurité

Conçu pour le Web, c'est pourtant sur les serveurs et dans les systèmes de plugins que WebAssembly s'avère aujourd'hui le plus utile.

WebAssembly est un format de code binaire qui présente deux caractéristiques rarement associées : il s'exécute à une vitesse proche de celle du code machine et est entièrement confiné dans un bac à sable sans aucun droit par défaut.

Pourquoi c'est justement la deuxième caractéristique qui est intéressante

Un module WebAssembly démarre avec uniquement son espace mémoire linéaire et rien d’autre. Pas de fichiers, pas de réseau, pas d’horloge système — à moins que l’environnement hôte ne lui fournisse explicitement chacun de ces éléments.

C'est exactement ce qu'il faut lorsque vous souhaitez exécuter du code écrit par quelqu'un d'autre :

  • Système de plugins — permettant aux utilisateurs d'étendre les fonctionnalités du logiciel sans craindre que les plugins n'accèdent illicitement aux fichiers
  • Exécution du code à la périphérie du réseau — démarrage en moins d’une milliseconde, bien plus léger qu’un conteneur
  • Intégration de la logique métier du client dans un service multi-utilisateurs partagé

Interface avec le système

Comme WebAssembly ne dispose pas en soi de notions de fichier ou de socket, une norme est nécessaire pour définir les capacités que l'environnement hôte doit fournir. Cette norme repose sur le principe de l'octroi de capacités : un module ne peut pas accéder à d'autres répertoires que ceux qui lui ont été préalablement attribués.

Ce n'est pas encore terminé

Les échanges entre le module et l'environnement hôte restent coûteux lorsqu'il s'agit de transférer des structures de données complexes. La prise en charge du multithreading et du ramasse-miettes est encore en cours de perfectionnement. Le langage dispose d'un runtime lourd qui génère des modules assez volumineux.

Optez pour WebAssembly lorsque votre besoin est d’« exécuter du code auquel je ne fais pas confiance », et non lorsque vous avez besoin de performances supplémentaires — dans ce cas, il existe généralement des solutions plus simples.
Chia sẻ

Thảo luận