大家好,我是 conardli。
最近在 Github 上发现了一个有趣的项目:可以在浏览器环境中运行的虚拟机 WebVM。
传统的虚拟机(VM)是建立在物理硬件系统上,模拟了一套完整的硬件环境,包括 CPU、内存、网络接口和存储器,需要在服务器上运行。
然而,WebVM 与我们常见的传统 WebShell 不同,它不需要服务器,仅依赖 HTML5/WebAssembly 就能在浏览器客户端运行一个基于 Debian 的完整虚拟机。
WebVM 是基于 CheerpX 实现的,而 CheerpX 则是基于 Cheerp 编译器实现的... 我们先从 Cheerp 开始了解,~
Cheerp 是能够生成 WebAssembly 的 C/C++ 编译器。
WebAssembly 是一种二进制指令格式,简称 Wasm,它可以在基于堆栈的虚拟机上运行。其存在的意义是作为编程语言的可移植编译目标,使得在 Web 上部署客户端和服务端应用成为可能。简单来说,它允许我们在 Web 环境中运行服务端代码。

CheerpX 是一种将 x86 转换为 WebAssembly 的虚拟化技术,声称可以在客户端完全运行任意 x86 应用程序。

CheerpX 构建了一个基于 WebAssembly 的虚拟机,用于在浏览器中运行 x86 二进制文件。您可以用它来运行任何 REPL 环境。例如:https://repl.leaningtech.com/?python3
WebVM 是一个在浏览器中运行的基于 Debian 的完整虚拟机,由 CheerpX 支持,由以下几部分组成:
CheerpX 作为 JavaScript API 执行引擎,特别是 cx.run(…) 这样的代码,用于启动 bash 进程。然后 bash 可以在用户输入命令时启动其他进程。Xterm.js 作为主要的 UI 组件:Xterm.js 负责解释 vim 等应用程序使用的终端转义,并将用户输入发送回 CheerpX。输入通过应用程序的标准输入文件描述符提供给应用程序。一个 Debian buster 磁盘映像,采用 ext2 格式并安装了一堆软件包。它们被放在 CDN 上,这可以最大限度地提高可扩展性。WebVM 的使命和愿景是让程序运行:
无需修改;无需重新编译;完全客户端模式。你可以在 WebVM 上尝试以下操作:
代码语言:javascript代码运行次数:0运行复制```javascript
python3 examples/python3/fibonacci.py
<code> 代码语言:javascript代码运行次数:0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor"></path></svg>运行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd"></path></svg>复制```javascript # 使用 gcc 编译一个简单的 C 示例 gcc -o helloworld examples/c/helloworld.c</code>
代码语言:javascript代码运行次数:0运行复制```javascript
./helloworld
<code> 代码语言:javascript代码运行次数:0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor"></path></svg>运行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd"></path></svg>复制```javascript # 转储代码,验证这实际上是一个 x86 二进制 objdump -d ./helloworld</code>
代码语言:javascript代码运行次数:0运行复制```javascript
vim examples/c/helloworld.c
<code><p>在 <code>examples</code> 目录中提供了各种语言的示例文件。</p><p>尽管这个应用距离生产环境还有很长的路要走,但它确实让我看到了 <code>Web</code> 的无限可能。</p><p><code>Web</code> 平台正逐渐成为应用程序分发的主要平台。特别是自从 <code>WebAssembly</code> 标准化以来,这种趋势变得更加明显。想象一下:一种新的编程语言一旦被开发出来,就会被所有现代浏览器支持,这可以持续满足大型 <code>Web</code> 应用程序的性能需求。</p><p><code>WebAssembly</code> 为浏览器世界带来了真正的创新,以及视角和责任的转变。</p><p>对此,你怎么看?</code>
以上就是Wasm 玩出花?在浏览器中运行虚拟机!的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号