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中使用

GPL-2.0许可

2KB

cervus

Join the chat at https://gitter.im/cervus-v/cervus

Linux的WebAssembly子系统。

Screenshot

这是什么?

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)

此安装程序安装了cvloadcvrun二进制文件

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 上运行的用户代码不受此限制。

无运行时依赖