WASI 0.2.0 y por qué importa

La nueva versión WASI Preview 2 de WebAssembly se ve como un paso importante para convertir a Wasm en un runtime práctico y portátil más allá del navegador, gracias a su interfaz de sistema basada en capacidades y al modelo de componentes emergente/Canonical ABI para la interoperabilidad poliglota. Los comentaristas debaten si este enfoque es un “segundo sistema” sobredimensionado o una base necesaria para cargas de trabajo seguras de estilo serverless y sistemas de plugins, comparándolo con esfuerzos anteriores como JVM/CLR, los applets de Java y NaCl. Hay entusiasmo por usos reales (de Figma a extensiones de VS Code) y por el potencial futuro (APIs de GUI, async y GC en Preview 3), junto con frustración por piezas que faltan como gráficos estandarizados, hilos y herramientas fluidas para lenguajes como C.

APIs de gráficos y GUI

  • Varios comentaristas quieren una API estándar de GUI estilo framebuffer para WASI, de modo que las aplicaciones WASM puedan dibujar en una pantalla fuera de los navegadores.
  • Otros sostienen que los framebuffers están obsoletos y que las APIs de más alto nivel como WebGPU son mejores; contraargumento: WebGPU aún no es ubicuo y WASM se ejecuta más allá de los navegadores.
  • Contribuidores involucrados con WASI dicen que los gráficos no han sido bloqueados por los proveedores; simplemente no han tenido el foco de los contribuidores, que ha estado sobre todo en piezas sin servidor y fundamentales.
  • Hay interés en futuras propuestas de GUI/dispositivos de E/S, pero todavía no existe un estándar concreto.

Modelo de componentes, Preview 2 y compatibilidad

  • WASI Preview 2 se basa en el WebAssembly Component Model, separando el “WASM central” de las APIs de nivel superior.
  • Los módulos WASI existentes no son directamente compatibles; se necesitan adaptadores, lo que algunos ven como algo desordenado y un “efecto de segundo sistema”.
  • Otros argumentan que el modelo de componentes trata de una interoperabilidad limpia y una ABI canónica (sin exportaciones de memoria compartida, recursos basados en handles) que permite cooperar a distintos lenguajes y modelos de memoria.
  • El modelo de componentes puede usarse sin WASI y está en una ruta de estandarización, aunque todavía no esté completamente formalizado.

Qué problema resuelve WASI

  • Varias explicaciones: el WASM central por sí solo no puede hacer E/S; WASI define un sistema de interfaz basado en capacidades (archivos, redes, etc.), especialmente para runtimes no basados en el navegador.
  • Se compara con “POSIX para WASM”, aunque algunos señalan que WASIX apunta más directamente a la semántica de POSIX.
  • La seguridad basada en capacidades (permisos mínimos y explícitos) se destaca como un objetivo de diseño clave.

Casos de uso vs. escepticismo

  • Los escépticos dicen que, después de ~10 años de trabajo relacionado con WASM, ven sobre todo demos, herramientas complejas y un valor económico poco claro, especialmente en comparación con compilaciones nativas.
  • Otros citan usos prácticos: aplicaciones de navegador (herramientas de diseño, juegos, vídeo, emulación de Flash), sistemas embebidos, plugins poliglota, extensiones de VS Code y scripting de mods de juegos.
  • El WASM del lado del servidor se ve como prometedor pero todavía inmaduro; el rendimiento y el soporte de los proveedores de nube siguen siendo preguntas abiertas.

Comparaciones con JVM/CLR y applets

  • Algunos ven WASI como una repetición de ideas de CLR, JVM y esfuerzos anteriores de bytecode; el debate gira en torno a si “repetir” algo es malo si esta versión logra adopción real y es más abierta.
  • Applets vs WASM: los comentaristas enfatizan la superficie expuesta más pequeña de WASM, mejor tiempo de arranque, enfoque multilenguaje y el respaldo de una coalición de proveedores.

Políglota, FFI y funciones futuras

  • Hay un fuerte interés en una FFI poliglota más fácil; Preview 2, junto con el modelo de componentes y la ABI canónica, se ven como bases para ello.
  • Están surgiendo herramientas y marcos (por ejemplo, sistemas de plugins), pero siguen siendo limitados en tipos de datos y ergonomía.
  • Se espera que añadidos futuros como GC y async (Preview 3) hagan de WASM un mejor runtime para lenguajes como JavaScript y Dart, y mejoren la integración con motores de JS compilados a WASM.