WASI un proyecto de Mozilla para usar WebAssembly fuera del navegador

Los desarrolladores de Mozilla presentaron el proyecto WASI (WebAssembly System Interface), que está trabajando en la definición de interfaces de software que se pueden usar para organizar la interacción de las aplicaciones entregadas en formato WebAssembly con el sistema operativo.

El objetivo del proyecto es proporcionar una API que extienda el uso de WebAssembly y le permita crear programas regulares basados ​​en esta tecnología que se ejecutan fuera del navegador, son portátiles a cualquier plataforma y demuestran un alto nivel de seguridad.

¿Que es WASI?

WASI permite que el entorno WebAssembly tenga acceso a las funciones proporcionadas por el sistema operativo, como archivos, sistema de archivos, sockets de red, temporizadores y generadores de números aleatorios.

La API de WASI se desarrolla inicialmente como no vinculada a los navegadores e independiente de la API de JavaScript / Web, pero al mismo tiempo proporciona un nivel adecuado de aislamiento del sistema principal (aplicaciones ejecutadas en una sandbox) y permite definir explícitamente la autoridad otorgada a la aplicación en el estilo de CloudABI y Capsicum .

WASI utiliza un modelo de seguridad basado en la gestión de permisos, dentro del cual un programa solo puede realizar acciones autorizadas deliberadamente.

De manera similar a como WebAssembly limita el acceso en el nivel de las funciones de importación, WASI controla el acceso a las capacidades del sistema.

Los archivos, directorios, sockets y otros recursos están asociados con un tipo especial de descriptores de archivos (capacidad) y la aplicación debe tener permisos para realizar una acción en cada uno de los recursos.

Los permisos se manejan jerárquicamente, es decir, el acceso al directorio se abre automáticamente y el acceso a todos los archivos que contiene.

Dado que WebAssembly es una versión del lenguaje de ensamblador independiente de la plataforma, el uso de JIT puede alcanzar un nivel de rendimiento cercano al código nativo, al tiempo que mantiene la capacidad de ejecutarse en varias plataformas de hardware y sistemas operativos.

Actualmente, el proyecto proporciona el módulo wasi-core con la implementación de la API POSIX básica (archivos, sockets, etc.), que actualmente carece de soporte para bloqueos y E / S asíncronas.

En el futuro, se planea crear módulos con una implementación de API para realizar operaciones criptográficas, trabajar con gráficos 3D, interactuar con sensores, operaciones con procesos (la llamada de fork no es compatible todavía) y procesar datos multimedia.

Prototipos de los componentes

Wasmtime es un runtime que se encarga de ejecutar aplicaciones basadas en WebAssembly con extensiones WASI como aplicaciones independientes ordinarias.

Se admite el lanzamiento del código de bytes de WebAssembly con la ayuda de una utilidad de línea de comandos especial y el diseño de archivos ejecutables listos para usar (wasmtime está incorporado en la aplicación como una biblioteca).

Para lograr el nivel adecuado de rendimiento, se utiliza un compilador JIT basado en el generador de código de elevación.

Lucet es otra versión de runtime del proyecto Fastly (el código está previsto para ser publicado hoy o mañana).

WASI SDK: herramientas para compilar aplicaciones C / C ++ en formato de montaje web utilizando Clang 8.0 .

Un objetivo de ensamblaje con soporte WASI para el lenguaje Rust, que le permite compilar el código Rust en un WebAssembly.

Wasi-sysroot es una implementación de la biblioteca libc estándar para WASI, basada en el código Musl , así como una capa de runtime para traducir las funciones proporcionadas por la biblioteca en llamadas de sistema de varios sistemas operativos para lograr la posibilidad de ejecutar una aplicación WASI en diferentes sistemas operativos.

El proyecto también está desarrollando la biblioteca de JavaScript de polyfill con una implementación WASI para ejecutar aplicaciones dentro del navegador, que permite aplicar el modelo de control de acceso de “capacidades” al código ejecutado en el navegador.

De los planes, se menciona la creación de un sistema de módulos basado en WASI para la integración en aplicaciones de complementos aislados con funcionalidad adicional provista en el formato WebAssembly.

Una de las principales tareas de WebAssembly es garantizar la portabilidad, la previsibilidad del comportamiento y la identidad de la ejecución del código en diferentes plataformas.


Sé el primero en comentar