Wanix — 基于Wasm的Unix沙箱工具,适用于Web
摘要
Wanix是一款Wasm原生的Unix沙箱工具,让你在浏览器中完全使用Web组件运行并与真实的Wasm和x86程序交互,灵感来自Plan 9。
<p><a href="https://lobste.rs/s/urhpbn/wanix_wasm_native_unix_sandboxing_for_web">评论</a></p>
查看缓存全文
缓存时间: 2026/07/24 04:59
# Wanix — 面向Web的Wasm原生Unix沙盒
来源:https://wanix.dev/
新版Wanix 0.4 — wanix元素 (https://github.com/tractordev/wanix/releases)
在浏览器中完全沙盒化地运行和交互真实的Wasm与x86程序。无需服务器。灵感来自[Plan 9](https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs)。
```
rc% ls
rc.wasm
rc%
```
三个标签加上我们受Plan 9启发的shell rc,就能得到一个微小的、嵌入式、Wasm原生的类Unix环境。
wanix recipes
## 使用Wanix Elements的基本起点
分配一个新的`#ramfs`到命名空间根目录,绑定rc shell和一个内联文件,然后使用终端运行shell任务。尝试运行:
- `ls`
- `cat shell.txt`
wanix elements
## 仅需几个标签即可为Web引导一个Unix
### 核心 — 构建块正交原语
`<wanix-task>`:在命名空间中运行可执行文件
[文档](https://github.com/tractordev/wanix#wanix-task)
将Wasm二进制绑定到命名空间,然后启动它。`cmd`是命令行;`start`在系统就绪后立即无头运行。
内联一个JS文件并将其作为任务运行。Wanix支持可插拔执行的任务驱动,内置JS和Wasm驱动。
`<wanix-term>`:任务的xterm.js终端或VM
[文档](https://github.com/tractordev/wanix#wanix-term)
通常任务通过自动连接的终端分配启动。通常用作任务的顶级元素。类似的可视化元素可以在命名空间外用于样式灵活性,它们只需要显式的`for`和`path`属性来连接到Wanix终端。
`<wanix-vm>`:在命名空间中运行虚拟机,由v86驱动
[文档](https://github.com/tractordev/wanix#wanix-vm)
通过绑定v86模拟器资源和Linux系统镜像来启动无头Linux虚拟机。它将检测Linux内核并启动到shell。这更常见于分配和连接终端的情况,但对于VM控制台,终端需要处于`raw`模式。如果镜像支持,可以使用`export="ttyS0"`在`#vm/1/guest`导出内部命名空间。
`<wanix-system>`:显式的命名空间容器
[文档](https://github.com/tractordev/wanix#wanix-system)
使用`<wanix-system>`显式创建命名空间。使用任何其他标签作为顶级元素将隐式创建命名空间。为命名空间指定`id`和`allow-origins`,以便其他页面可以使用导入绑定导入此命名空间。
`<wanix-bind>`:将文件、归档和其他命名空间绑定挂载到命名空间
[文档](https://github.com/tractordev/wanix#wanix-bind)
Bind可以链接名称、分配设备,或使用`type="file"`获取或内联文件。Bind是构建命名空间的通用原语。使用`type="archive"`可以将`.tar`/`.tgz`解压到目录树中。将多个归档或目录绑定到同一`dst`以创建递归联合。使用`type="import"`可以通过WebSocket上的9P或作为嵌入式iframe导入远程命名空间。
### 扩展 — 较大的组件需要额外资源
`<wanix-workbench>`:嵌入VS Code工作台作为编辑器、文件浏览器、完整IDE或应用外壳
[文档](https://github.com/tractordev/wanix#wanix-workbench)
嵌入由Wanix命名空间支持的VS Code工作台。需要`assets`属性。需要提供一个带`role="shell"`的任务以启用终端。使用`open`和`sidebar`等属性可以控制工作台的初始状态。这里我们将IDE简化为一个单文件编辑器。未来,您将能够向工作台添加自定义扩展和视图,甚至在工作台内实时编辑它们。
script标签
## 将Wanix添加到任何页面
您可以从[最新发布](https://github.com/tractordev/wanix/releases)获取资源,或直接使用CDN:
`` ``
wanix背后的理念
https://www.youtube.com/watch?v=kGBeT8lwbo0
19分钟完整故事
## Plan 9的精神,在Wasm中
每个进程的命名空间、一切皆文件,以及为什么90年代的研究型操作系统最终成为本地优先Web的正确模型。
▷ [观看演讲](https://www.youtube.com/watch?v=kGBeT8lwbo0)
相似文章
Wterm – 面向网页的终端模拟器
Wterm 是一款面向网页的终端模拟器,使用 Zig 构建并编译为 WASM,以实现接近原生的性能,同时具备原生文本选择、复制/粘贴、查找和无障碍功能。
Linux 应用沙箱——旧技术的新未来
文章推荐使用成熟的 Firejail 工具,在 Linux 上限制程序的网络、文件系统及硬件访问,无需等待 Wayland 等新显示技术。
使用MicroPython和WASM在沙盒中运行Python代码
Simon Willison介绍了micropython-wasm,一个alpha版本包,它使用编译为WebAssembly的MicroPython在沙盒中运行Python代码,从而在Datasette等Python应用中实现安全的插件执行。
weblings:在 WASM 内部将 Rust 编译为 WASM
Weblings 是一个编译为 WebAssembly 的 Rust 编译器工具链,通过带有 playground 和 Rustlings 练习的网页 UI,支持在浏览器中直接编译和执行 Rust 代码。
[browser-use-wasm] 我制作了一个在WASM中运行的零成本浏览器使用代理
一位开发者构建了一个完全自包含的浏览器使用代理,完全在WASM/WebGPU中运行,零服务器成本,通过自然语言提示实现完整的网页控制。