Sobre el proyecto

Wago es un runtime de WebAssembly escrito enteramente en Go. En lugar de interpretar Wasm, compila los módulos directamente a código de máquina nativo, por lo que puede integrarse en programas de Go sin CGO, manteniendo las compilaciones ordinarias de Go y la compilación cruzada de manera sencilla. El proyecto se presenta como rápido, compacto y extensible, y declara que aún se encuentra en fase beta, lo que significa que las API y los artefactos .wago generados pueden cambiar. Características que destaca el proyecto: - Pure Go: la integración no requiere una cadena de herramientas de C. - Enfocado en estándares: se afirma que el runtime supera la suite de pruebas oficial de WebAssembly, además de fuzzing y corpora del mundo real. - Extensible: WASI, el Component Model y otras capacidades del host residen fuera del runtime central como plugins. - Ejecutables independientes: un archivo .wasm puede compilarse en un binario nativo pequeño, lo cual, según el README, es útil para herramientas de CLI. - Plataformas: Linux, macOS y Windows en amd64 y arm64, con una cobertura de funciones de WebAssembly que varía según el backend. Un archivo de matriz de funciones documenta la cobertura exacta. Instalación En macOS y Linux, la instrucción de una sola línea documentada descarga un script de instalación y lo envía a sh; en Windows, los usuarios de PowerShell ejecutan un comando irm equivalente. Estos instalan un gestor, que luego instala un runtime. El sitio de documentación cubre métodos de instalación alternativos, canales de lanzamiento y compilaciones desde el código fuente. Ejecución de módulos Tras la instalación, un módulo puede ejecutarse directamente: ejecutar un pequeño archivo Wasm de Fibonacci con un argumento imprime el resultado esperado. Para crear un binario independiente, el subcomando compile toma una entrada .wasm y una ruta de salida, y el ejecutable resultante acepta los mismos argumentos. Uso de Wago desde Go Los desarrolladores de Go añaden el módulo con go get github.com/wago-org/wago. El repositorio incluye ejemplos numerados, incluido un ejemplo de runtime tipado que compila un módulo, crea una instancia y llama a una función exportada. Una guía de documentación separada cubre la integración de Wago en Go. Capacidades del host y plugins Las integraciones del host se mantienen deliberadamente fuera del runtime central. Un proyecto puede inicializarse con el comando init, y los plugins, como una implementación de WASI, se añaden por nombre, por ejemplo wago-org/wasi. Se proporciona un sitio de registro de plugins para explorar lo que está disponible. Rendimiento El README indica que Wago utiliza unos pocos kilobytes de RAM y afirma que los tiempos de compilación son aproximadamente tres veces más rápidos y la ejecución alrededor de un 40 por ciento más rápida que wazero. El proyecto enlaza a una página de benchmarks y a un directorio de benchmarks en el repositorio. Estas cifras son mediciones propias de los mantenedores y deben verificarse con sus propias cargas de trabajo antes de confiar en ellas. Estado del proyecto y licencias Wago se publica bajo la Licencia Apache 2.0 y se desarrolla de forma gratuita, fomentando el patrocinio. El repositorio incluye documentación, ejemplos, una matriz de funciones, un documento de arquitectura, una hoja de ruta, pautas de contribución y un rastreador de problemas. En general, Wago se dirige a desarrolladores de Go que desean ejecutar o integrar WebAssembly sin una dependencia de C, y que prefieren un núcleo de runtime pequeño cuyas funciones de host se añadan mediante plugins. Su estado beta y el hecho de que las cifras de benchmark provengan del propio proyecto son los puntos principales a sopesar antes de adoptarlo.