2 个不稳定版本

新功能 0.11.0 2024 年 8 月 23 日
0.10.0 2024 年 8 月 14 日

#137 in 模拟器

Download history 109/week @ 2024-08-10 116/week @ 2024-08-17

225 次每月下载
用于 polkatool

MIT/Apache

1.5MB
31K SLoC

PolkaVM

PolkaVM 是一个基于 RISC-V 的通用用户级虚拟机。

此项目尚未完成,且是一个非常重的正在进行中的工作!请不要在生产环境中使用它!

查看当前基准测试结果.

设计目标

(注意:以下并非全部都目前有效!)

  • 默认安全且沙箱化。在 VM 中运行的代码应在独立进程中运行,并且不能访问宿主系统,即使在 VM 内部拥有完全远程代码执行权限的攻击者也是如此。
  • 执行速度快。在 VM 中运行的代码的运行性能应与最先进的 WebAssembly VM 具有竞争力,至少在同一数量级。
  • 编译速度快,保证单遍 O(n) 编译。将新代码加载到 VM 中应非常迅速。
  • 内存占用低。VM 的每个并发实例的基准内存开销不应超过 128KB。
  • 二进制文件小。为该 VM 编译的程序应尽可能占用最少的空间。
  • 没有浪费的虚拟地址空间。VM 不应为沙箱化目的预先分配数 GB 的虚拟地址空间。
  • 完全确定。在给定的相同输入和相同代码的情况下,执行应始终返回完全相同的输出。
  • 支持高性能异步气体计量。气体计量应便宜、确定且合理准确。
  • 简单。应该可能让单个程序员在一周内编写一个完全兼容此 VM 的解释器。
  • 版本化操作语义。任何对语义的更改,如果可以被客户程序观察到,都将进行版本化,并将明确选择。
  • 标准化。应该有一个规范完全描述此 VM 的客户可观察操作语义。
  • 跨平台。在不支持的操作系统和平台上,VM 将以解释模式运行。
  • 外部依赖最小化。VM 应该主要是自包含的、编译速度快、并且对供应链攻击具有抵抗力。
  • 内置调试和性能分析工具。

非目标

  • 系统级仿真。这个虚拟机永远无法运行正常操作系统。
  • 完全支持amd64(也称为x86_64)和aarch64(也称为arm64)以外的架构。其他所有内容将以解释模式运行。
  • 完全支持Linux、macOS和Windows以外的操作系统。在任何其他操作系统上,虚拟机将以解释模式运行。
  • 支持浮点数、SIMD和其他更窄的RISC-V扩展。如果需要,这些可以作为可选功能在未来添加,但目前没有计划。
  • 支持完整的32寄存器RISC-V指令集架构。这个虚拟机目前仅针对RV32EM。

许可证

根据您的选择,许可方式如下:

任选其一。

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将按上述方式双许可,不附加任何额外条款或条件。

依赖项

~21MB
~433K SLoC