前端技术 · 2026年3月10日

浏览器里跑x86_64 Linux还带AVX-512:Bellard的JSLinux又进化了

Fabrice Bellard昨天(2026-03-09)给JSLinux加了AVX-512和APX支持。没错,就是那个创造了QEMU、FFmpeg、TinyCC的Bellard——他的浏览器x86模拟器现在能跑完整的64位Linux,还支持Intel最新的指令集扩展。

打开浏览器,访问 bellard.org/jslinux,选Alpine Linux x86_64,几秒钟就能进入一个完整的Linux命令行。不需要装任何东西,不需要Docker,不需要虚拟机软件。

这次更新加了什么

看一下JSLinux的更新日志:

  • 2026-01-12:支持64位x86
  • 2026-03-09:加入AVX2、AVX-512、APX

AVX-512大家可能听过——Intel的512位SIMD指令集,主要用在高性能计算、AI推理加速、科学计算这些场景。而APX(Advanced Performance Extensions)是Intel 2023年才公布的新扩展,把通用寄存器从16个扩到32个。

JSLinux现在是唯一一个公开的、支持APX的完整系统级x86模拟器。连QEMU都还没完整支持APX,Bellard自己的浏览器玩具先做到了。

技术架构:从C到WASM的套娃之路

JSLinux的架构演化过程很有意思:

  1. 2011年:Bellard用纯JavaScript手写了第一版PC/x86模拟器,复用了QEMU的部分代码
  2. 2015年:改用asm.js提速
  3. 2016年:用C重写了TinyEMU(最初是RISC-V模拟器),再用emscripten编译回JavaScript/WASM

注意第3步的操作——他把手写的asm.js代码转成C,再用emscripten编译回JS。结果经过精心调优之后,emscripten编译出来的版本比手写的asm.js还快

这说明一个问题:现代WASM工具链的优化能力已经超过了人工手动调优JS的极限。

当前模拟的x86 CPU特性列表:

- x87 80位浮点(bit-exact精度)
- PAE + NX
- AMD SVM虚拟化扩展(支持嵌套页表)
- MMX, SSE2, SSSE3, SSE4.1, SSE4.2
- AVX, AVX2, FMA, F16C
- AVX-512: F, DQ, BW, VL, CD, IFMA, VBMI, VBMI2, VPCLMULQDQ, VNNI, BITALG, VPOPCNTDQ
- APX(32个通用寄存器)
- BMI1, BMI2, POPCNT, ADX, CMOV

这份指令集支持列表放在真实硬件上都算很全了。AMD SVM虚拟化扩展意味着你可以在浏览器里跑的Linux里再套一层QEMU虚拟化——套娃模拟。

实际上手:在浏览器里编译AVX-512代码

打开 JSLinux x86_64 Alpine,等几秒钟启动完成,就能操作了。

先确认CPU信息:

cat /proc/cpuinfo | grep -E "model name|flags" | head -5

flags里能看到avx512f、avx512bw等标志位,说明AVX-512确实是启用状态。

写一个简单的AVX-512测试程序:

// avx512_test.c
#include <stdio.h>
#include <immintrin.h>

int main() {
    // 16个float,刚好一个512位寄存器
    float a[16], b[16], c[16];
    for (int i = 0; i < 16; i++) {
        a[i] = i * 1.0f;
        b[i] = i * 2.0f;
    }
    
    __m512 va = _mm512_loadu_ps(a);
    __m512 vb = _mm512_loadu_ps(b);
    __m512 vc = _mm512_add_ps(va, vb);
    _mm512_storeu_ps(c, vc);
    
    printf("AVX-512 result: ");
    for (int i = 0; i < 16; i++) {
        printf("%.0f ", c[i]);
    }
    printf("\n");
    return 0;
}

编译运行:

gcc -mavx512f -O2 -o avx512_test avx512_test.c
./avx512_test
# 输出: AVX-512 result: 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45

在浏览器里编译和运行AVX-512代码。2026年了,浏览器能做的事情已经超出大多数人的想象。

测试APX也很简单,gcc加-mapxf参数就行:

gcc -mapxf -O2 -o hello hello.c
objdump -d hello | head -30

反汇编可以看到r16-r31等新寄存器的使用。

性能:模拟器跑多快

Bellard在技术文档里提到,2017年的桌面PC用Firefox大概能跑到100 MIPS。现在是2026年,浏览器引擎和硬件都进步了不少,实际速度应该更高。

JSLinux自带vmtime工具可以做基准测试:

vmtime ls -la /

实际体验下来,日常命令行操作基本感受不到延迟。gcc编译小文件大概1-2秒,编译大项目肯定不行,但对于教学、演示、快速验证来说完全够用。

做个简单对比:

场景 JSLinux (浏览器) v86 (另一个浏览器模拟器) 说明
CPU架构 x86_64 x86 (32位) JSLinux支持64位
AVX-512 唯一支持的浏览器模拟器
APX 唯一支持APX的公开模拟器
嵌套虚拟化 ✅ (AMD SVM) 可以在里面跑QEMU
网络 ✅ (WebSocket VPN) JSLinux限速40KB/s
图形界面 ✅ (X11 + Fluxbox) 都支持
实现方式 C → emscripten → WASM Rust → WASM 不同技术栈

一个人的QEMU、FFmpeg和JSLinux

说Bellard是程序员天花板可能都不为过。列一下他的作品:

  • QEMU (2003):业界标准的开源模拟器/虚拟化工具,KVM就是基于它
  • FFmpeg (2000):几乎所有视频处理软件底层都在用,Meta每天跑几百亿次
  • TinyCC:号称最小的C编译器,能直接当脚本解释器用
  • TinyEMU:JSLinux的底层引擎,几千行C代码实现完整CPU模拟
  • JSLinux (2011):第一个在浏览器里跑Linux的模拟器
  • 圆周率计算:曾创下世界纪录

2026年了,这哥们还在给JSLinux加功能。不融资,不开公司,不搞社区运营,纯粹因为”I did it for fun”(他自己说的)。

对前端开发者意味着什么

JSLinux展示了WASM的真实能力边界。一个完整的x86_64 CPU模拟器,带512位SIMD指令集支持,跑在浏览器里——这不是demo,是真能用的东西。

几个值得思考的方向:

1. 开发环境的终极形态

StackBlitz的WebContainers已经证明了浏览器里跑Node.js的可行性。JSLinux走得更远——它跑的是完整Linux,GCC、Python、Node.js全都有。如果性能再提升一个数量级,”打开浏览器就是开发环境”就不是概念了。

2. 安全沙箱

需要跑一段不信任的代码?浏览器里的Linux虚拟机天然就是最强沙箱。WebAssembly的内存隔离 + 浏览器的安全模型,比Docker容器的隔离级别更高。

3. 在线教育

教操作系统、教编译原理、教计算机体系结构——以前学生得自己装虚拟机,配环境配半天。现在发个链接就行,打开浏览器直接上手。APX支持意味着学生甚至可以学习还没量产的CPU新特性。

4. WASM性能的标杆

JSLinux一直是WASM性能的真实基准测试。一个CPU模拟器对计算密集型性能极其敏感,浏览器引擎的任何性能改进都能直接反映在JSLinux的运行速度上。反过来,JSLinux也在持续push浏览器厂商优化WASM执行效率。

怎么玩

直接访问 bellard.org/jslinux,选一个VM就行。几个推荐配置:

  • 快速体验:Alpine Linux x86_64 (Console) — 启动最快,命令行环境
  • 图形界面:Alpine Linux x86_64 (X11) — 有Fluxbox窗口管理器
  • 怀旧:Windows 2000 — 对,浏览器里跑Win2000
  • RISC-V:Fedora RISC-V — 体验RISC-V生态

URL参数可以自定义内存大小和终端尺寸:

https://bellard.org/jslinux/vm.html?cpu=x86&url=alpine-x86_64.cfg&mem=256&cols=120&rows=40

文件上传点终端下方的箭头按钮,文件导出用export_file命令。有网络支持但限速40KB/s,别指望它下载什么大文件。

链接

浏览器能做的事,每年都在刷新认知。