Mozilla, Fastly, Intel i Red Hat promują WebAssembly jako platformę o uniwersalnym zastosowaniu

Mozilla, Fastly, Intel i Red Hat zjednoczony swoje wysiłki w opracowywaniu technologii, które pomagają uczynić WebAssembly uniwersalną platformą do bezpiecznego wykonywania kodu w dowolnej infrastrukturze, systemie operacyjnym lub urządzeniu. Powstała społeczność w celu wspólnego rozwoju środowiska uruchomieniowego i kompilatorów, które umożliwiają korzystanie z WebAssembly nie tylko w przeglądarkach internetowych Sojusz kodu bajtowego.

Do tworzenia przenośnych programów dostarczanych w formacie WebAssembly, które można uruchomić poza przeglądarką, sugerujemy skorzystanie z API CZY BYŁEM (WebAssembly System Interface), który zapewnia interfejsy oprogramowania do bezpośredniej interakcji z systemem operacyjnym (POSIX API do pracy z plikami, gniazdami itp.). Cechą charakterystyczną modelu wykonania aplikacji korzystających z WASI jest to, że działają one w środowisku piaskownicy w celu izolacji od systemu głównego i korzystają z mechanizmu bezpieczeństwa opartego na zarządzaniu możliwościami dla akcji z każdym z zasobów (pliki, katalogi, gniazda, wywołania systemowe itp.) aplikacja musi otrzymać odpowiednie uprawnienia (zapewniony jest jedynie dostęp do zadeklarowanej funkcjonalności).

Jeden z cele Utworzony sojusz jest rozwiązaniem problemu dystrybucji nowoczesnych aplikacji modułowych o dużej liczbie zależności. W takich aplikacjach każda zależność może być potencjalnym źródłem luk lub ataków. Przejęcie kontroli nad zależnością pozwala uzyskać kontrolę nad wszystkimi aplikacjami z nią powiązanymi. Zaufanie do aplikacji automatycznie oznacza zaufanie do wszystkich zależności, ale zależności są często opracowywane i utrzymywane przez zewnętrzne zespoły, których działań nie można kontrolować. Członkowie Bytecode Alliance zamierzają zapewnić całościowe rozwiązanie umożliwiające bezpieczne wykonywanie aplikacji WebAssembly, które z natury nie są godne zaufania.

Dla ochrony proponuje się zastosować koncepcję nanoprocesów, w której każdy moduł zależności jest wydzielony na oddzielnie izolowany moduł WebAssembly, którego moce ustawiane są w odniesieniu tylko do tego modułu (przykładowo biblioteka do przetwarzania ciągów znaków nie będzie móc otworzyć gniazdo sieciowe lub plik). W przeciwieństwie do separacji procesów, procedury obsługi WebAssembly są lekkie i nie wymagają prawie żadnych dodatkowych zasobów — interakcja między procedurami obsługi nie jest dużo wolniejsza niż wywoływanie zwykłych funkcji. Separacji można dokonać nie tylko na poziomie poszczególnych modułów, ale także na poziomie grup modułów, które np. muszą pracować ze wspólnymi obszarami pamięci

Żądane uprawnienia można określić zarówno na poziomie samych zależności, jak i delegować je do zależności w całym łańcuchu przez moduły nadrzędne (zasoby w WASI są powiązane ze specjalnym typem deskryptora pliku - możliwościami). Na przykład modułowi można delegować możliwość dostępu do określonego katalogu i wywołań systemowych, a jeśli infrastruktura programistyczna modułu zostanie naruszona lub zostanie zidentyfikowana luka, podczas ataku dostęp będzie ograniczony tylko do tych zasobów. Deklaracje zasobów złożone przez twórców modułów mogą być wskaźnikiem podejrzanej aktywności, na przykład gdy moduł przetwarzania tekstu prosi o pozwolenie na otwarcie połączenia sieciowego. Wstępnie ustawione uprawnienia są sprawdzane i jeśli ulegną zmianie, ładowanie zależności zostanie odrzucone do czasu aktualizacji podpisu modułu lokalnego.

Za wspólny rozwój pod skrzydłami Bytecode Alliance przetłumaczony kilka związanych z WebAssembly projektowanie, wcześniej opracowane oddzielnie przez firmy założycielskie sojuszu:

  • był czas — środowisko uruchomieniowe do uruchamiania aplikacji WebAssembly z rozszerzeniami WASI jako zwykłych, samodzielnych aplikacji. Obsługuje zarówno uruchamianie kodu bajtowego WebAssembly przy użyciu specjalnego narzędzia wiersza poleceń, jak i łączenie gotowych plików wykonywalnych (wasmtime jest wbudowany w aplikację jako biblioteka). Wasmtime posiada elastyczną strukturę modułową, która pozwala skalować czas działania pod kątem różnych aplikacji, np. można stworzyć uproszczoną wersję dla urządzeń o ograniczonych zasobach;
  • Świeci się — kompilator i środowisko uruchomieniowe do wykonywania programów w formacie WebAssembly. Charakterystyczny funkcja Lucet polega na wykorzystaniu pełnoprawnej kompilacji antycypacyjnej (AOT, z wyprzedzeniem) zamiast JIT do kodu maszynowego odpowiedniego do bezpośredniego wykonania. Projekt został opracowany przez firmę Fastly i jest zoptymalizowany pod kątem zużywania minimalnych zasobów i bardzo szybkiego uruchamiania nowych instancji (Fastly wykorzystuje Lucet w silniku przetwarzania danych w chmurze, który wykorzystuje WebAssembly dla procedur obsługi uruchamianych na każde żądanie). W ramach wspólnego projektu planowana jest konwersja kompilatora Lucet tak, aby jako bazę wykorzystywał Wasmtime;
  • WAM (WebAssembly Micro Runtime) to kolejne środowisko wykonawcze do wykonywania WebAssembly, pierwotnie opracowane przez firmę Intel do użytku w urządzeniach Internetu rzeczy. WAMR jest zoptymalizowany pod kątem minimalnego zużycia zasobów i może być używany na urządzeniach z małą ilością pamięci RAM. Projekt obejmuje interpreter i maszynę wirtualną do wykonywania kodu bajtowego WebAssembly, API (podzbiór Libc) oraz narzędzia do dynamicznego zarządzania aplikacjami;
  • Dźwig dźwigowy — generator kodu, który tłumaczy reprezentację pośrednią niezależną od architektury sprzętowej na wykonywalny kod maszynowy zoptymalizowany dla określonych platform sprzętowych. Cranelift obsługuje równoległość kompilacji funkcji w celu bardzo szybkiego generowania wyników, co pozwala na wykorzystanie go do tworzenia kompilatorów JIT (w maszynie wirtualnej Wasmtime używany jest JIT oparty na Cranelift);
  • WASI powszechne — osobna implementacja API WASI (WebAssembly System Interface) do organizowania interakcji z systemem operacyjnym;
  • cargo-wasi — moduł menedżera pakietów Cargo, który implementuje polecenie kompilacji kodu Rusta do kodu bajtowego WebAssembly przy użyciu interfejsu WASI w celu korzystania z WebAssembly poza przeglądarką;
  • wat и wasmparser — parsery do analizowania tekstu (WAT, WAST) i binarnych reprezentacji kodu bajtowego WebAssembly.

Podsumowując, WebAssembly jest bardzo podobne do Asm.js, ale inny ponieważ jest to format binarny, który nie jest powiązany z JavaScriptem i umożliwia wykonanie w przeglądarce niskopoziomowego kodu pośredniego skompilowanego z różnych języków programowania. WebAssembly nie wymaga modułu zbierającego elementy bezużyteczne, ponieważ korzysta z jawnego zarządzania pamięcią. Używając JIT dla WebAssembly, możesz osiągnąć poziom wydajności zbliżony do kodu natywnego. Do głównych celów WebAssembly należy zapewnienie przenośności, przewidywalnego zachowania i identycznego wykonania kodu na różnych platformach.

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster