Mozilla, Fastly, Intel e Red Hat promoven WebAssembly como plataforma de uso universal

Mozilla, Fastly, Intel e Red Hat unidos Comprometémonos a desenvolver tecnoloxías que axuden a transformar WebAssembly nunha plataforma universal para a execución segura de código en todas as infraestruturas, sistemas operativos e dispositivos. Formouse unha comunidade para desenvolver conxuntamente tempos de execución e compiladores que permitan que WebAssembly se use en máis que só navegadores web. Bytecode Alliance.

Para crear programas portátiles entregados en formato WebAssembly que se poidan executar fóra do navegador, proponse usar a API WASI (WebAssembly System Interface), que proporciona interfaces de programación para a interacción directa co sistema operativo (API POSIX para traballar con ficheiros, sockets, etc.). Unha característica distintiva do modelo de execución WASI é que as aplicacións se executan nun ambiente de sandbox para illalas do sistema principal e usan un mecanismo de seguridade baseado na xestión de capacidades: para acceder a cada recurso (ficheiros, directorios, sockets, chamadas ao sistema, etc.), débense conceder á aplicación os permisos axeitados (só se concede acceso á funcionalidade declarada).

Un de obxectivos O obxectivo da alianza é abordar o problema da distribución de aplicacións modulares modernas con numerosas dependencias. Nesas aplicacións, cada dependencia pode ser unha fonte potencial de vulnerabilidades ou ataques. Obter o control dunha dependencia permite o control de todas as aplicacións vinculadas a ela. Confiar nunha aplicación implica automaticamente a confianza en todas as súas dependencias, pero estas dependencias adoitan ser desenvolvidas e mantidas por equipos de terceiros cuxas actividades son imposibles de controlar. Os membros de Bytecode Alliance pretenden desenvolver unha solución integral para a execución segura de aplicacións WebAssembly, que son inherentemente non fiables.

Para protexernos contra isto, propoñemos usar o concepto de nanoprocesos, nos que cada módulo de dependencia se separa nun módulo WebAssembly separado e illado, cuxos permisos se definen só para ese módulo (por exemplo, unha biblioteca de procesamento de cadeas non pode abrir un socket ou ficheiro de rede). A diferenza da separación de procesos, os xestores WebAssembly son lixeiros e case non requiren recursos adicionais: a interacción entre os xestores non é significativamente máis lenta que a chamada a funcións normais. A separación pódese implementar non só no nivel de módulos individuais, senón tamén no nivel de grupos de módulos que, por exemplo, necesitan traballar con áreas de memoria compartida.

Os permisos solicitados pódense definir tanto a nivel de dependencia como delegados ás dependencias augas arriba polos módulos principais (os recursos en WASI están asociados a un tipo especial de descritor de ficheiro, unha capacidade). Por exemplo, pódese delegar a un módulo a capacidade de acceder a un directorio específico e realizar chamadas ao sistema. Se a infraestrutura de desenvolvemento do módulo se ve comprometida ou se descobre unha vulnerabilidade, o acceso limitarase a estes recursos durante un ataque. As declaracións de recursos por parte dos creadores de módulos poden ser un indicador de actividade sospeitosa, por exemplo, cando un módulo de procesamento de texto solicita permiso para abrir unha conexión de rede. Os permisos asignados inicialmente compróbanse e, se cambian, a dependencia rexéitase ata que se actualiza a sinatura local do módulo.

Para o desenvolvemento conxunto baixo a á da Bytecode Alliance traducido varios relacionados con WebAssembly proxectos, desenvolvido previamente por separado polas empresas fundadoras da alianza:

  • Wasmtime — un tempo de execución para executar aplicacións WebAssembly con extensións WASI como aplicacións independentes normais. Admítese tanto a execución de bytecode WebAssembly mediante unha utilidade de liña de comandos dedicada como a creación de ficheiros executábeis predefinidos (wasmtime está integrado na aplicación como unha biblioteca). Wasmtime ten unha estrutura modular e flexible que permite escalar o tempo de execución para varias aplicacións; por exemplo, pódese crear unha versión simplificada para dispositivos con recursos limitados.
  • Lucet — un compilador e un tempo de execución para executar programas no formato WebAssembly. Distinctive característica Lucet é unha implementación baseada en JIT de compilación anticipada (AOT) completa en código máquina nativo axeitada para a execución directa. O proxecto foi desenvolvido por Fastly e está optimizado para un consumo mínimo de recursos e un inicio extremadamente rápido de novas instancias (Fastly usa Lucet no seu motor de computación na nube, que usa WebAssembly para xestores por solicitude). Como parte do proxecto colaborativo, está previsto migrar o compilador Lucet para usar Wasmtime como base;
  • WAMR (WebAssembly Micro Runtime) é outro tempo de execución para WebAssembly, desenvolvido orixinalmente por Intel para o seu uso en dispositivos IoT. WAMR está optimizado para un consumo mínimo de recursos e pódese usar en dispositivos con RAM limitada. O proxecto inclúe un intérprete e unha máquina virtual para executar o código de bytes de WebAssembly, unha API (un subconxunto de Libc) e ferramentas para a xestión dinámica de aplicacións.
  • Elevador de guindastres — un xerador de código que traduce unha representación intermedia independente do hardware en código máquina executable optimizado para plataformas de hardware específicas. Cranelift admite a compilación de funcións paralelas para unha xeración de resultados extremadamente rápida, o que o fai axeitado para crear compiladores xusto a tempo (JIT) (na máquina virtual Wasmtime úsase un JIT baseado en Cranelift);
  • WASI común — unha implementación separada da API WASI (WebAssembly System Interface) para organizar a interacción co sistema operativo;
  • carga-wasi — un módulo para o xestor de paquetes Cargo que implementa un comando para compilar código Rust en bytecode WebAssembly usando a interface WASI para usar WebAssembly fóra do navegador;
  • wat и wasmparser — analizadores sintácticos para a análise sintáctica de texto (WAT, WAST) e representacións binarias do bytecode de WebAssembly.

Como recordatorio, WebAssembly é moi semellante a Asm.js, pero diferente WebAssembly é un formato binario independente de JavaScript, que permite executar código intermedio de baixo nivel compilado a partir de varias linguaxes de programación no navegador. WebAssembly elimina a necesidade de recollida de lixo, xa que usa unha xestión de memoria explícita. Ao aproveitar o motor Just-in-Time (JIT), WebAssembly pode alcanzar niveis de rendemento próximos ao código nativo. Entre os principais obxectivos de WebAssembly están a portabilidade, o comportamento predicible e a execución de código consistente en diferentes plataformas.

Fonte: opennet.ru

Compre hospedaxe fiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra aloxamento web fiable con protección DDoS, servidores VPS VDS | ProHoster