Hyperlight WASM : rapide, sécurisé et sans OS
(opensource.microsoft.com)- 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-wasip2pour 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_macroethost_bindgen! - Définition de la logique du serveur echo via l’implémentation de l’interface UdpSocket
- Création du sandbox
hyperlight-wasmpour charger et exécuter le composant wasm -
Compilation Ahead-of-Time
- Utilisation de l’outil
hyperlight-wasm-aotpour 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 commandenc -u
- Utilisation de l’outil
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
Hyperlight - gestionnaire de machine virtuelle légère (VMM) | GeekNews
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
Il y a quelques mois, nous avons présenté Hyperlight, un VMM léger
Très enthousiaste à ce sujet
Ça a l’air intéressant
Super
J’ai l’impression que tous les projets cool et intéressants montrent que WASM réussit partout sauf dans le navigateur
Une idée de la manière d’intégrer ça dans une configuration de homelab ?
Comment les instances sont-elles démarrées et gérées ?
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)
Est-ce un unikernel / OS bibliothèque ?