Det tredje viktiga utgÄvan av Wasmer-projektet har presenterats, som utvecklar en runtime för att köra WebAssembly-moduler, vilket kan anvÀndas för att skapa universella applikationer som kan köras pÄ olika operativsystem, samt för isolerat körande av osÀker kod. Projektets kod Àr skriven i Rust och distribueras under MIT-licens.
Möjligheten att köra en applikation pÄ olika plattformar möjliggörs genom att koden kompileras till lÄg nivÄ WebAssembly-intermediÀr kod, som kan köras pÄ alla operativsystem eller integreras i program skrivna i andra programmeringssprÄk. Programmen utgör lÀtta containrar dÀr WebAssembly-pseudokod körs. Dessa containrar Àr oberoende av operativsystemet och kan innehÄlla kod som ursprungligen skrivits i valfritt programmeringssprÄk. Emscripten-verktyget kan anvÀndas för kompilering till WebAssembly. För översÀttning av WebAssembly till maskinkod för den aktuella plattformen stöds koppling av olika kompilatorbackends (Singlepass, Cranelift, LLVM) och motorer (anvÀndning av JIT eller maskinkodsgenerering).
Applikationer Ă€r isolerade frĂ„n det huvudsakliga systemet i en sandbox-miljö och har endast tillgĂ„ng till den angivna funktionaliteten (sĂ€kerhetsmekanismen baserad pĂ„ kapabilitetshantering â för Ă„tgĂ€rder med varje resurs (filer, kataloger, sockets, systemanrop etc.) mĂ„ste motsvarande behörigheter ges till applikationen). Ă tkomstkontroll och interaktion med systemet sĂ€kerstĂ€lls genom API WASI (WebAssembly System Interface), som tillhandahĂ„ller programgrĂ€nssnitt för arbete med filer, sockets och andra funktioner som tillhandahĂ„lls av operativsystemet.
Plattformen möjliggör att uppnĂ„ en prestanda för applikationskörning som liknar prestandan av inbyggda kompileringar. Genom Native Object Engine för WebAssembly-moduler kan maskinkod genereras ("wasmer compile ânative" för att generera förkompilerade objektsfiler .so, .dylib och .dll), vilket krĂ€ver minimal runtime för körning, men behĂ„ller alla möjligheter för sandbox-isolering. För leverans av förkompilerade program finns inbyggd Wasmer. För att skapa tillĂ€gg och modifieringar erbjuds Rust API och Wasm-C-API.
För att köra en WebAssembly-container rÀcker det med att installera runtime Wasmer i systemet, som levereras utan externa beroenden ("curl https://get.wasmer.io -sSfL | sh") och sedan köra den nödvÀndiga filen ("wasmer test.wasm"). Programmen distribueras i form av vanliga WebAssembly-moduler, som kan hanteras med paketförvaltaren WAPM. Wasmer finns ocksÄ som ett bibliotek som kan anvÀndas för att integrera WebAssembly-kod i program skrivna i Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir och Java.
HuvudÀndringarna i Wasmer 3.0:
- Möjlighet att skapa inhemska körbara filer för alla plattformar har lagts till. Kommandot "wasmer create-exe" har omarbetats helt, vilket gör det möjligt att konvertera en WebAssembly-intermediÀrkodfil till sjÀlvstÀndiga körbara filer för plattformarna Linux, Windows och macOS, som kan köras utan att Wasmer behöver installeras.
- Möjlighet att köra WAPM-paket, som Ă€r placerade i katalogen wapm.io, med hjĂ€lp av kommandot âwasmer runâ. Till exempel, genom att köra âwasmer run python/pythonâ kommer paketet python att laddas frĂ„n wapm.io-repositoriet och köras.
- Wasmer Rust API har genomgÄtt en fullstÀndig omarbetning, dÀr arbetsstilen med minnet har Àndrats och sÀker lagring av Wasm-objekt i struktur Store har möjliggjorts. En ny struktur MemoryView erbjuder möjligheten att lÀsa och skriva data i det linjÀra minnesomrÄdet.
- Ett set av komponenter wasmer-js har implementerats för att köra Wasmer i webblÀsaren och interagera med det via JavaScript, med hjÀlp av biblioteket wasm-bindgen. Wasmer-js motsvarar komponenterna wasmer-sys, avsedda för att köra Wasmer pÄ vanliga operativsystem.
- Motorerna har förenklats. IstÀllet för separata motorer för JIT, dynamisk och statisk lÀnkning (Universal, Dylib, StaticLib) erbjuds nu en gemensam motor dÀr laddning och lagring av kod hanteras pÄ parameterinstÀllningsnivÄ.
- För deserialisering av artefakter anvÀnds ramverket rkyv som sÀkerstÀller arbete i zero-copy-lÀge, vilket innebÀr att ingen extra minnesallokering krÀvs och att deserialiseringen utförs endast med den ursprungligen tillhandahÄllna bufferten. AnvÀndningen av rkyv har avsevÀrt ökat starttiden.
- Den enpassiga kompilatorn Singlepass har förbÀttrats med stöd för funktioner med flera argument (multi-value), ökad driftssÀkerhet och stöd för undantagshanteringsramar har lagts till.
- Implementeringen av API WASI (WebAssembly System Interface) har förbÀttrats. Problem i WASI-grÀnssnittet för filsystemshantering har ÄtgÀrdats. Inre typer har omarbetats med WAI (WebAssembly Interfaces), vilket i framtiden kommer att göra det möjligt att implementera en serie nya funktioner.
KĂ€lla: opennet.ru
