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.“
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).
—
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).
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.
data.txt, musíte jí při spuštění předat konkrétní popisovač (file descriptor) tohoto souboru. Aplikace „nevidí“ zbytek vašeho disku.[Image showing WASI security model: User grants specific file capabilities to Wasm Sandbox]
—
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.
—
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) |
—
Související články:
Tagy: it wasm wasi cloud-native serverless rust system-programming