1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018年5月3日 |
---|
#57 在 #subsystem
9KB
257 行
cervus
Linux 的 WebAssembly 子系统。
这是什么?
Cervus 在 Linux 内核之上实现了一个 WebAssembly "用户模式"(试图遵循 CommonWA 规范),使 wasm 应用程序可以直接在 ring 0 中运行,同时确保安全和安全性。
但是为什么?
- 托管执行(使其能够根据跟踪/部分评估进行优化)
- 避免系统调用和地址空间切换引入的性能开销
- 零拷贝 I/O 是可能的
正在工作和未工作的事情
正在工作
- 基于 HexagonE 的解释器
- 基于 wasm-core 的二进制转换和加载
- 大多数 CommonWA("一切皆 URL",文件 I/O,命令行参数)
- IPC(目前只支持基于 URL 前缀的广播,前缀为
ipc-broadcast://
)
未工作
- 浮点数
- JIT
- 其他所有东西
构建
内核模块
要求
- xargo
- 最新的夜间版 rust
- 内核头文件
- gnu make & gcc
./build_all.sh
sudo insmod glue/cervus.ko
加载器(cvctl)
此安装程序会安装 cvload
和 cvrun
二进制文件
cd cvctl
cargo install
应用程序
Cervus 实现了大多数 CommonWA(在 #2 跟踪),其示例可以在 cwa-rs/examples 中找到。
例如,构建并运行 cat
示例
sudo chmod 666 /dev/cvctl
cd cwa-rs
cargo build --target wasm32-unknown-unknown --release --example cat
cvrun target/wasm32-unknown-unknown/release/examples/cat.wasm file:///etc/lsb-release
启动 IPC 广播发送器,然后从中读取
cargo build --target wasm32-unknown-unknown --release --example broadcast_sender
cvrun target/wasm32-unknown-unknown/release/examples/broadcast_sender.wasm your_broadcast
(在另一个终端中)
cvrun target/wasm32-unknown-unknown/release/examples/cat.wasm ipc-broadcast://your_broadcast | dd of=/dev/null bs=4K
贡献
我忙于高考,直到 ~2018 年 6 月 10 日之前,在此期间无法积极维护此项目。然而,有一些事情可以相对容易地完成
- 基于 Cretonne 的 JIT
由于 Cretonne 支持 no_std
,与其他 JIT 方法相比,这应该相对容易。
通过实现 Backend
特性,与系统的其余部分进行接口,其中以位于 src/backend/hexagon_e
的基于解释器的后端作为起点是一个很好的例子。
- 网络 API
可以将阻止网络API添加为虚拟系统调用。
许可证
Cervus自身必须使用GPL 2.0许可证,因为它链接到Linux内核。然而,在Cervus上运行的用户代码不受此限制。
依赖项
~2.2–3MB
~64K SLoC