The-Libre-Project/Weave
GitHub: The-Libre-Project/Weave
Weave 是一个用 Rust 从零构建的内存安全 Win32 兼容层,通过将 Windows API 调用直接委托给 Linux 原生子系统,以远小于 Wine 的代码量在 Linux 上运行 Windows 应用。
Stars: 1 | Forks: 0
**一个原生的 Rust Linux Windows 兼容层。从零开始构建,而非基于 Wine,并且在体积上刻意小了一个数量级。**
Weave 是对 Win32 API 接口的独立 Rust 重新实现,其行为参考了 Wine。Windows API 是全球主导的应用程序二进制接口:数十亿台设备,数十年的软件,却没有一个开源实现是内存安全的、默认沙盒化的,或者其复杂性仅为传统代码库的一小部分且可审计。Weave 就是这样的实现,旨在为基于 Linux 的操作系统提供一条安全、可维护、尊重自由的 Windows 应用程序兼容性路径。
采用 GPL-3.0 许可。开放用于安全审计、研究和基于 GPL 的分叉。目前不接受代码贡献(请参阅[贡献指南](#contributing))。
## 为什么它更小
Wine 并不将 Windows 调用转换为 Linux 调用。它在用户空间中重新实现了整个 Windows 子系统栈:它拥有自己的窗口管理器、合成器、软件位块传输器、音频混音器、shell、注册表解析器和 OLE 基础设施。这大约是 **650 万行 C 代码**,其复杂性堪比拥有 30 年历史的 OS 内核。在 1993 年,当 Linux 还没有 Vulkan、PipeWire、Wayland、Landlock 和容器生态系统时,这是正确的设计。因为主机没有这些子系统,所以 Wine 必须自行构建它们。
现在主机已经拥有了这些。Weave 直接委托给它们,而不是重新实现。
| 子系统 | Wine | Weave |
|---|---|---|
| 图形 | 自带窗口管理器、软件位块传输器、GL 封装 | 在主机 Vulkan 上委托给 DXVK/VKD3D |
| 窗口 | `winex11` 拥有完整的窗口树(约 150 万行) | 将 `CreateWindowEx` 映射到 xcb;主机合成器管理窗口树(约 1.7 万行) |
| 音频 | 自带 ALSA/Pulse 驱动栈和混音器(约 40 万行) | 映射到 PipeWire 流(约 1200 行) |
| Shell | 完整的 `explorer.exe` 重新实现(约 80 万行) | 无;应用直接在主机桌面中运行 |
| NT 内核 | 自带 `ntoskrnl`(约 60 万行) | 针对真实应用实际调用的系统调用提供 ntdll 垫片(约 2500 行) |
Wine 在应用程序和主机内核之间插入了一个完整的 Windows OS 边界。Weave 是一个翻译垫片:它将 Windows 调用约定和数据结构转换为原生的 Linux 系统调用和库,并让主机完成繁重的工作。正是这种架构优势,使得 Weave 能够以大约 **Wine 代码量 5% 到 10%** 的规模覆盖相当的应用程序范围。完整的推论、代码行数预测和可调试性分析在[架构白皮书](docs/published-papers/ARCHITECTURE.md)中。
这并不是声称 Weave 会支持 Wine 支持的所有内容。它不会。这种切入点在设计上就是狭窄的:针对特定受众的重要应用,实现良好,默认沙盒化,且只使用一小部分代码。
## 目前可用的功能
Weave 处于早期阶段和实验性阶段。其切入点是单二进制文件的原生 Win32 桌面应用程序和 Wine 处理不佳或不安全的 SDL 时代游戏,并将沙盒作为差异化优势。
- Rust PE 加载器和 ntdll 系统调用网关在支持的测试集中可以端到端运行。
- 根据 [SHIM-CONTRACT](docs/SHIM-CONTRACT.md),**在 44 个 crate 中注册了约 1870 个 Win32 导出**(参考了 Wine 的行为、非 panic 主体,并受里程碑关卡测试)。其余的是 Phase A 桩:存在于解析器中,返回哨兵值,等待实现。这种分阶段设计是刻意为之,并非不完整的标志;原因请参阅[架构白皮书](docs/published-papers/ARCHITECTURE.md)。
- 每个应用默认都在**进程外沙盒**中运行 —— fork + seccomp-BPF 系统调用过滤器 + 通过 Unix domain sockets 进行 IPC。客户机进程没有直接的文件系统或系统调用访问权限。请参阅[沙盒架构文档](docs/architecture/sandbox.md)。
- 受支持的应用列表很短,并按发布层级划分。目前通过端到端绿色 CI 关卡的有:**NXEngine-evo**(SDL2 游戏)、**SDL2 testsprite2**、**Notepad++**、**7-Zip**、**IrfanView** 和 **Q-Dir**。不在列表中的应用程序不受支持。
**真实桌面验证**(Fedora 41、GNOME Wayland、AMD RX 6700 XT,2026-06-13):
- **7-Zip**:受支持。完整的解压、归档浏览、GUI 浏览文件夹功能。
- **Notepad++**:CI 关卡通过绿色验证;编辑器保存往返测试已验证。
- **IrfanView**:BMP/JPEG/PNG/GIF 打开和 PNG 保存已验证;文件夹导航已验证。
DXVK/VKD3D、ARM64、GUI 管理器、插件系统、兼容性数据库、硬件加速游戏、真实网络客户端和安装流程目前仅为搭建脚手架或正在进行中,尚未发布。如需了解诚实的分阶段状态,请参阅 [ROADMAP.md](ROADMAP.md)。
### Rust 能带来什么以及不能带来什么
Rust 消除了 Wine 的 C 代码库中存在了几十年的整类内存安全漏洞。但是,仅靠 Rust 并不能使 Win32 兼容性变得安全。Win32 主机必然要在信任边界处理由客户机控制的指针和 FFI;unsafe 接口面是结构性的。真正的安全性在于 **Rust 加上严格的指针验证再加上沙盒,从而缩小了可被利用漏洞的影响范围**。即使主机中的某些环节出现问题,如果没有明确许可,客户机也无法触及您的主目录、网络或系统。沙盒是承重部分,而 Rust 是乘数。
## 仓库布局
Weave 是一个包含约 38 个 crate 的 Cargo workspace。其核心原则是:**每一个 Windows DLL 都是一个独立的 Rust crate**,独立进行版本控制和测试。向 `kernel32` 添加函数不需要了解 `user32`。
```
weave-core/ # PE loader, syscall dispatcher, process management
weave-kernel32/ # File I/O, process/thread/memory (~19K LoC, 450 exports)
weave-user32/ # Window management, input, messaging (~17K LoC, 329 exports)
weave-ntdll/ # NT layer primitives (~2.5K LoC)
weave-gdi32/ # 2D graphics via Cairo/Skia (~6K LoC, 128 exports)
weave-gdiplus/ # GDI+ surface (~2.9K LoC, 181 exports)
weave-advapi32/ # Registry, security, crypto (~4K LoC)
weave-ws2_32/ # Winsock networking (~2.4K LoC, 48 exports)
weave-shell32/ # Shell integration, file dialogs (~3.5K LoC, 36 exports)
weave-ucrt/ # Universal C runtime (~5.4K LoC, 139 exports)
weave-vulkan/ # Vulkan passthrough (~3.3K LoC, 291 exports)
weave-sandbox/ # Landlock isolation
...
```
此外还有用于 comctl32、ole32、oleaut32、d3d12、ddraw、mmdevapi、shlwapi、winmm、xinput 以及大约 18 个较小的 crate(bcrypt、crypt32、imm32、secur32、setupapi、wldap32、normaliz、msvcp140 等)的 crate。完整的 crate 列表位于 [`weave-cli/src/main.rs`](weave-cli/src/main.rs) 中。
运行时有两个始终激活的层:**Weave Native**(API 翻译,将 Windows 系统调用映射到 Linux 等效项,将图形映射到 Vulkan,将音频映射到 PipeWire)和 **Weave Sandbox**(Landlock 文件系统隔离,默认开启,无需 root)。完整的架构、沙盒威胁模型和图形管线记录在[架构白皮书](docs/published-papers/ARCHITECTURE.md)中。
## 参考优先方法论
API 不受版权保护(*Oracle v. Google*,2021 年)。Weave 是一个独立的重新实现:将 Wine 30 年的逆向工程经验作为行为参考,用于确定每个 Win32 函数必须执行*什么*操作,包括真实应用程序所依赖的未公开边缘情况,但是**绝不复制 Wine 代码**。每一个实现都是原创的 Rust 代码,根据从 MSDN、Wine 和 ReactOS 参考资料以及在真实 Windows 上进行的黑盒测试中得出的行为规范编写。遍布整个代码库的 `// Wine ref:` 注释是此参考流程的明确凭证 —— 它们准确地记录了每个实现参考了哪个 Wine 函数。
一条硬性规则:**绝不访问专有的 Windows 源代码**(泄露的源代码、反编译或反汇编的二进制文件)。完整的参考政策、知识产权边界和每个函数的文档标准位于 [docs/REFERENCE-FIRST.md](docs/REFERENCE-FIRST.md) 中。
## Weave 不是什么
- **不是 Windows 虚拟机。** 是 API 翻译,而不是虚拟化。没有虚拟机回退机制。
- **不是 Wine 的分支。** 是独立的实现;不使用任何 Wine 代码。
- **不是 Wine 的直接替代品。** 其切入点是为特定受众设计的小型原生 Win32 应用程序。在受支持列表之外的任何内容都是不支持的,直到它被添加到列表中。
- **不依赖云。** 所有内容都在本地运行。未经明确同意,不进行遥测。
## 构建
```
# 前置条件:Rust 1.70+,Linux x86-64 target
rustup target add x86_64-unknown-linux-gnu
git clone https://github.com/The-Libre-Project/Weave.git
cd Weave
cargo check # compiles
cargo zigbuild --target x86_64-unknown-linux-gnu # cross-compile from macOS
make test-unit # unit tests, any platform
make test # full suite (Linux or Docker)
```
标记的发布版本(`main` 分支上的 `vX.Y.Z`,在 CI 通过之后)会将一个 Linux x86-64 二进制文件作为 `weave-x86_64` 以及其对应的 `.sha256` 发布在 GitHub Releases 上。Weave 原生运行 x86-64 Windows PE 代码,不提供 aarch64 构建。
## 管理机制
Weave 由 [IronTree Software](https://github.com/The-Libre-Project) 构建和维护,作为 [Libre Commons](https://github.com/The-Libre-Project/Commons) 的创始资产。Libre Commons 是一个公共基础设施管理框架,在公共范围工作与产品工作之间划定了严格的界限:如果某项工作有利于任何 Linux 平台、开发者、公共机构、翻新商或下游 OS,它就属于 Commons;如果它创造了 IronTree 特定的产品优势,它就属于 IronTree。Commons 的产出(兼容性关卡、沙盒架构、验证数据、可重现构建、参考优先方法论文档)按规定都是公开的。
*Weave 是采用 GNU 通用公共许可证 v3 (GPL-3.0) 授权的自由软件。*
标签:Landlock沙箱, Rust, Win32 API, Wine替代, 内存安全, 可视化界面, 系统兼容层, 网络流量审计, 通知系统