Obsah

WASI: WebAssembly System Interface

WASI je modulární systémové rozhraní pro WebAssembly. Jeho cílem je vytvořit standard, který umožní spouštět binární moduly Wasm na jakémkoliv operačním systému nebo cloudu s nativním výkonem a vysokou bezpečností.

Solomon Hykes (spoluzakladatel Dockeru) o něm prohlásil: „Kdyby v roce 2008 existovalo WASI, nemuseli bychom vymýšlet Docker.“

1. Proč WASI vzniklo?

WebAssembly je skvělý engine pro výpočty, ale sám o sobě nemá přístup k počítači (nemůže otevřít soubor, vypsat text do konzole nebo poslat data po síti).

2. Klíčové vlastnosti WASI

A. Portabilita (Write Once, Run Anywhere)

Kód zkompilovaný do Wasm s podporou WASI poběží stejně na Windows, Linuxu i macOS bez nutnosti úpravy zdrojového kódu. Stačí mít nainstalovaný tzv. Wasm Runtime (např. Wasmtime nebo Wasmer).

B. Bezpečnost založená na oprávněních (Capability-based Security)

WASI používá velmi striktní bezpečnostní model. Na rozdíl od běžných aplikací, které mají přístup ke všemu, co jim dovolí uživatel, modul WASI nemá přístup k ničemu, co mu není výslovně předáno.

[Image showing WASI security model: User grants specific file capabilities to Wasm Sandbox]

3. Jak WASI funguje?

WASI definuje sadu systémových funkcí (např. fd_read, path_open), které jsou podobné standardu POSIX (používaném v Linuxu/Unixu).

1. Vývojář napíše kód (např. v [[it:sw:rust_programming|Rustu]]).
2. Kompilátor (např. LLVM) přeloží kód do Wasm a mapuje systémové volání na standard **WASI**.
3. **Wasm Runtime** na cílovém stroji přeloží tato volání na skutečné instrukce operačního systému.

4. WASI vs. Docker

WASI je často srovnáváno s kontejnery, ale mají odlišné vlastnosti:

Vlastnost Docker (Kontejnery) WASI (Wasm)
Rychlost startu Sekundy / stovky milisekund Mikrosekundy (téměř okamžitě)
Velikost Stovky MB (celý OS image) Kilobajty / jednotky MB
Izolace Úroveň procesů OS Úroveň instrukcí v sandboxu
Výkon Nativní Téměř nativní (JIT kompilace)

5. Praktické využití


Související články:

Tagy: it wasm wasi cloud-native serverless rust system-programming