>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Rust

Hoe onvertrouwde code uitvoeren zonder er grijs van te worden

Stel je voor dat je een stukje code moet uitvoeren dat is verzonden door een gebruiker of een externe service. Gewone Docker voelt te zwaar aan, en het gewoon uitvoeren in een apart proces is angstaanjagend. Eén verkeerde beweging en uw server verandert in een pompoen, of erger nog, wordt onderdeel van een botnet. Dit is precies het soort scenario waar het CNCF Sandbox-team Hyperlight voor ontwikkelt.

hyperlight logo

Wat is dit beest

Hyperlight is een Rust-bibliotheek die micro-virtuele machines on-the-fly maakt. Het probeert niet een hele computer te emuleren met een grafische kaart en toetsenbord. In plaats daarvan draait het project een maximaal gestripte uitvoeringsomgeving die niet eens een OS-kernel heeft. De hele "gast" is slechts een binair bestand gecompileerd voor no_std Rust of C.

Het belangrijkste verkoopargument hier is snelheid. De auteurs beweren dat een micro-VM in milliseconden opstart, en functieaanroepen tussen host en gast duren microseconden. Dit klinkt als de perfecte basis voor het bouwen van uw eigen serverless platforms of veilige plugins.

Hoe het in de praktijk werkt

Werken met Hyperlight voelt als gewoon programmeren, behalve dat functies in verschillende werelden worden uitgevoerd. U voegt de bibliotheek toe aan uw Rust-applicatie, geeft het een gecompileerd gast-binair bestand en roept methoden aan.

Zo ziet initialisatie aan de host-kant eruit:

// Подготавливаем песочницу, пока без запуска 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}"); 

En zo ziet de code inside de virtuele machine eruit. Dankzij macro's is alles zeer transparant:

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

Waarom het sneller is dan gewone VM's

Het geheim ligt in totale minimalisme. Hyperlight heeft geen Linux binnen Linux. Er zijn geen bestandssysteemdrivers, netwerkstack of taakscheduler. Wanneer u een functie aanroept, schakelt de hypervisor (KVM op Linux of MSHV/WHP op Windows) simpelweg de CPU-context om.

Een interessant detail: het project ondersteunt snapshot en restore mechanismen. Als u duizenden vergelijkbare aanroepen moet uitvoeren, kunt u de sandbox één keer initialiseren, een geheugenmomentopname maken en terugdraaien naar deze vóór elke nieuwe uitvoering. Dit zorgt ervoor dat elke aanroep begint met een schone lei zonder tijd te verspillen aan het opnieuw laden van het binaire bestand.

Wie heeft dit nodig en waarom

Ik zie verschillende scenario's waarin Hyperlight echt van pas zou kunnen komen.

Ten eerste zijn er cloudfuncties (FaaS). Als u uw eigen AWS Lambda-alternatief bouwt, heeft u hypervisor-niveau isolatie nodig maar wilt u niet een seconde wachten tot een container opstart.

Ten tweede zijn er extensies voor complexe systemen. Stel dat u een database of gameserver heeft en gebruikers hun eigen scripts wilt laten schrijven. Lua of WASM is cool, maar Hyperlight biedt nog striktere isolatie en laat u schrijven in vertrouwde Rust of C.

Trouwens, de repository heeft links naar gerelateerde projecten zoals hyperlight-wasm en hyperlight-js. Dit betekent dat u nu al WebAssembly of JavaScript inside deze micro-VM's kunt uitvoeren, waardoor het gereedschap nog veelzijdiger wordt.

Nuances en beperkingen

Het project is in pre-1.0 status. Dit betekent dat de API op elk moment kan veranderen en de documentatie af en toe hoofdschrapen veroorzaakt.

Belangrijke noot: Hyperlight is niet ontworpen voor het uitvoeren van gewone Linux-toepassingen. U kunt er geen ls of curl uitvoeren omdat systeemoproepen simpelweg niet bestaan. Als u precies dat nodig heeft, moet u kijken naar Unikraft of volwaardige VMM's zoals Firecracker. Hier hebben we het over pure code in een vacuüm.

Is het de moeite waard om te proberen

Als uw taak is om veilig een klein stukje code uit te voeren met minimale latentie, ziet Hyperlight er veelbelovend uit. Het biedt die perfecte balans tussen "lekke" processen en zware VM's.

De gemakkelijkste manier om te beginnen is via GitHub Codespaces, met links right in de README. Alles is daar al geconfigureerd, inclusief KVM, dus u kunt de voorbeelden verkennen zonder uw lokale machine in te stellen. Het project wordt actief onderhouden onder de CNCF-vlag, met regelmatige community calls, dus de vooruitzichten op lange termijn zien er solide uit.

Gerelateerde projecten