Hyperlight WASM: rápido, seguro y sin sistema operativo
(opensource.microsoft.com)- Hyperlight Wasm es la extensión más reciente de Hyperlight, la tecnología de máquina virtual (VM) ultraligera que Microsoft donó a la CNCF, y ejecuta cargas de trabajo de WebAssembly (basadas en el Component Model) de forma rápida y segura
- A diferencia de las VM tradicionales, solo expone slices de memoria y CPU sin sistema operativo ni dispositivos virtuales, ofreciendo tiempos de arranque rápidos de 1 a 2 ms
- Puede ejecutar componentes wasm escritos en varios lenguajes (C, Rust, Go, Python, JS, etc.) bajo protección del hipervisor
Características principales de Hyperlight Wasm
-
Rendimiento más rápido que una VM tradicional
- VM tradicional: inicialización de dispositivos → carga del kernel → arranque del sistema operativo → ejecución de la aplicación (aprox. 125 ms)
- Hyperlight Wasm: puede ejecutarse solo con crear el slice de memoria + cargar Wasm (1 a 2 ms, con objetivo futuro de <1 ms)
- La velocidad de ejecución favorece la ejecución serverless on-demand o la configuración de un warm pool mínimo
-
Ejecución de varios lenguajes incluso sin sistema operativo
- Basado en el estándar WASI y en el WebAssembly Component Model, puede ejecutar componentes escritos en la mayoría de los lenguajes
- Incluye el runtime
wasmtime, por lo que también puede ejecutar lenguajes interpretados como Python, JavaScript y C# empaquetando el runtime - Desde la perspectiva del desarrollador, basta con compilar al target
wasm32-wasip2para ejecutar en Hyperlight
-
Seguridad mejorada (doble sandbox)
- Estructura de doble protección con sandbox de Wasm + sandbox de VM basado en hipervisor
- Incluso si un atacante escapa de wasm, todavía tendría que evadir adicionalmente el sandbox de la VM
Ejemplo de desarrollo: ejecución de un servidor UDP Echo basado en Rust
- Descarga y compilación del binario wasm con el CLI
wkg - Conversión del archivo de definición de interfaz WASI (
.wit) a binario para generar bindings - Con
hyperlight_component_macroyhost_bindgen!se realiza la generación automática de bindings para las interfaces import/export de Wasm - Definición de la lógica del servidor echo mediante la implementación de la interfaz
UdpSocket - Creación del sandbox
hyperlight-wasmpara cargar y ejecutar el componente wasm -
Compilación Ahead-of-Time
- Uso de la herramienta
hyperlight-wasm-aotpara compilar wasm con AOT y reducir el tiempo de ejecución - El servidor puede ejecutarse con
cargo runy probarse por UDP con el comandonc -u
- Uso de la herramienta
Escalabilidad y planes futuros
- Hyperlight Wasm planea soportar no solo x86 sino también la arquitectura Arm64
- Actualmente es necesario implementar directamente la interfaz WASI, pero en el futuro se ofrecerán bindings base
- Se planea permitir el sandboxing rápido de servicios simples, como servidores HTTP
Guía para participar en la comunidad open source
- Hyperlight es un proyecto open source de Microsoft publicado bajo licencia Apache 2.0 y registrado en CNCF Sandbox
- Hyperlight Wasm tiene como objetivo ofrecer un entorno de ejecución rápido y seguro adecuado para cloud native computing
- El código puede revisarse y recibir contribuciones a través del repositorio de GitHub
👉 Repositorio de GitHub: hyperlight-wasm
2 comentarios
Hyperlight - Administrador de máquinas virtuales ligeras (VMM) | GeekNews
Comentarios en Hacker News
Hace unos meses empecé a usar WebAssembly en serio para crear una biblioteca de autenticación de backend que funcionara en varios lenguajes
Hace unos meses presentamos un VMM ligero llamado Hyperlight
Estoy muy entusiasmado
Se ve interesante
Genial
Todos estos proyectos geniales e interesantes me hacen pensar que WASM está teniendo éxito en todas partes excepto en el navegador
¿Alguna idea de cómo podría integrar esto en una configuración de Proxmox?
¿Cómo se inician y administran las instancias?
Básicamente hay una VM (wasm) para aislar programas dentro de una VM de hardware, que es una abstracción para aislar programas dentro de un proceso en espacio de usuario (un proceso de Linux)
¿Es un unikernel o un library OS?