#virtual-machine #polka-vm #guest #risc-v #programs #secure

polkavm-derive-impl

PolkaVM客户程序(实现)的derive软件包

9个重大版本更新

新功能 0.11.0 2024年8月23日
0.9.0 2024年2月23日
0.3.0 2023年12月1日
0.2.0 2023年11月24日

#364 in 过程宏

Download history 24087/week @ 2024-05-03 27544/week @ 2024-05-10 23780/week @ 2024-05-17 35081/week @ 2024-05-24 29152/week @ 2024-05-31 24521/week @ 2024-06-07 25005/week @ 2024-06-14 32588/week @ 2024-06-21 24306/week @ 2024-06-28 27545/week @ 2024-07-05 36870/week @ 2024-07-12 36924/week @ 2024-07-19 34090/week @ 2024-07-26 32826/week @ 2024-08-02 46104/week @ 2024-08-09 27560/week @ 2024-08-16

146,069 每月下载量
477 个crate中使用(通过 polkavm-derive-impl-macro

MIT/Apache

300KB
7K SLoC

PolkaVM

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

该项目尚未完成,是一个非常重的开发中项目!请勿在生产环境中使用它!

查看当前的基准测试结果.

设计目标

(注意:并非所有这些目标目前都已实现!)

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

非目标

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

许可

以下任一许可下授权

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的您提交的任何旨在包含在作品中的贡献,应如上双授权,不附加任何额外条款或条件。

依赖

~240–680KB
~16K SLoC