>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Rust

Come Eseguire Codice Non Fidato Senza Diventare Grigio

Immagina di dover eseguire un pezzo di codice inviato da un utente o da un servizio di terze parti. Docker classico sembra troppo pesante, ed eseguirlo in un processo separato fa paura. Un passo falso e il tuo server si trasforma in una zucca o, peggio, diventa parte di una botnet. Questo è esattamente il tipo di scenario per cui il team di CNCF Sandbox sta sviluppando Hyperlight.

hyperlight logo

Cos'è Questa Bestia

Hyperlight è una libreria Rust che crea micro-macchine virtuali al volo. Non cerca di emulare un intero computer con scheda grafica e tastiera. Il progetto invece fa girare un ambiente di esecuzione completamente spogliato che non ha nemmeno un kernel del sistema operativo. L'intero "guest" è solo un binario compilato per no_std Rust o C.

Il punto di forza principale è la velocità. Gli autori affermano che una micro-VM si avvia in millisecondi, e le chiamate di funzione tra host e guest richiedono microsecondi. Sembra la base perfetta per costruire le tue piattaforme serverless o plugin sicuri.

Come Funziona in Pratica

Lavorare con Hyperlight sembra programmazione normale, tranne che le funzioni vengono eseguite in mondi diversi. Aggiungi la libreria alla tua applicazione Rust, le passi un binario guest compilato, e chiami i metodi.

Ecco come appare l'inizializzazione lato 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}"); 

Ecco come appare il codice all'interno della macchina virtuale. Grazie alle macro, tutto è molto trasparente:

#[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}."))
}

Perché È Più Veloce delle VM Normali

Il segreto sta nel minimalismo totale. Hyperlight non ha Linux dentro Linux. Non ci sono driver del filesystem, stack di rete o scheduler dei task. Quando chiami una funzione, l'hypervisor (KVM su Linux o MSHV/WHP su Windows) semplicemente cambia il contesto della CPU.

Un dettaglio interessante: il progetto supporta i meccanismi snapshot e restore. Se devi eseguire migliaia di chiamate simili, puoi inizializzare la sandbox una volta, fare uno snapshot della memoria, e tornare a quello prima di ogni nuova esecuzione. Questo assicura che ogni chiamata inizi con una lavagna pulita senza spendere tempo a ricaricare il binario.

Chi Ne Ha Bisogno e Perché

Vedo diversi scenari in cui Hyperlight potrebbe davvero sfondare.

Prima di tutto, le funzioni cloud (FaaS). Se stai costruendo la tua alternativa a AWS Lambda, hai bisogno di isolamento a livello hypervisor ma non vuoi aspettare un secondo per l'avvio di un container.

Poi ci sono le estensioni per sistemi complessi. Diciamo che hai un database o un server di gioco e vuoi permettere agli utenti di scrivere i propri script. Lua o WASM è figo, ma Hyperlight fornisce un isolamento ancora più stretto e ti permette di scrivere in Rust o C familiari.

A proposito, nel repository ci sono link a progetti correlati come hyperlight-wasm e hyperlight-js. Questo significa che puoi già eseguire WebAssembly o JavaScript dentro queste micro-VM, rendendo lo strumento ancora più versatile.

Sfumature e Limitazioni

Il progetto è in stato pre-1.0. Questo significa che l'API può cambiare in qualsiasi momento, e la documentazione è occasionalmente cervellotica.

Nota importante: Hyperlight non è progettato per eseguire applicazioni Linux normali. Non potrai eseguire ls o curl perché le system call semplicemente non esistono. Se hai bisogno esattamente di quello, dovrai guardare Unikraft o VMM completi come Firecracker. Qui stiamo parlando di puro codice nel vuoto.

Vale la Pena Provare

Se il tuo compito è eseguire in sicurezza un piccolo pezzo di codice con latenza minima, Hyperlight sembra molto promettente. Fornisce quel punto ideale tra processi "permeabili" e VM pesanti.

Il modo più semplice per iniziare è attraverso GitHub Codespaces, con i link proprio nel README. Lì tutto è già configurato, incluso KVM, quindi puoi esplorare gli esempi senza configurare la tua macchina locale. Il progetto è mantenuto attivamente sotto l'egida CNCF, con call comunitarie regolari, quindi le prospettive a lungo termine sembrano solide.

Progetti correlati