Jorge Turbica / blog · Blog ← Todos los artículos EN · Read in English
Tecnologías

Hyperlight aísla tu Python en una micro-VM que se restaura en 3 ms, sin recompilar

hyperlight-unikraft ejecuta Python, Node o .NET sin cambios en micro-VMs con hipervisor. Para quien ejecuta código de agentes o de terceros.

Restaurar una micro-VM con Python ya arrancado cuesta unos 3 ms con hyperlight-unikraft, la última pieza de Hyperlight, el monitor de máquinas virtuales que es proyecto Sandbox de la CNCF. Hasta ahora, Hyperlight solo aceptaba invitados compilados para él. Ahora ejecuta el mismo binario de Python, Node.js, .NET, Java o Go que usas en Linux, sin SDK ni recompilación. El equipo lo presentó en el blog de la CNCF el 9 de noviembre de 2026.

Esto importa porque cada vez ejecutamos más código que no ha escrito nadie del equipo: el Python que genera un agente, los plugins de un cliente o una UDF que sube un usuario. Un sandbox de proceso arranca rápido, pero si el runtime o el kernel compartido tienen un fallo, el atacante llega al host. Una VM separa con el hipervisor, pero arrancarla lleva cientos de milisegundos. hyperlight-unikraft quiere dar el aislamiento de la VM con la latencia del proceso.

Qué hay dentro

Hyperlight es una librería en Rust (con SDK para Python y .NET) que tu aplicación enlaza, no un proceso VMM aparte. Usa KVM o MSHV en Linux, WHP en Windows e Hypervisor.framework en macOS con Apple silicon. La micro-VM no emula dispositivos: el invitado solo habla con el host a través de las funciones que el host le expone.

hyperlight-unikraft añade un kernel Unikraft como sistema invitado: un unikernel con un único espacio de direcciones y solo los componentes que necesita la aplicación. Encima monta un rootfs con el runtime (el de Python ocupa unos 14 MB) y un pequeño driver por lenguaje que deja el intérprete listo y esperando.

La clave es el snapshot. La primera ejecución arranca el invitado, inicializa el runtime y guarda su estado; las siguientes lo restauran en vez de arrancar. Con warm_exec puedes incluir en el snapshot las importaciones caras (import flask, pandas), que dejan de pagarse en cada llamada.

Las cifras del equipo (mediana, con el arranque del proceso incluido, hluk 0.20.1, en una VM de Azure de 8 vCPU con KVM anidado):

Cargahluk desde snapshotNativo
Python, hola mundo22 ms17 ms
Node.js, hola mundo39 ms22 ms
C# compilado con Roslyn dentro del invitado95 ms1.549 ms (dotnet run)
Python que importa numpy, pandas y scikit-learn45 ms1.119 ms

En un hola mundo, la micro-VM es más lenta que el proceso nativo, y es lógico. La ventaja aparece cuando el runtime tarda en arrancar: ahí el snapshot evita trabajo que el proceso nativo repite en cada ejecución. En la misma máquina, ocho micro-VMs que compartían un snapshot de Python atendieron unas 850 llamadas por segundo entre todas.

Seguridad: nada por defecto

El invitado no ve ficheros del host ni tiene red hasta que se lo das: --mount abre un directorio, --net activa la red (con listas --net-allow y --net-block) y --port le deja escuchar. En la charla de WasmCon 2026, el equipo ejecutó un exploit de un fallo ya corregido de Wasmtime (CVE-2023-26489): directamente en el host, leía secretos del proceso; dentro de hyperlight-unikraft, solo alcanzaba la memoria de la micro-VM.

Cómo probarlo

El README propone un script de instalación. Es un curl | sh, así que léelo antes o usa la alternativa con Rust:

bash
# Linux (KVM) o macOS con Apple silicon
curl -fsSL https://raw.githubusercontent.com/hyperlight-dev/hyperlight-unikraft/main/install.sh | sh
# o, con toolchain de Rust
cargo install hyperlight-unikraft

hluk init hello --template python   # escribe hluk.toml y main.py, y descarga el rootfs
cd hello
hluk run   # arranca el invitado y guarda el snapshot
hluk run   # restaura el snapshot: milisegundos

hluk templates lista el resto de plantillas: Node.js, Bash, C#, Java, PHP, PowerShell, programas compilados en Go, Rust o C, servidores HTTP sobre un rootfs ampliado con un Dockerfile y una imagen agent con numpy, pandas, scipy y scikit-learn precargados.

Donde más rápido se nota es en las integraciones ya publicadas en PyPI:

  • mcp-server-hyperlight: un servidor MCP con una herramienta run_python que conserva el estado entre llamadas. En Claude Code se añade con claude mcp add hyperlight -- uvx mcp-server-hyperlight.
  • smolagents-hyperlight y openai-agents-hyperlight: ejecutan el código o los comandos de shell de un agente en una micro-VM sin red salvo que la permitas.
  • clickhouse-hyperlight: UDF en Python para ClickHouse que restauran una micro-VM por bloque de filas en unos 1,5 ms.

Para Kubernetes, urunc ejecuta los invitados como contenedores OCI bajo containerd con una RuntimeClass, sin contenedores privilegiados.

Frente a Firecracker

La referencia en micro-VMs es Firecracker, el VMM que integran runtimes de contenedores como Kata Containers. Resuelven el mismo problema desde lados distintos:

hyperlight-unikraftFirecracker
ModeloLibrería que enlaza tu aplicaciónProceso VMM con API REST
InvitadoUnikernel Unikraft + rootfs del runtimeKernel Linux completo
Arranque~3 ms restaurando snapshotMenos de 125 ms de arranque
HostsLinux, Windows y macOS (Apple silicon)Linux con KVM
MadurezProyecto Sandbox de la CNCF; repo creado en mayo de 202637.900 estrellas; integrado en Kata Containers
LicenciaApache 2.0Apache 2.0

Los 3 ms de uno y los 125 ms del otro no miden lo mismo: uno es restaurar un estado guardado y el otro, arrancar desde cero. La diferencia real está en el modelo. Firecracker te da una VM Linux completa con red y discos virtio, ideal para aislar cargas largas y multiinquilino. hyperlight-unikraft te da una función aislada que llamas desde tu código miles de veces, ideal para ejecutar fragmentos que no controlas.

La cautela que importa

El invitado no es Linux: es un unikernel que imita su interfaz. La documentación del manifiesto lo deja claro: los binarios tienen que ser PIE y no pueden hacer fork(). Cualquier programa o librería que se clone con fork() fallará donde en un contenedor funcionaría. Antes de meterlo delante de un agente en producción, prueba tus cargas reales con la imagen que vayas a usar, no un hola mundo. Además, las cifras de rendimiento son de una sola máquina con virtualización anidada.

Si ejecutas código generado por agentes en contenedores normales, mcp-server-hyperlight es la forma más barata de probar el aislamiento por hipervisor sin tocar tu arquitectura.

Fuentes

Jorge Turbica

Software Engineer y SRE. Escribo sobre los retos reales que me encuentro en producción.

Ver portfolio ↗