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

Mozilla, Fastly, Intel e Red Hat unidos os seus esforzos no desenvolvemento de tecnoloxías que axuden a facer de WebAssembly unha plataforma universal para a execución segura de código en calquera infraestrutura, sistema operativo ou dispositivo. Formouse unha comunidade para o desenvolvemento conxunto de tempo de execución e compiladores que permiten o uso de WebAssembly non só nos navegadores web Bytecode Alliance.

Para crear programas portátiles entregados en formato WebAssembly que se poidan executar fóra do navegador, suxerímoslle utilizar a API WASI (WebAssembly System Interface), que proporciona interfaces de software 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 das aplicacións que utilizan WASI é que se executan nun ambiente sandbox para illarse do sistema principal e empregan un mecanismo de seguridade baseado na xestión de capacidades para accións con cada un dos recursos (arquivos, directorios, sockets, chamadas ao sistema). , etc.) a aplicación debe ter os permisos adecuados (só se proporciona acceso á funcionalidade declarada).

Un de obxectivos A alianza creada é unha solución ao problema de distribuír aplicacións modulares modernas cunha gran cantidade de dependencias. Nestas aplicacións, cada dependencia pode ser unha fonte potencial de vulnerabilidades ou ataques. Asumir o control dunha dependencia permítelle obter o control de todas as aplicacións asociadas a ela. A confianza na aplicación implica automaticamente confianza en todas as dependencias, pero as dependencias adoitan ser desenvolvidas e mantidas por equipos de terceiros cuxas actividades non se poden controlar. Os membros de Bytecode Alliance pretenden ofrecer unha solución holística para a execución segura de aplicacións WebAssembly que non son inherentemente fiables.

Para protección, proponse utilizar o concepto de nanoprocesos, no que cada módulo de dependencia está separado nun módulo WebAssembly illado por separado, cuxas potencias se establecen en relación só con este módulo (por exemplo, unha biblioteca para procesar cadeas non poder abrir un socket ou ficheiro de rede). A diferenza da separación de procesos, os controladores de WebAssembly son lixeiros e case non requiren recursos adicionais; a interacción entre os controladores non é moito máis lenta que a chamada de funcións comúns. A separación pódese facer non só a nivel de módulos individuais, senón tamén a nivel de grupos de módulos que, por exemplo, precisan traballar con áreas de memoria comúns.

Os poderes solicitados pódense determinar tanto a nivel das propias dependencias, como delegados en dependencias ao longo da cadea por módulos principais (os recursos en WASI están asociados a un tipo especial de descritor de ficheiros - capacidade). Por exemplo, pódese delegar a un módulo a capacidade de acceder a un directorio específico e chamadas ao sistema e, se a infraestrutura de desenvolvemento do módulo está comprometida ou se identifica unha vulnerabilidade, durante un ataque, o acceso limitarase só a estes recursos. As declaracións de recursos dos creadores de módulos poden ser un indicador de actividade sospeitosa, como cando un módulo de procesamento de texto solicita permiso para abrir unha conexión de rede. Compróbanse os permisos establecidos inicialmente e, se cambian, rexéitase a carga de dependencia ata que se actualice a sinatura do módulo local.

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

  • Tempo de tempo de pasaxe — tempo de execución para executar aplicacións WebAssembly con extensións WASI como aplicacións autónomas habituais. Soporta tanto o lanzamento de bytecode de WebAssembly mediante unha utilidade especial de liña de comandos como a ligazón de ficheiros executables preparados (wasmtime está integrado na aplicación como biblioteca). Wasmtime ten unha estrutura modular flexible que che permite escalar o tempo de execución para varias aplicacións, por exemplo, podes crear unha versión reducida para dispositivos con recursos limitados;
  • Lucet — compilador e tempo de execución para executar programas en formato WebAssembly. Distintivo característica Lucet é o uso de compilación anticipada completa (AOT, ahead-of-time) en lugar de JIT en código máquina axeitado para a execución directa. O proxecto foi desenvolvido por Fastly e está optimizado para consumir recursos mínimos e lanzar novas instancias moi rapidamente (Fastly usa Lucet nun motor de computación de borde na nube que usa WebAssembly para os controladores lanzados en cada solicitude). Como parte do proxecto conxunto, está previsto converter o compilador Lucet para utilizar Wasmtime como base;
  • WAMR (WebAssembly Micro Runtime) é outro tempo de execución para executar WebAssembly, desenvolvido orixinalmente por Intel para o seu uso en dispositivos de Internet das cousas. WAMR está optimizado para un consumo mínimo de recursos e pódese usar en dispositivos cunha pequena cantidade de RAM. O proxecto inclúe un intérprete e unha máquina virtual para executar o bytecode 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 das arquitecturas de hardware en código de máquina executable optimizado para plataformas de hardware específicas. Cranelift admite a paralelización da compilación de funcións para unha xeración de resultados moi rápida, o que permite que se use para crear compiladores JIT (utilízase JIT baseado en Cranelift na máquina virtual Wasmtime);
  • 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 no bytecode de WebAssembly usando a interface WASI para usar WebAssembly fóra do navegador;
  • wat и wasmparser — analizadores para analizar texto (WAT, WAST) e representacións binarias do código de bytes de WebAssembly.

Para recapitular, WebAssembly é moi parecido a Asm.js, pero diferente en que se trata dun formato binario que non está vinculado a JavaScript e que permite executar no navegador código intermedio de baixo nivel compilado a partir de varias linguaxes de programación. WebAssembly non require un colector de lixo porque utiliza unha xestión explícita de memoria. Usando JIT para WebAssembly, pode alcanzar niveis de rendemento próximos ao código nativo. Entre os principais obxectivos de WebAssembly está garantir a portabilidade, o comportamento previsible e a execución de código idéntico en diferentes plataformas.

Fonte: opennet.ru

Engadir un comentario