Byl představen výstup projektu Wasmer 5.0, který vyvíjí runtime pro vykonávání modulů WebAssembly, jež lze využít k vytváření univerzálních aplikací schopných běžet na různých operačních systémech. Wasmer lze také používat pro izolované vykonávání nedůvěryhodných bloků kódu v rámci běžných aplikací. Kód projektu je napsán v jazyce Rust a je distribuován pod licencí MIT.
Možnost spuštění jedné aplikace na různých platformách je realizována prostřednictvím kompilace do nízkoúrovňového mezikódu WebAssembly, který může být spuštěn na jakémkoliv OS nebo vložen do programů v jiných programovacích jazycích. Programy představují lehké kontejnery, ve kterých je vykonáván pseudokód WebAssembly. Tyto kontejnery nejsou vázány na operační systém a mohou obsahovat kód původně napsaný v jakémkoliv programovacím jazyce.
Pro vykonávání mezikódu WebAssembly nebo jeho překlad do strojového kódu cílové platformy jsou nabízeny různé backendy:
- Backend založený na kompilátoru Singlepass, optimální pro použití v blockchainech.
- Backend založený na generátoru kódu Cranelift, optimální pro použití během vývoje.
- Backend založený na kompilátoru LLVM, optimální pro použití v pracovních nasazeních.
- Backend pro spuštění v webovém prohlížeči.
- Backend založený na JavaScriptovém enginu JavascriptCore, optimální pro použití na platformě macOS.
- Backend založený na JavaScriptovém enginu V8, optimální pro aplikace na platformách iOS a Android.
- Backend založený na interpretru Wasmi, optimální pro blockchainy a projekty v Rustu, které nepoužívají standardní knihovnu (nostd).
- Backend založený na runtime WAMR, optimální pro platformu iOS.
Aplikace jsou izolovány od hlavního systému v sandboxovém prostředí a mají přístup pouze k deklarované funkčnosti. Pro izolaci se používá mechanismus založený na správě oprávnění — pro akce s každým z prostředků (soubory, adresáře, sokety, systémové volání atd.) musí být aplikaci uděleny odpovídající pravomoci. Správa přístupu a interakce se systémem je zajištěna prostřednictvím API WASI (WebAssembly System Interface), které poskytuje programové rozhraní pro práci se soubory, sokety a dalšími systémovými funkcemi.
Platforma umožňuje dosáhnout výkonu provozu aplikací blízkého nativním sestavením. Pomocí Native Object Engine pro modul WebAssembly je možné generovat strojový kód, který vyžaduje minimální runtime, ale zachovává všechny možnosti sandboxové izolace. Je možné dodávat předkompilované programy se zabudovaným Wasmerem. Pro vytváření nadstaveb a doplňků jsou k dispozici rozhraní Rust API a Wasm-C-API.
K spuštění konteineru WebAssembly stačí nainstalovat do systému runtime Wasmer, který je dodáván bez externích závislostí ("curl https://get.wasmer.io -sSfL | sh") a spustit požadovaný soubor ("wasmer test.wasm"). Programy jsou distribuovány ve formě běžných modulů WebAssembly, jejichž správu lze provádět pomocí správce balíčků WAPM. Wasmer je také dostupný ve formě knihovny, kterou lze použít k integraci kódu WebAssembly do programů v jazycích Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir a Java.
Hlavní novinky Wasmer 5.0:
- Byla implementována možnost použití interpreterů WebAssembly.
- Byl přidán experimentální backend založený na lehkém interpreteru Wasmi, který umožňuje vykonávat mezikód WebAssembly v prostředích s omezenými zdroji.
- Byl přidán experimentální backend založený na běhu WebAssembly WAMR (WebAssembly Micro Runtime), optimalizovaný pro minimální spotřebu zdrojů a vhodný pro použití na zařízeních s malým objemem operační paměti.
- Byl přidán experimentální backend založený na JavaScriptovém motoru v8, který se používá v prohlížečích na kódové bázi Chromium. Hlavní výhodou použití backendu založeného na V8 je možnost využití integrovaného ladicího nástroje a nástrojů pro webové vývojáře, stejně jako dostupnost v V8 rozšířené funkčnosti WebAssembly, jako je zpracování výjimek a garbage collection.
- Do backendu využívajícího LLVM byla přidána experimentální podpora architektury Loongarch64.
- Byla přidána podpora platformy iOS, dostupná při použití backendů WAMR, Wasmi a V8.
- Byla ukončena podpora kompilátoru Emscripten.
- Byly aktualizovány závislosti, mezi které patří LLVM 18, generátor kódu Cranelift 27 a framework rkyv 0.8.
- Byla provedena optimalizace výkonu. Například při provádění operací deserializace modulů byl pozorován nárůst výkonu až o 50%.







Zdroj: opennet.ru







