Mozilla, Fastly, Intel i Red Hat promouen WebAssembly com una plataforma d'ús universal

Mozilla, Fastly, Intel i Red Hat units els seus esforços per desenvolupar tecnologies que ajudin a fer de WebAssembly una plataforma universal per a l'execució segura de codi a qualsevol infraestructura, sistema operatiu o dispositiu. S'ha format una comunitat per al desenvolupament conjunt de temps d'execució i compiladors que permeten l'ús de WebAssembly no només en navegadors web Aliança de codis de bytes.

Per crear programes portàtils lliurats en format WebAssembly que es puguin executar fora del navegador, us suggerim utilitzar l'API Wasi (WebAssembly System Interface), que proporciona interfícies de programari per a la interacció directa amb el sistema operatiu (API POSIX per treballar amb fitxers, sòcols, etc.). Una característica distintiva del model d'execució d'aplicacions que utilitzen WASI és que s'executen en un entorn sandbox per aïllar-se del sistema principal i utilitzen un mecanisme de seguretat basat en la gestió de capacitats per a accions amb cadascun dels recursos (fitxers, directoris, sòcols, trucades al sistema). , etc.) l'aplicació ha de tenir els permisos adequats (només es proporciona l'accés a la funcionalitat declarada).

Un dels metes L'aliança creada és una solució al problema de distribuir aplicacions modulars modernes amb un gran nombre de dependències. En aquestes aplicacions, cada dependència pot ser una font potencial de vulnerabilitats o atacs. Prendre el control d'una dependència us permet obtenir el control de totes les aplicacions associades a ella. La confiança en l'aplicació implica automàticament confiança en totes les dependències, però sovint les dependències les desenvolupen i mantenen equips de tercers les activitats dels quals no es poden controlar. Els membres de Bytecode Alliance tenen la intenció de proporcionar una solució holística per a l'execució segura d'aplicacions WebAssembly que no són inherentment fiables.

Per a la protecció, es proposa utilitzar el concepte de nanoprocessos, en què cada mòdul de dependència està separat en un mòdul WebAssembly aïllat per separat, les potències del qual s'estableixen en relació només amb aquest mòdul (per exemple, una biblioteca per processar cadenes no poder obrir un sòcol o fitxer de xarxa). A diferència de la separació de processos, els controladors de WebAssembly són lleugers i gairebé no requereixen recursos addicionals: la interacció entre els controladors no és molt més lenta que cridar funcions ordinàries. La separació es pot fer no només a nivell de mòduls individuals, sinó també a nivell de grups de mòduls que, per exemple, necessiten treballar amb àrees de memòria comunes.

Els poders sol·licitats es poden determinar tant a nivell de les dependències en si, com delegar a dependències al llarg de la cadena per mòduls pare (els recursos en WASI s'associen amb un tipus especial de descriptor de fitxer - capacitat). Per exemple, es pot delegar a un mòdul la capacitat d'accedir a un directori específic i trucades al sistema, i si la infraestructura de desenvolupament del mòdul està compromesa o s'identifica una vulnerabilitat, durant un atac, l'accés es limitarà només a aquests recursos. Les declaracions de recursos dels creadors de mòduls poden ser un indicador d'activitat sospitosa, com ara quan un mòdul de processament de text demana permís per obrir una connexió de xarxa. Es comproven els permisos establerts inicialment i, si canvien, es rebutja la càrrega de dependències fins que s'actualitzi la signatura del mòdul local.

Per al desenvolupament conjunt sota l'ala de l'Aliança Bytecode traduït diverses relacionades amb WebAssembly projectes, desenvolupat prèviament per separat per les empreses fundadores de l'aliança:

  • Wasmtime — temps d'execució per executar aplicacions WebAssembly amb extensions WASI com a aplicacions autònomes habituals. Admet tant el llançament del bytecode de WebAssembly mitjançant una utilitat especial de línia d'ordres com l'enllaç de fitxers executables ja fets (wasmtime està integrat a l'aplicació com a biblioteca). Wasmtime té una estructura modular flexible que us permet escalar el temps d'execució per a diverses aplicacions, per exemple, podeu crear una versió reduïda per a dispositius amb recursos limitats;
  • Lucet — compilador i temps d'execució per executar programes en format WebAssembly. Distintiu característica Lucet és l'ús de la compilació anticipada completa (AOT, ahead-of-time) en lloc de JIT en codi màquina adequat per a l'execució directa. El projecte va ser desenvolupat per Fastly i està optimitzat per consumir un mínim de recursos i llançar noves instàncies molt ràpidament (Fastly utilitza Lucet en un motor de computació al núvol que utilitza WebAssembly per als gestors llançats a cada sol·licitud). Com a part del projecte conjunt, es preveu convertir el compilador Lucet per utilitzar Wasmtime com a base;
  • WAM (WebAssembly Micro Runtime) és un altre temps d'execució per executar WebAssembly, desenvolupat originalment per Intel per utilitzar-lo en dispositius d'Internet de les coses. WAMR està optimitzat per a un consum mínim de recursos i es pot utilitzar en dispositius amb una petita quantitat de memòria RAM. El projecte inclou un intèrpret i una màquina virtual per executar el bytecode de WebAssembly, una API (un subconjunt de Libc) i eines per a la gestió dinàmica d'aplicacions;
  • Grua elevadora — un generador de codi que tradueix una representació intermèdia independent de les arquitectures de maquinari en codi de màquina executable optimitzat per a plataformes de maquinari específiques. Cranelift admet la paral·lelització de la compilació de funcions per a una generació de resultats molt ràpida, cosa que permet utilitzar-lo per crear compiladors JIT (el JIT basat en Cranelift s'utilitza a la màquina virtual Wasmtime);
  • WASI comú — una implementació independent de l'API WASI (WebAssembly System Interface) per organitzar la interacció amb el sistema operatiu;
  • càrrega-wasi — un mòdul per al gestor de paquets Cargo que implementa una ordre per compilar codi Rust al bytecode de WebAssembly mitjançant la interfície WASI per utilitzar WebAssembly fora del navegador;
  • wat и wasmpaser — analitzadors per analitzar text (WAT, WAST) i representacions binàries del bytecode de WebAssembly.

Per resumir, WebAssembly s'assembla molt a Asm.js, però diferent ja que és un format binari que no està lligat a JavaScript i que permet executar codi intermedi de baix nivell compilat a partir de diversos llenguatges de programació al navegador. WebAssembly no requereix un col·lector d'escombraries perquè utilitza una gestió explícita de memòria. Mitjançant l'ús de JIT per a WebAssembly, podeu aconseguir nivells de rendiment propers al codi natiu. Entre els principals objectius de WebAssembly es troba garantir la portabilitat, el comportament previsible i l'execució de codi idèntica en diferents plataformes.

Font: opennet.ru

Afegeix comentari