将 C 和 C++ 代码编译为 WebAssembly,使其可在浏览器、Node.js 等环境运行的编译工具链。
copy/v86
一个在浏览器中运行的 x86 PC 模拟器,运行时将机器码转为 WebAssembly 以启动真实操作系统。
- Star
- 23,609
- Fork
- 1,924
- 未关闭 Issue
- 116
- 最近提交
- 3天前
这是什么?
v86 模拟 x86 兼容 CPU 以及一组 PC 硬件,包括 VGA 显卡、PS/2 键鼠、IDE 与软盘控制器、PCI 总线、NE2000 和 virtio 网络设备,以及 SoundBlaster 16 声卡。运行时机器码会被转换为 WebAssembly 模块,以便在浏览器标签页中获得可用的性能。
项目主要用于在浏览器中运行老旧和小众操作系统。已支持的客户机包括多种 Linux 发行版、FreeDOS、MS-DOS、Windows 95 至 2000、ReactOS、Haiku 和 FreeBSD,部分 Windows XP 及更新版本仅在特定条件下可用。磁盘镜像通过 URL 加载,模拟器可通过 libv86.js 或 npm 包 v86 嵌入网页。
它提供 JavaScript API,用于操作串口控制台、保存和恢复状态,并支持多个实例之间的网络互联。项目也可以使用 Rust 和 Make 在本地构建,分为调试版和优化版。
核心功能
- 01模拟接近 Pentium 4 水平的 x86 CPU,支持 SSE3
- 02运行时将机器码转换为 WebAssembly
- 03包含支持 SVGA 的 VGA 显卡以及 PS/2 键鼠
- 04提供 virtio、NE2000 和拨号调制解调器等网络选项
- 05支持保存和恢复模拟器状态
- 06可通过 libv86.js 或 npm 包嵌入网页
适用场景
- 在网页中运行 Windows 95、MS-DOS 等老旧操作系统
- 演示或教学 PC 硬件与 x86 启动过程
- 在浏览器工具中嵌入沙箱化的 Linux 或 DOS 环境
- 研究 CPU 模拟及向 WebAssembly 的动态二进制翻译
快速上手
- 1
安装 npm 包
npm install v86 - 2
按照 README 中的 API 示例,使用 V86 构造函数在网页中嵌入模拟器
使用前须知
- 不支持 64 位客户操作系统。
- 不支持多核模拟。
- 从源码构建需要 Rust、clang、Java 和 Node.js 等工具。
- 部分操作系统无法运行,例如 Plan 9 和 OS/2。
标签
常见问题
- v86 是什么?
- 一个在浏览器中运行的 x86 PC 模拟器,运行时将机器码转为 WebAssembly 以启动真实操作系统。 v86 模拟 x86 兼容 CPU 以及一组 PC 硬件,包括 VGA 显卡、PS/2 键鼠、IDE 与软盘控制器、PCI 总线、NE2000 和 virtio 网络设备,以及 SoundBlaster 16 声卡。运行时机器码会被转换为 WebAssembly 模块,以便在浏览器标签页中获得可用的性能。
- v86 可以免费使用吗?用的什么许可证?
- v86 以 BSD-2-Clause 许可证开源。用于商业产品前,请先确认许可证条款。
- v86 还在维护吗?
- 活跃维护中。v86 最近一次提交是在 2026年10月18日。
- v86 适合用来做什么?
- 在网页中运行 Windows 95、MS-DOS 等老旧操作系统 演示或教学 PC 硬件与 x86 启动过程 在浏览器工具中嵌入沙箱化的 Linux 或 DOS 环境 研究 CPU 模拟及向 WebAssembly 的动态二进制翻译
- v86 怎么安装和运行?
- 安装 npm 包: npm install v86 按照 README 中的 API 示例,使用 V86 构造函数在网页中嵌入模拟器
- 在哪里获取 v86?
- 源代码和安装说明在 GitHub 上:https://github.com/copy/v86
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
基于 WebAssembly 和 JavaScript 移植的 FFmpeg,可在浏览器中录制、转码和推流音视频。
基于 Rust 与 WebAssembly 的前端 Web 应用框架,支持类 JSX 的 HTML 书写方式。
基于 WebAssembly 的运行时与 CLI,用于在轻量、安全的沙箱中运行应用和 AI 智能体代码。
基于 Cranelift 代码生成器的独立 WebAssembly 运行时,支持 WASI 并提供多语言嵌入接口。
一种类 TypeScript 的语言及编译器,可将带类型的 TypeScript 变体编译为 WebAssembly 模块。