wazero/wazero

GitHub: wazero/wazero

wazero是Go开发者的零依赖WebAssembly运行时。

Stars: 6206 | Forks: 334

# wazero:Go 开发者的零依赖 WebAssembly 运行时 [![Go 参考](https://pkg.go.dev/badge/github.com/tetratelabs/wazero.svg)](https://pkg.go.dev/github.com/tetratelabs/wazero) [![许可证](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) WebAssembly 是一种在安全环境中运行其他语言编译代码的方式。运行时 执行 WebAssembly 模块(Wasm),这些模块通常是具有 `.wasm` 扩展名的二进制文件。 wazero 是一个用 Go 编写的符合 WebAssembly 核心规范 [1.0][1] 和 [2.0][2] 的运行时。它具有 *零依赖性*,不依赖于 CGO。 这意味着您可以在其他语言中运行应用程序,同时仍然保持交叉 编译。 导入 wazero 并使用任何语言编写的代码扩展您的 Go 应用程序! ## 示例 学习 wazero 的最佳方式是尝试我们的 [示例](examples/README.md)。最 [基本示例](examples/basic) 通过在 WebAssembly 中定义的附加函数扩展了 Go 应用程序。 ## 运行时 wazero 支持两种运行时配置:_编译器_ 是默认配置: 默认情况下,通过 `wazero.NewRuntime(ctx)`,如果支持,将使用编译器。您也可以强制使用解释器,如下所示: ``` r := wazero.NewRuntimeWithConfig(ctx, wazero.NewRuntimeConfigInterpreter()) ``` ### 解释器 解释器是基于解释器实现的 Wasm 虚拟机的简单实现。它的实现没有平台(GOARCH、GOOS)特定的代码,因此 _解释器_ 可以用于 Go 可用的任何编译目标(例如 `riscv64`)。 ### 编译器 编译器在 `Runtime.CompileModule` 期间预先将 WebAssembly 模块编译成机器代码(AOT)。这意味着您的 WebAssembly 函数在运行时以原生方式执行。编译器比解释器快得多,通常快一个数量级(10x)或更多。这是在不使用主机特定依赖项的情况下完成的。 ### 符合性 两个运行时都在支持的平台上的 WebAssembly 核心 [1.0][3] 和 [2.0][4] 规范测试中通过: | 运行时 | 使用 | amd64 | arm64 | others | |:-----------:|:--------------------------------------:|:-----:|:-----:|:------:| | 解释器 | `wazero.NewRuntimeConfigInterpreter()` | ✅ | ✅ | ✅ | | 编译器 | `wazero.NewRuntimeConfigCompiler()` | ✅ | ✅ | ❌ | ## 支持策略 以下支持策略侧重于将 wazero 嵌入其 Go 应用程序的用户兼容性问题。 ### wazero wazero 的 [1.0 版本][8] 于 2023 年 3 月发布,并被许多项目和生产站点使用。 我们通过语义版本化提供 API 稳定性保证。换句话说,我们承诺不会在不增加主版本的情况下破坏任何导出函数签名。这并不意味着没有创新:新功能和行为以次要版本增量发生,例如 1.0.11 到 1.2.0。我们还会通过补丁版本修复错误或更改内部细节,例如 1.0.0 到 1.0.1。 您可以通过以下方式获取 wazero 的最新版本。 ``` go get github.com/tetratelabs/wazero@latest ``` 如果您最终使用 wazero,请给我们一个 [star][10]! ### Go wazero 除了 Go 和 `x/sys`[12] 没有其他依赖项,因此您项目中 wazero 的使用冲突的唯一来源是 Go 版本。 wazero 遵循与 Go 的 [发布策略][5] 相同的版本策略:两个版本。wazero 将确保这些版本正常工作,并且如果有当前 Go 版本的问题,则问题有效。 ### 平台 wazero 有两种运行时模式:解释器和编译器。唯一支持的操作系统是我们测试的操作系统,但这并不意味着其他操作系统版本不会工作。 我们目前测试 Linux(Ubuntu 和 scratch)、MacOS 和 Windows(由 [GitHub Actions][6] 打包),以及运行在 Linux 上的嵌套 VM,用于 FreeBSD、NetBSD、OpenBSD、DragonFly BSD、illumos 和 Solaris。 我们还测试了许多 `GOOS` 和 `GOARCH` 组合的交叉编译。 * 解释器 * Linux 在 amd64、arm64 和 riscv64 上进行了测试。 * Windows、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、illumos 和 Solaris 仅在 amd64 上进行了测试。 * MacOS 仅在 arm64 上进行了测试。 * 编译器 * Linux 在 amd64 和 arm64 上进行了测试。 * Windows、FreeBSD、NetBSD、DragonFly BSD、illumos 和 Solaris 仅在 amd64 上进行了测试。 * MacOS 仅在 arm64 上进行了测试。 wazero 没有依赖项,也不需要 CGO。这意味着它也可以嵌入到不使用操作系统的应用程序中。这是 wazero 与替代方案的主要区别。 我们通过在 Docker 的 [scratch 图像][7] 中运行测试来验证零依赖性。 这种方法确保了与任何父图像的兼容性。 ### macOS 代码签名权限 如果您正在为 MacOS 开发并且需要为您的应用程序进行代码签名,请阅读问题 [#2393][11]。 wazero 是 Tetrate.io,Inc. 在美国和其他国家/地区的注册商标。
标签:AI工具, Apache许可证, EVTX分析, Go语言, SOC Prime, WebAssembly, 动态执行, 安全执行, 开发工具, 开源, 性能优化, 技术栈, 文档, 日志审计, 检测绕过, 模块化, 生成式AI安全, 示例代码, 社区资源, 程序破解, 编译器, 编译时优化, 虚拟机, 解释器, 跨语言开发, 运行时, 零依赖