14个不稳定版本 (3个破坏性更新)
使用旧的Rust 2015
0.4.99 | 2018年4月30日 |
---|---|
0.4.0 | 2017年11月5日 |
0.3.6 | 2017年11月2日 |
0.3.5 | 2017年10月26日 |
0.1.0 | 2017年8月10日 |
#6 in #可达
每月37次下载
在cervus_bridge中使用
2KB
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
trait与系统的其余部分进行接口,其中以位于src/backend/hexagon_e
的解释器后端为例,是一个好的开始。
- 网络API
可以将阻塞式网络API作为虚拟系统调用添加。
许可证
Cervus 本身必须使用 GPL 2.0 许可证,因为它链接到 Linux 内核。但是,在 Cervus 上运行的用户代码不受此限制。