Wasm 玩出花?在浏览器中运行虚拟机!
发布时间 - 2025-07-16 00:00:00 点击率:次大家好,我是 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
运行一个简单的 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全文检索【实战】

