Wasm 玩出花?在浏览器中运行虚拟机!

发布时间 - 2025-07-16 00:00:00    点击率:

大家好,我是 conardli

最近在 Github 上发现了一个有趣的项目:可以在浏览器环境中运行的虚拟机 WebVM

传统的虚拟机(VM)是建立在物理硬件系统上,模拟了一套完整的硬件环境,包括 CPU、内存、网络接口和存储器,需要在服务器上运行。

然而,WebVM 与我们常见的传统 WebShell 不同,它不需要服务器,仅依赖 HTML5/WebAssembly 就能在浏览器客户端运行一个基于 Debian 的完整虚拟机。

WebVM 是基于 CheerpX 实现的,而 CheerpX 则是基于 Cheerp 编译器实现的... 我们先从 Cheerp 开始了解,~

Cheerp 是能够生成 WebAssemblyC/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

运行一个简单的 Python 程序

python3 examples/python3/fibonacci.py

代码语言:javascript代码运行次数:0运行复制```javascript
# 使用 gcc 编译一个简单的 C 示例
gcc -o helloworld examples/c/helloworld.c

代码语言:javascript代码运行次数:0运行复制```javascript

运行!

./helloworld

代码语言:javascript代码运行次数:0运行复制```javascript
# 转储代码,验证这实际上是一个 x86 二进制
objdump -d ./helloworld

代码语言:javascript代码运行次数:0运行复制```javascript

编辑 helloworld.c 文件,然后再试一次

vim examples/c/helloworld.c

examples 目录中提供了各种语言的示例文件。

尽管这个应用距离生产环境还有很长的路要走,但它确实让我看到了 Web 的无限可能。

Web 平台正逐渐成为应用程序分发的主要平台。特别是自从 WebAssembly 标准化以来,这种趋势变得更加明显。想象一下:一种新的编程语言一旦被开发出来,就会被所有现代浏览器支持,这可以持续满足大型 Web 应用程序的性能需求。

WebAssembly 为浏览器世界带来了真正的创新,以及视角和责任的转变。

对此,你怎么看?


# python  # git  # 浏览器  # c++  # 高可扩展性 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  网站建设要注意的标准 促进网站用户好感度!  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  简单实现Android验证码  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  jquery插件bootstrapValidator表单验证详解  如何基于云服务器快速搭建个人网站?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Android GridView 滑动条设置一直显示状态(推荐)  WordPress 子目录安装中正确处理脚本路径的完整指南  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  高端建站如何打造兼具美学与转化的品牌官网?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  进行网站优化必须要坚持的四大原则  轻松掌握MySQL函数中的last_insert_id()  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何快速建站并高效导出源代码?  Laravel如何处理文件下载请求?(Response示例)  如何彻底删除建站之星生成的Banner?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Swift中swift中的switch 语句  zabbix利用python脚本发送报警邮件的方法  网站建设保证美观性,需要考虑的几点问题!  JS去除重复并统计数量的实现方法  微信小程序制作网站有哪些,微信小程序需要做网站吗?  详解jQuery中的事件  利用JavaScript实现拖拽改变元素大小  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  php 三元运算符实例详细介绍  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  原生JS获取元素集合的子元素宽度实例  Laravel如何实现用户注册和登录?(Auth脚手架指南)  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何使用查询构建器?(Query Builder高级用法)  LinuxShell函数封装方法_脚本复用设计思路【教程】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  清除minerd进程的简单方法  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】