9 points par GN⁺ 2025-04-09 | 2 commentaires | Partager sur WhatsApp
  • Hyperlight Wasm est la dernière extension de Hyperlight, la technologie de machine virtuelle (VM) ultra-légère que Microsoft a donnée à la CNCF, et exécute rapidement et en toute sécurité des workloads WebAssembly (basés sur le Component Model)
  • Contrairement aux VM traditionnelles, il n’expose que des tranches de mémoire et le CPU, sans OS ni périphériques virtuels, et offre un temps de démarrage rapide de 1 à 2 ms
  • Il permet d’exécuter des composants wasm écrits dans divers langages (C, Rust, Go, Python, JS, etc.) sous la protection d’un hyperviseur

Principales caractéristiques de Hyperlight Wasm

  • Des performances plus rapides que les VM traditionnelles

    • VM traditionnelle : initialisation des périphériques → chargement du kernel → démarrage de l’OS → exécution de l’application (environ 125 ms)
    • Hyperlight Wasm : exécutable simplement en créant une tranche mémoire et en chargeant le Wasm (1 à 2 ms, avec un objectif futur de <1 ms)
    • Cette rapidité d’exécution est un atout pour une exécution serverless à la demande ou la mise en place d’un warm pool minimal
  • Exécution de multiples langages sans système d’exploitation

    • Basé sur les standards WASI et WebAssembly Component Model, il peut exécuter des composants écrits dans la plupart des langages
    • Il intègre le runtime wasmtime, ce qui permet d’exécuter aussi des langages interprétés comme Python, JavaScript ou C# avec leur runtime embarqué
    • Côté développeur, il suffit de compiler vers la cible wasm32-wasip2 pour exécuter le programme dans Hyperlight
  • Sécurité renforcée (double sandbox)

    • Structure de protection à deux niveaux : sandbox Wasm + sandbox VM basée sur hyperviseur
    • Même si un attaquant s’échappe du wasm, il doit encore contourner la sandbox VM

Exemple de développement : exécution d’un serveur UDP Echo en Rust

  • Téléchargement et compilation du binaire wasm avec la CLI wkg
  • Conversion du fichier de définition d’interface WASI (.wit) en binaire pour générer les bindings
  • Génération automatique des bindings des interfaces import/export du Wasm via hyperlight_component_macro et host_bindgen!
  • Définition de la logique du serveur echo via l’implémentation de l’interface UdpSocket
  • Création du sandbox hyperlight-wasm pour charger et exécuter le composant wasm
  • Compilation Ahead-of-Time

    • Utilisation de l’outil hyperlight-wasm-aot pour compiler le wasm en AOT et réduire le temps d’exécution
    • Lancement du serveur avec cargo run, et test UDP possible avec la commande nc -u

Extensibilité et feuille de route

  • Hyperlight Wasm prévoit de prendre en charge Arm64 en plus de x86
  • Actuellement, les interfaces WASI doivent être implémentées manuellement, mais des bindings par défaut sont prévus à l’avenir
  • Le projet prévoit de permettre le sandboxing rapide de services simples, comme des serveurs HTTP

Participation à la communauté open source

  • Hyperlight est un projet open source de Microsoft publié sous licence Apache 2.0 et enregistré dans la CNCF Sandbox
  • Hyperlight Wasm vise à fournir un environnement d’exécution rapide et sécurisé adapté au cloud native computing
  • Le code peut être consulté sur GitHub et les contributions sont possibles

👉 Dépôt GitHub : hyperlight-wasm

2 commentaires

 
GN⁺ 2025-04-09
Avis Hacker News
  • Depuis quelques mois, j’ai commencé à utiliser sérieusement WebAssembly pour créer une bibliothèque d’authentification backend fonctionnant dans plusieurs langages

    • Basée sur Extism afin de réduire la complexité de l’interface
    • L’expérience était presque magique
    • WASM occupe une position intéressante
    • Sa proposition de valeur a été démontrée avec une spécification centrale minimale
    • Il y a maintenant une forte poussée pour implémenter une surface d’API plus large pour WASI et le Component Model
    • Beaucoup de membres de la communauté sont inquiets de cette direction
    • Personnellement, j’espère que WASM ne deviendra pas trop complexe au point de suivre la voie des navigateurs web, où seules les grandes entreprises technologiques peuvent encore implémenter et expérimenter
  • Il y a quelques mois, nous avons présenté Hyperlight, un VMM léger

    • Il peut créer une nouvelle VM en environ 1 milliseconde
    • Aujourd’hui, nous sommes heureux d’annoncer un guest Hyperlight Wasm basé sur le runtime Wasmtime
    • Il permet d’exécuter des binaires Wasm Component au-dessus de l’interface WASI, sans OS invité dans la VM
    • Ce billet explique son fonctionnement avec des exemples
  • Très enthousiaste à ce sujet

    • J’espère que WASM/WASI deviendra le rêve de la JVM des années 90
    • Cela pourrait devenir une cible de développement memory-safe, facile à porter et à tester sur plusieurs plateformes
    • J’espère que WASM pourra servir à bien plus que le navigateur
  • Ça a l’air intéressant

    • Est-ce un cas d’usage pour quelqu’un qui voudrait implémenter lui-même quelque chose comme Cloudflare Workers ou Lambda avec WASM ?
  • Super

    • J’essaie de comprendre quelle est la valeur ajoutée ici
    • En quoi est-ce différent d’une exécution via wasmtime ?
  • J’ai l’impression que tous les projets cool et intéressants montrent que WASM réussit partout sauf dans le navigateur

    • Il faudra peut-être enlever le « Web » de WebAssembly et lui donner un autre nom
  • Une idée de la manière d’intégrer ça dans une configuration de homelab ?

    • Si j’ai bien compris, c’est conçu pour fonctionner sur bare metal
    • C’est un peu gênant car je n’ai pas de machine x86 bare metal de réserve
    • J’imagine qu’il faudra simplement le mettre dans une VM et accepter la virtualisation imbriquée
  • Comment les instances sont-elles démarrées et gérées ?

    • Via quelle API ?
    • Peut-on lui donner la capacité d’exécuter un arbre de Wasm Components liés à un binaire Wasm Component, de déléguer des fonctionnalités et d’en gérer le cycle de vie ?
  • Donc, en gros, il y a une VM (wasm) pour sandboxer des programmes dans une VM matérielle, qui est elle-même une abstraction pour isoler des programmes dans un processus en espace utilisateur (processus Linux)

    • Avez-vous réfléchi à l’usage de processus Unix pour isoler les programmes ?
  • Est-ce un unikernel / OS bibliothèque ?