Zaprezentowano wydanie projektu Wasmer 5.0, który rozwija środowisko uruchomieniowe do wykonywania modułów WebAssembly, które można wykorzystać do tworzenia uniwersalnych aplikacji, które mogą działać na różnych systemach operacyjnych. Wasmer może być również używany do izolowania niezaufanych bloków kodu w zwykłych aplikacjach. Kod projektu napisany jest w języku Rust i jest rozpowszechniany na licencji MIT.
Możliwość uruchomienia jednej aplikacji na różnych platformach realizowana jest poprzez kompilację do niskopoziomowego kodu pośredniego WebAssembly, który może działać na dowolnym systemie operacyjnym lub być osadzany w programach w innych językach programowania. Programy są lekkimi kontenerami, w których uruchamiany jest pseudokod WebAssembly. Kontenery te nie są powiązane z systemem operacyjnym i mogą zawierać kod oryginalnie napisany w dowolnym języku programowania.
Oferowane są różne backendy do wykonywania kodu pośredniego WebAssembly lub tłumaczenia go na kod maszynowy platformy docelowej:
- Backend oparty na kompilatorze Singlepass, optymalny do zastosowania w blockchainach.
- Backend oparty na generatorze kodu Cranelift, optymalny do wykorzystania w procesie deweloperskim.
- Backend oparty na kompilatorze LLVM, optymalny do zastosowania w wdrożeniach produkcyjnych.
- Backend do uruchomienia w przeglądarce internetowej.
- Zaplecze oparte na silniku JavaScript JavascriptCore, optymalne do wykorzystania na platformie macOS.
- Backend oparty na silniku JavaScript V8, optymalny dla aplikacji na iOS i Android.
- Backend oparty na interpreterze Wasmi, optymalny dla blockchainów i projektów Rust nie korzystających ze standardowej biblioteki (nostd).
- Backend oparty na runtime WAMR, optymalny dla platformy iOS
Aplikacje są odizolowane od głównego systemu w środowisku sandbox i mają dostęp jedynie do zadeklarowanej funkcjonalności. Do izolacji wykorzystywany jest mechanizm oparty na zarządzaniu możliwościami - do akcji na każdym z zasobów (plikach, katalogach, gniazdach, wywołaniach systemowych itp.) aplikacja musi mieć nadane odpowiednie uprawnienia. Kontrola dostępu i interakcja z systemem odbywa się za pomocą API WASI (WebAssembly System Interface), które udostępnia interfejsy programistyczne do pracy z plikami, gniazdami i innymi funkcjami systemu.
Platforma pozwala na osiągnięcie wydajności wykonywania aplikacji zbliżonej do natywnych zespołów. Używając Native Object Engine dla modułu WebAssembly, możesz wygenerować kod maszynowy, który wymaga minimalnego czasu działania, ale zachowuje wszystkie funkcje izolacji piaskownicy. Istnieje możliwość dostarczenia prekompilowanych programów z wbudowanym Wasmerem. Do tworzenia dodatków i rozszerzeń oferowane są Rust API i Wasm-C-API.
Aby uruchomić kontener WebAssembly, wystarczy zainstalować Wasmer w systemie wykonawczym, który jest dostarczany bez zewnętrznych zależności („curl https://get.wasmer.io -sSfL | sh”) i uruchomić niezbędny plik („wasmer test.wasm” ). Programy są dystrybuowane w postaci zwykłych modułów WebAssembly, którymi można zarządzać za pomocą menedżera pakietów WAPM. Wasmer jest również dostępny jako biblioteka, której można używać do osadzania kodu WebAssembly w programach Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir i Java.
Kluczowe innowacje w Wasmer 5.0:
- Zaimplementowano możliwość korzystania z interpreterów WebAssembly.
- Dodano eksperymentalny backend oparty na lekkim interpreterze Wasmi, który umożliwia uruchamianie pośredniego kodu WebAssembly w środowiskach o ograniczonych zasobach.
- Dodano eksperymentalny backend oparty na środowisku wykonawczym WebAssembly WAMR (WebAssembly Micro Runtime), zoptymalizowany pod kątem minimalnego zużycia zasobów i odpowiedni do stosowania na urządzeniach z małą ilością pamięci RAM.
- Dodano eksperymentalny backend oparty na silniku JavaScript v8 stosowanym w przeglądarkach opartych na bazie kodu Chromium. Główną zaletą korzystania z backendu opartego na V8 jest możliwość wykorzystania debugera i narzędzi dla twórców stron internetowych wbudowanych w ten silnik, a także dostępność zaawansowanych funkcjonalności WebAssembly w V8, takich jak obsługa wyjątków i zbieranie śmieci.
- Do zaplecza LLVM dodano eksperymentalną obsługę architektury Loongarch64.
- Dodano obsługę platformy iOS, dostępną w przypadku korzystania z backendów WAMR, Wasmi i V8.
- Zakończono obsługę kompilatora Emscripten.
- Zaktualizowano zależności, w tym LLVM 18, generator kodu Cranelift 27 i framework rkyv 0.8.
- Przeprowadzono optymalizację wydajności. Na przykład podczas wykonywania operacji deserializacji modułów obserwuje się wzrost wydajności nawet o 50%.







Źródło: opennet.ru







