Mozilla, Fastly, Intel a Red Hat propagují WebAssembly jako platformu pro univerzální použití

Mozilla, Fastly, Intel a Red Hat sjednocený jeho úsilí ve vývoji technologií, které pomáhají vytvořit z WebAssembly univerzální platformu pro bezpečné spouštění kódu v jakékoli infrastruktuře, operačním systému nebo zařízení. Vznikla komunita pro společný vývoj runtime a kompilátorů, které umožňují použití WebAssembly nejen ve webových prohlížečích Bytecode Alliance.

Chcete-li vytvořit přenosné programy dodávané ve formátu WebAssembly, které lze spouštět mimo prohlížeč, doporučujeme použít rozhraní API BYL JSEM (WebAssembly System Interface), který poskytuje softwarová rozhraní pro přímou interakci s operačním systémem (POSIX API pro práci se soubory, sokety atd.). Charakteristickým rysem prováděcího modelu aplikací využívajících WASI je to, že běží v prostředí sandbox pro izolaci od hlavního systému a používají bezpečnostní mechanismus založený na správě schopností pro akce s každým ze zdrojů (soubory, adresáře, sokety, systémová volání). , atd.) musí mít aplikace příslušná oprávnění (poskytován je pouze přístup k deklarované funkcionalitě).

Jeden z cíle Vytvořená aliance je řešením problému distribuce moderních modulárních aplikací s velkým množstvím závislostí. V takových aplikacích může být každá závislost potenciálním zdrojem zranitelnosti nebo útoků. Převzetí kontroly nad závislostí vám umožní získat kontrolu nad všemi aplikacemi, které jsou s ní spojené. Důvěra v aplikaci automaticky znamená důvěru ve všechny závislosti, ale závislosti často vyvíjejí a udržují týmy třetích stran, jejichž aktivity nelze kontrolovat. Členové Bytecode Alliance mají v úmyslu poskytnout holistické řešení pro bezpečné spouštění aplikací WebAssembly, které nejsou ze své podstaty důvěryhodné.

Pro ochranu se navrhuje využít koncept nanoprocesů, kdy je každý závislostní modul oddělen do samostatně izolovaného modulu WebAssembly, jehož výkony jsou nastaveny ve vztahu pouze k tomuto modulu (např. knihovna pro zpracování řetězců nebude být schopen otevřít síťový soket nebo soubor). Na rozdíl od oddělení procesů jsou obslužné rutiny WebAssembly lehké a nevyžadují téměř žádné další zdroje – interakce mezi obslužnými rutinami není o mnoho pomalejší než volání běžných funkcí. Separaci lze provést nejen na úrovni jednotlivých modulů, ale také na úrovni skupin modulů, které například potřebují pracovat se společnými paměťovými oblastmi

Požadované pravomoci lze určit jak na úrovni samotných závislostí, tak je delegovat na závislosti v řetězci nadřazenými moduly (zdroje ve WASI jsou spojeny se speciálním typem deskriptoru souboru - schopností). Modulu lze například delegovat možnost přístupu k určitému adresáři a systémovým voláním, a pokud je narušena vývojová infrastruktura modulu nebo je identifikována zranitelnost, během útoku bude přístup omezen pouze na tyto zdroje. Deklarace zdrojů od tvůrců modulů mohou být indikátorem podezřelé aktivity, například když modul zpracování textu požaduje povolení k otevření síťového připojení. Zkontrolují se původně nastavená oprávnění, a pokud se změní, načítání závislosti je odmítnuto, dokud nebude aktualizován podpis lokálního modulu.

Pro společný vývoj pod křídly Bytecode Alliance přeloženo několik souvisejících s WebAssembly projektů, dříve samostatně vyvinuté zakládajícími společnostmi aliance:

  • byl čas — runtime pro spouštění aplikací WebAssembly s rozšířeními WASI jako běžné samostatné aplikace. Podporuje jak spouštění bajtkódu WebAssembly pomocí speciálního nástroje příkazového řádku, tak propojení hotových spustitelných souborů (wasmtime je zabudován do aplikace jako knihovna). Wasmtime má flexibilní modulární strukturu, která vám umožňuje škálovat runtime pro různé aplikace, například můžete vytvořit omezenou verzi pro zařízení s omezenými zdroji;
  • Lucet — kompilátor a runtime pro spouštění programů ve formátu WebAssembly. Rozlišovací Vlastnosti Lucet je použití plnohodnotné anticipativní kompilace (AOT, předčasně) namísto JIT do strojového kódu vhodného pro přímé provádění. Projekt byl vyvinut společností Fastly a je optimalizován tak, aby spotřebovával minimální zdroje a velmi rychle spouštěl nové instance (Fastly používá Lucet v cloudovém výpočetním enginu, který používá WebAssembly pro handlery spouštěné při každém požadavku). V rámci společného projektu se plánuje převedení kompilátoru Lucet tak, aby jako základ používal Wasmtime;
  • rozšíření WAM (WebAssembly Micro Runtime) je další runtime pro spouštění WebAssembly, původně vyvinuté společností Intel pro použití v zařízeních internetu věcí. WAMR je optimalizováno pro minimální spotřebu zdrojů a lze jej použít na zařízeních s malým množstvím paměti RAM. Projekt zahrnuje interpret a virtuální stroj pro spouštění bajtkódu WebAssembly, API (podmnožinu Libc) a nástroje pro dynamickou správu aplikací;
  • Jeřábový výtah — generátor kódu, který převádí přechodnou reprezentaci nezávislou na hardwarových architekturách do spustitelného strojového kódu optimalizovaného pro konkrétní hardwarové platformy. Cranelift podporuje paralelizaci kompilace funkcí pro velmi rychlé generování výsledků, což umožňuje jeho použití k vytváření JIT kompilátorů (JIT založený na Cranelift se používá ve virtuálním stroji Wasmtime);
  • WASI běžné — samostatná implementace rozhraní API WASI (WebAssembly System Interface) pro organizaci interakce s operačním systémem;
  • cargo-wasi — modul pro správce balíčků Cargo, který implementuje příkaz pro kompilaci kódu Rust do bajtkódu WebAssembly pomocí rozhraní WASI pro použití WebAssembly mimo prohlížeč;
  • wat и wasmparser — analyzátory pro analýzu textu (WAT, WAST) a binární reprezentace bajtkódu WebAssembly.

Abychom to shrnuli, WebAssembly je hodně podobný Asm.js, ale jiné v tom, že jde o binární formát, který není vázán na JavaScript a umožňuje spuštění nízkoúrovňového mezikódu zkompilovaného z různých programovacích jazyků v prohlížeči. WebAssembly nevyžaduje garbage collector, protože používá explicitní správu paměti. Pomocí JIT pro WebAssembly můžete dosáhnout úrovně výkonu blízké nativnímu kódu. Mezi hlavní cíle WebAssembly patří zajištění přenositelnosti, předvídatelného chování a identického provádění kódu na různých platformách.

Zdroj: opennet.ru

Přidat komentář