hyperlight-dev/hyperlight
GitHub: hyperlight-dev/hyperlight
Hyperlight 是一个轻量级嵌入式 VMM,通过无内核的 micro VM 以毫秒级启动和微秒级调用延迟安全隔离执行不受信任代码。
Stars: 4445 | Forks: 187
Hyperlight 让您能够安全地在 hypervisor 隔离的 micro VM 中运行不受信任的代码,这些 VM 能在毫秒级内启动,而 guest 函数调用可在微秒级内完成。您可以将它作为库嵌入到您的 Rust 应用程序中,传入一个 guest 二进制文件,然后像调用本地函数一样自然地跨 VM 边界调用函数。为了最小化启动时间和内存占用,其中没有 guest kernel 或 OS。Guest 是使用 Hyperlight guest 库专门构建的。
- 支持 [KVM](https://linux-kvm.org/page/Main_Page)、[MSHV](https://github.com/rust-vmm/mshv) 和 [Windows Hypervisor Platform](https://docs.microsoft.com/en-us/virtualization/api/#windows-hypervisor-platform)
- VM 中没有 kernel 或 OS。Guest 是使用 `no_std` Rust 或 C 编写的常规 ELF 二进制文件
- Host 和 guest 通过类型化的函数调用进行通信
- Guest 默认被沙箱化,无法访问 host 文件系统、网络等
## 示例
**Host** - 创建沙箱,注册一个 host 函数,并调用 guest:
```
// Create an uninitialized sandbox by giving it the path to a guest binary.
// Allocates memory but does not yet run a VM.
let mut sandbox = UninitializedSandbox::new(GuestBinary::FilePath(guest_path), None)?;
// Register a host function that the guest can call. In a real app this
// might query a database, read a config, or call an external API.
// By default, guests can only print to the host.
sandbox.register("GetWeekday", || Ok("Monday".to_string()))?;
// Initialize the sandbox. Starts the VM and runs guest setup code.
let mut sandbox: MultiUseSandbox = sandbox.evolve()?;
// Call a function inside the VM
let greeting: String = sandbox.call("SayHello", "World".to_string())?;
println!("{greeting}"); // "Hello, World! Today is Monday."
```
Guest 的状态会在多次调用之间保留。使用 `snapshot()` 和 `restore()` 来保存和重置 VM 内存。这避免了重新创建 VM,同时确保每次调用都从干净的状态开始。
**Guest** (Rust) - 使用简单的宏声明 host 函数并暴露 guest 函数。Guest 也可以[用 C 编写](./src/hyperlight_guest_capi)。
```
#[host_function("GetWeekday")]
fn get_weekday() -> Result
;
#[guest_function("SayHello")]
fn say_hello(name: String) -> Result {
let weekday = get_weekday()?;
Ok(format!("Hello, {name}! Today is {weekday}."))
}
```
要开始使用,请参阅[入门指南](./docs/getting-started.md)。有关编写 guest 的更多详细信息,请参阅[如何构建 Hyperlight guest 二进制文件](./docs/how-to-build-a-hyperlight-guest-binary.md)。
## 何时使用 Hyperlight
当您需要以下操作时,Hyperlight 是一个很好的选择:
- 在 hypervisor 级别的隔离下运行不受信任或第三方代码
- 在毫秒级内创建和销毁沙箱
- 在微秒级内进行 guest 函数调用
- 将沙箱化执行直接嵌入到您的应用程序中
- 构建具有 hypervisor 级别隔离的 functions-as-a-service
- 通过 snapshot 和 restore 高效重用沙箱
Hyperlight *不*适用于:
- 通用虚拟化(请改用完整的 VMM)
- 运行需要 syscalls、网络或文件系统访问的完整 Linux guest 工作负载
## 入门指南
请参阅 [docs/getting-started.md](./docs/getting-started.md) 了解以下内容的详细前置条件和特定平台设置:
- **运行** Hyperlight
- **构建 guest**
或者使用 codespace 完全跳过设置:
[](https://codespaces.new/hyperlight-dev/hyperlight)
## 仓库结构
| 目录 | 描述 |
|---|---|
| [src/hyperlight_host](./src/hyperlight_host) | Host 库 - 创建并管理 micro VM |
| [src/hyperlight_guest](./src/hyperlight_guest) | 核心 guest 库 - 用于 guest 与 host 交互的最小构建块 |
| [src/hyperlight_guest_bin](./src/hyperlight_guest_bin) | 扩展 guest 库 - 入口点、panic 处理程序、heap、日志、异常 |
| [src/hyperlight_guest_capi](./src/hyperlight_guest_capi) | 围绕 `hyperlight_guest_bin` 的 C API 封装,用于通过 FFI 使用 |
| [src/hyperlight_libc](./src/hyperlight_libc) | 用于 guest 的 C 标准库,基于 picolibc 构建 |
| [src/hyperlight_guest_macro](./src/hyperlight_guest_macro) | 用于注册 guest 和 host 函数的宏 |
| [src/hyperlight_guest_tracing](./src/hyperlight_guest_tracing) | 针对 guest 的 tracing 支持 |
| [src/hyperlight_common](./src/hyperlight_common) | host 和 guest 都会使用的共享代码 |
| [src/hyperlight_component_macro](./src/hyperlight_component_macro) | 用于基于 WIT 的 host/guest 绑定的 Proc macro |
| [src/hyperlight_component_util](./src/hyperlight_component_util) | 用于生成 WIT 绑定的共享实现 |
| [src/hyperlight_testing](./src/hyperlight_testing) | 共享的测试工具 |
| [src/schema](./src/schema) | FlatBuffer schema 定义 |
| [src/trace_dump](./src/trace_dump) | 用于导出和可视化 trace 数据的工具 |
| [src/tests](./src/tests) | 测试用的 guest 程序(Rust 和 C) |
## 相关项目
- [cargo-hyperlight](https://github.com/hyperlight-dev/cargo-hyperlight) - 用于构建和搭建 Hyperlight guest 骨架的 Cargo 子命令
- [hyperlight-wasm](https://github.com/hyperlight-dev/hyperlight-wasm) - 在 Hyperlight micro VM 中运行 WebAssembly 模块
- [hyperlight-js](https://github.com/hyperlight-dev/hyperlight-js) - 在 Hyperlight micro VM 中运行 JavaScript
- [hyperlight-sandbox](https://github.com/hyperlight-dev/hyperlight-sandbox) - 用于在受控的 host 功能下运行不受信任代码的多后端沙箱框架,提供 Python、.NET 和 Rust SDK
- [hyperlight-unikraft](https://github.com/hyperlight-dev/hyperlight-unikraft) - 使用 Unikraft 作为 guest kernel,在 Hyperlight micro VM 上运行 Linux 应用程序(Python、Node.js、Go、Rust、C/C++)
## 社区
- **会议**:每隔一周的周三 09:00 PST/PDT ([转换为您的时区](https://dateful.com/convert/pst-pdt-pacific-time?t=09))。议程和加入信息请见[社区会议记录](https://hackmd.io/blCrncfOSEuqSbRVT9KYkg#Agenda)。
- **Slack**:CNCF Slack 上的 [#hyperlight](https://cloud-native.slack.com/archives/hyperlight) 频道([点击此处加入](https://www.cncf.io/membership-faq/#how-do-i-join-cncfs-slack))。
- **文档**:[`docs/` 目录](./docs/README.md)
- **行为准则**:[CNCF 行为准则](https://github.com/cncf/foundation/blob/main/code-of-conduct.md)
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fhyperlight-dev%2Fhyperlight?ref=badge_large)标签:Rust, 云计算, 可视化界面, 微型虚拟机, 沙箱隔离, 系统底层, 网络流量审计, 虚拟化管理器, 规则引擎, 通知系统