Mozilla, Fastly, Intel en Red Hat promoten WebAssembly als platform voor universeel gebruik

Mozilla, Fastly, Intel en Red Hat verenigd zijn inspanningen bij het ontwikkelen van technologieën die ervoor zorgen dat WebAssembly een universeel platform wordt voor veilige code-uitvoering op elke infrastructuur, besturingssysteem of apparaat. Er is een community gevormd voor de gezamenlijke ontwikkeling van runtime en compilers die het gebruik van WebAssembly niet alleen in webbrowsers mogelijk maken Bytecode alliantie.

Om draagbare programma's te maken die in WebAssembly-formaat worden geleverd en die buiten de browser kunnen worden uitgevoerd, raden we aan de API te gebruiken WAS IK (WebAssembly System Interface), die software-interfaces biedt voor directe interactie met het besturingssysteem (POSIX API voor het werken met bestanden, sockets, enz.). Een onderscheidend kenmerk van het uitvoeringsmodel van applicaties die WASI gebruiken, is dat ze in een sandbox-omgeving draaien ter isolatie van het hoofdsysteem en een beveiligingsmechanisme gebruiken dat is gebaseerd op capaciteitsbeheer voor acties met elk van de bronnen (bestanden, mappen, sockets, systeemaanroepen , enz.) moet de applicatie de juiste machtigingen krijgen (er wordt alleen toegang tot de aangegeven functionaliteit geboden).

Een van de doelen De gecreëerde alliantie is een oplossing voor het probleem van de distributie van moderne modulaire applicaties met een groot aantal afhankelijkheden. In dergelijke toepassingen kan elke afhankelijkheid een potentiële bron van kwetsbaarheden of aanvallen zijn. Door de controle over een afhankelijkheid te nemen, kunt u controle krijgen over alle daaraan gekoppelde applicaties. Vertrouwen in de applicatie impliceert automatisch vertrouwen in alle afhankelijkheden, maar afhankelijkheden worden vaak ontwikkeld en onderhouden door teams van derden waarvan de activiteiten niet kunnen worden gecontroleerd. De leden van Bytecode Alliance zijn van plan een holistische oplossing te bieden voor de veilige uitvoering van WebAssembly-applicaties die niet inherent betrouwbaar zijn.

Ter bescherming wordt voorgesteld om het concept van nanoprocessen te gebruiken, waarbij elke afhankelijkheidsmodule wordt gescheiden in een afzonderlijk geïsoleerde WebAssembly-module, waarvan de bevoegdheden uitsluitend in relatie tot deze module worden ingesteld (een bibliotheek voor het verwerken van strings zal bijvoorbeeld niet een netwerksocket of bestand kunnen openen). In tegenstelling tot processcheiding zijn WebAssembly-handlers licht van gewicht en vereisen ze vrijwel geen extra bronnen - de interactie tussen handlers is niet veel langzamer dan het aanroepen van gewone functies. Scheiding kan niet alleen worden gedaan op het niveau van individuele modules, maar ook op het niveau van groepen modules die bijvoorbeeld met gemeenschappelijke geheugengebieden moeten werken

De gevraagde bevoegdheden kunnen zowel op het niveau van de afhankelijkheden zelf worden bepaald, als worden gedelegeerd aan afhankelijkheden langs de keten door bovenliggende modules (bronnen in WASI worden geassocieerd met een speciaal type bestandsdescriptor - mogelijkheid). Aan een module kan bijvoorbeeld de mogelijkheid worden gedelegeerd om toegang te krijgen tot een specifieke directory en systeemoproepen, en als de ontwikkelingsinfrastructuur van de module wordt aangetast of een kwetsbaarheid wordt geïdentificeerd, zal de toegang tijdens een aanval alleen tot deze bronnen worden beperkt. Brondeclaraties door modulemakers kunnen een indicator zijn van verdachte activiteit, bijvoorbeeld wanneer een tekstverwerkingsmodule toestemming vraagt ​​om een ​​netwerkverbinding te openen. De aanvankelijk ingestelde machtigingen worden gecontroleerd en als deze veranderen, wordt het laden van afhankelijkheid afgewezen totdat de handtekening van de lokale module is bijgewerkt.

Voor gezamenlijke ontwikkeling onder de vleugels van de Bytecode Alliance vertaald verschillende gerelateerd aan WebAssembly projecten, voorheen afzonderlijk ontwikkeld door de oprichters van de alliantie:

  • Wasmtijd — runtime voor het uitvoeren van WebAssembly-applicaties met WASI-extensies als gewone zelfstandige applicaties. Het ondersteunt zowel het starten van WebAssembly-bytecode met behulp van een speciaal opdrachtregelhulpprogramma als het koppelen van kant-en-klare uitvoerbare bestanden (wasmtime is als een bibliotheek in de applicatie ingebouwd). Wasmtime heeft een flexibele modulaire structuur waarmee u de runtime voor verschillende toepassingen kunt schalen. U kunt bijvoorbeeld een uitgeklede versie maken voor apparaten met beperkte middelen;
  • Lucet — compiler en runtime voor het uitvoeren van programma's in WebAssembly-formaat. Onderscheidend voorzien zijn van Lucet is het gebruik van volwaardige anticiperende compilatie (AOT, ahead-of-time) in plaats van JIT in machinecode die geschikt is voor directe uitvoering. Het project is ontwikkeld door Fastly en is geoptimaliseerd om minimale bronnen te verbruiken en nieuwe exemplaren zeer snel te lanceren (Fastly gebruikt Lucet in een cloud edge computing-engine die WebAssembly gebruikt voor handlers die bij elk verzoek worden gelanceerd). Als onderdeel van het gezamenlijke project is het de bedoeling dat de Lucet-compiler wordt geconverteerd om Wasmtime als basis te gebruiken;
  • WAMR (WebAssembly Micro Runtime) is een andere runtime voor het uitvoeren van WebAssembly, oorspronkelijk ontwikkeld door Intel voor gebruik in Internet of Things-apparaten. WAMR is geoptimaliseerd voor minimaal verbruik van bronnen en kan worden gebruikt op apparaten met een kleine hoeveelheid RAM. Het project omvat een tolk en virtuele machine voor het uitvoeren van WebAssembly-bytecode, een API (een subset van Libc) en tools voor dynamisch applicatiebeheer;
  • Kraanlift — een codegenerator die een tussenrepresentatie, onafhankelijk van hardware-architecturen, vertaalt in uitvoerbare machinecode die is geoptimaliseerd voor specifieke hardwareplatforms. Cranelift ondersteunt parallellisatie van functiecompilatie voor zeer snelle resultaatgeneratie, waardoor het kan worden gebruikt om JIT-compilers te maken (op Cranelift gebaseerde JIT wordt gebruikt in de virtuele Wasmtime-machine);
  • WASI gebruikelijk — een afzonderlijke implementatie van de WASI (WebAssembly System Interface) API voor het organiseren van interactie met het besturingssysteem;
  • vracht-wasi — een module voor de Cargo-pakketbeheerder die een opdracht implementeert voor het compileren van Rust-code in WebAssembly-bytecode met behulp van de WASI-interface voor gebruik van WebAssembly buiten de browser;
  • wat и wasparser — parsers voor het parseren van tekst (WAT, WAST) en binaire representaties van WebAssembly-bytecode.

Om samen te vatten: WebAssembly lijkt veel op Asm.js, maar verschillend in die zin dat het een binair formaat is dat niet gebonden is aan JavaScript en het mogelijk maakt om tussenliggende code op laag niveau, samengesteld uit verschillende programmeertalen, in de browser uit te voeren. WebAssembly vereist geen garbage collector omdat het expliciet geheugenbeheer gebruikt. Door JIT voor WebAssembly te gebruiken, kunt u prestatieniveaus bereiken die dicht bij de native code liggen. Een van de belangrijkste doelstellingen van WebAssembly is het garanderen van draagbaarheid, voorspelbaar gedrag en identieke code-uitvoering op verschillende platforms.

Bron: opennet.ru

Voeg een reactie