hyperlight-dev/hyperlight

GitHub: hyperlight-dev/hyperlight

Hyperlight 是一个轻量级嵌入式 VMM,通过无内核的 micro VM 以毫秒级启动和微秒级调用延迟安全隔离执行不受信任代码。

Stars: 4445 | Forks: 187

Hyperlight

hyperlight logo

A lightweight VMM for running untrusted code in micro VMs with minimal overhead.
A Cloud Native Computing Foundation sandbox project.

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 完全跳过设置: [![Open in GitHub Codespaces](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ba0b16febd121119.svg)](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) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fhyperlight-dev%2Fhyperlight.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fhyperlight-dev%2Fhyperlight?ref=badge_large)
标签:Rust, 云计算, 可视化界面, 微型虚拟机, 沙箱隔离, 系统底层, 网络流量审计, 虚拟化管理器, 规则引擎, 通知系统