AstroBox 中文文档 下载 App

WASI + wasmtime 运行时——为什么 AstroBox 选择 WebAssembly

什么是 WASI

WASI(WebAssembly System Interface)是一套为 WebAssembly 设计的标准化系统接口。你可以把它理解成 WebAssembly 的「POSIX」——它定义了 WebAssembly 模块如何和操作系统交互。

WASI 的版本演进:

版本特点
WASI Preview 1早期稳定版,支持基本的文件、网络、时钟
WASI Preview 2组件化架构,更细粒度的接口
WASI Preview 3当前最新,支持 HTTP、异步、组件模型

AstroBox Level 4 用的是 WASI Preview 3。

什么是 wasmtime

wasmtime 是 Bytecode Alliance 开发的 WebAssembly 运行时——它负责真正执行 .wasm 模块。

相比浏览器里的 WebAssembly,wasmtime:

AstroBox 里的两层运行时

AstroBox 插件系统有两层运行时共存:

旧版运行时(Level 1/2/3)

新版运行时(Level 4)

两套运行时独立,互不干扰。旧插件不受影响,新插件可以享受新特性。

为什么选 WebAssembly

AstroBox 团队没有选择传统的原生插件(动态库 DLL / .so)或脚本语言(Lua / Python 嵌入式),而是选择了 WebAssembly。原因:

跨平台

一份 .wasm 插件可以同时在 Windows、macOS(ARM 和 x86)、Linux、Android、iOS 上运行——不需要为每个平台分别编译。这对 AstroBox 的多平台产品定位至关重要。

安全沙箱

WebAssembly 默认无法访问文件系统、网络、系统 API——必须由宿主(AstroBox)通过 WASI 显式授权。恶意插件在沙箱里最多搞坏自己,无法逃逸到操作系统层面。

多语言支持

任何能编译成 WebAssembly 的语言都能写 AstroBox 插件:

性能

WebAssembly 性能接近原生,远好于嵌入脚本语言的解释执行。wasmtime 作为 AOT 编译运行时,启动速度快、执行效率高。

对用户意味着什么

你可能不会直接和 WASI / wasmtime 打交道,但这个技术选型影响到你:

对开发者意味着什么

如果你想写 AstroBox 插件:

  1. 选一门能编译成 WebAssembly 的语言(推荐 Rust,Level 4 可以选 Python / JS)
  2. 学习 AstroBox 的 Host API(abox.run 上有完整文档)
  3. 用 wasmtime 测试
  4. 打包成 .abp 文件发布

入门路径在插件开发文档站和本 Wiki 的 开发者入门 页面。