>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Rust

Cómo ejecutar código no confiable sin quedarse calvo

Imagina que necesitas ejecutar un fragmento de código enviado por un usuario o un servicio de terceros. Docker normal se siente demasiado pesado, y simplemente ejecutarlo en un proceso separado da miedo. Un mal movimiento y tu servidor se convierte en una calabaza o, peor aún, se convierte en parte de una botnet. Este es exactamente el tipo de escenario para el cual la gente de CNCF Sandbox está desarrollando Hyperlight.

hyperlight logo

Qué Es Esta Bestia

Hyperlight es una biblioteca Rust que crea micro-máquinas virtuales al vuelo. No intenta emular una computadora completa con tarjeta gráfica y teclado. En cambio, el proyecto levanta un entorno de ejecución maximally stripped-down que ni siquiera tiene un kernel del sistema operativo. El "guest" completo es solo un binario compilado para no_std Rust o C.

El principal punto de venta aquí es la velocidad. Los autores afirman que una micro-VM inicia en milisegundos, y las llamadas de función entre host y guest toman microsegundos. Esto suena como la base perfecta para construir tus propias plataformas serverless o plugins seguros.

Cómo Funciona en la Práctica

Trabajar con Hyperlight se siente como programación regular, excepto que las funciones se ejecutan en mundos diferentes. Agregas la biblioteca a tu aplicación Rust, le pasas un binario guest compilado, y llamas a los métodos.

Así se ve la inicialización del lado del host:

// Подготавливаем песочницу, пока без запуска VM
let mut sandbox = UninitializedSandbox::new(GuestBinary::FilePath(guest_path), None)?;

// Можно прокинуть функцию из хоста в гостя, например, для доступа к БД
sandbox.register("GetWeekday", || Ok("Monday".to_string()))?;

// А теперь «зажигаем» VM
let mut sandbox: MultiUseSandbox = sandbox.evolve()?;

// Вызываем функцию внутри виртуалки
let greeting: String = sandbox.call("SayHello", "World".to_string())?;
println!("{greeting}"); 

Y así se ve el código dentro de la máquina virtual. Gracias a las macros, todo es muy transparente:

#[host_function("GetWeekday")]
fn get_weekday() -> Result<String>;

#[guest_function("SayHello")]
fn say_hello(name: String) -> Result<String> {
    let weekday = get_weekday()?;
    Ok(format!("Hello, {name}! Today is {weekday}."))
}

Por Qué Es Más Rápido Que las VMs Regulares

El secreto está en el minimalismo total. Hyperlight no tiene Linux dentro de Linux. No hay drivers de sistema de archivos, stack de red, ni scheduler de tareas. Cuando llamas a una función, el hipervisor (KVM en Linux o MSHV/WHP en Windows) simplemente cambia el contexto de la CPU.

Un detalle interesante: el proyecto soporta mecanismos de snapshot y restore. Si necesitas ejecutar miles de llamadas similares, puedes inicializar el sandbox una vez, tomar una snapshot de memoria, y volver a ella antes de cada nueva ejecución. Esto asegura que cada llamada comience con un estado limpio sin gastar tiempo recargando el binario.

Quién Necesita Esto y Por Qué

Veo varios escenarios donde Hyperlight podría despegar de verdad.

Primero, están las funciones en la nube (FaaS). Si estás construyendo tu propia alternativa a AWS Lambda, necesitas aislamiento a nivel de hipervisor pero no quieres esperar un segundo a que un contenedor se levante.

Segundo, están las extensiones para sistemas complejos. Digamos que tienes una base de datos o servidor de juegos y quieres permitir que los usuarios escriban sus propios scripts. Lua o WASM está cool, pero Hyperlight proporciona aislamiento aún más estricto y te permite escribir en Rust o C familiar.

Por cierto, el repositorio tiene enlaces a proyectos relacionados como hyperlight-wasm y hyperlight-js. Esto significa que ya puedes ejecutar WebAssembly o JavaScript dentro de estas micro-VMs, haciendo la herramienta aún más versátil.

Matices y Limitaciones

El proyecto está en estado pre-1.0. Esto significa que la API puede cambiar en cualquier momento, y la documentación ocasionalmente te hace rascarte la cabeza.

Nota importante: Hyperlight no está diseñado para ejecutar aplicaciones Linux regulares. No podrás ejecutar ls o curl ahí porque las llamadas al sistema simplemente no existen. Si necesitas exactamente eso, tendrás que buscar Unikraft o VMMs completos como Firecracker. Aquí estamos hablando de código puro en el vacío.

¿Vale la Pena Probar?

Si tu tarea es ejecutar un pequeño fragmento de código de forma segura con latencia mínima, Hyperlight se ve muy prometedor. Proporciona ese punto óptimo entre procesos "con fugas" y VMs pesadas.

La forma más fácil de comenzar es a través de GitHub Codespaces, con enlaces right en el README. Todo ya está configurado ahí, incluyendo KVM, así que puedes explorar los ejemplos sin configurar tu máquina local. El proyecto se mantiene activamente bajo el paraguas de CNCF, con llamadas comunitarias regulares, así que sus perspectivas a largo plazo se ven sólidas.

Proyectos relacionados