top | item 47311484

JSLinux Now Supports x86_64

380 points| TechTechTech | 11 days ago |bellard.org | reply

138 comments

order
[+] brucehoult|11 days ago|reply
Out of interest I tried running my Primes benchmark [1] on both the x86_64 and x86 Alpine and the riscv64 Buildroot, both in Chrome on M1 Mac Mini. Both are 2nd run so that all needed code is already cached locally.

x86_64:

    localhost:~# time gcc -O primes.c -o primes
    real    0m 3.18s
    user    0m 1.30s
    sys     0m 1.47s
    localhost:~# time ./primes
    Starting run
    3713160 primes found in 456995 ms
    245 bytes of code in countPrimes()
    real    7m 37.97s
    user    7m 36.98s
    sys     0m 0.00s
    localhost:~# uname -a
    Linux localhost 6.19.3 #17 PREEMPT_DYNAMIC Mon Mar  9 17:12:35 CET 2026 x86_64 Linux
x86 (i.e. 32 bit):

    localhost:~# time gcc -O primes.c -o primes
    real    0m 2.08s
    user    0m 1.43s
    sys     0m 0.64s
    localhost:~# time ./primes
    Starting run
    3713160 primes found in 348424 ms
    301 bytes of code in countPrimes()
    real    5m 48.46s
    user    5m 37.55s
    sys     0m 10.86s
    localhost:~# uname -a
    Linux localhost 4.12.0-rc6-g48ec1f0-dirty #21 Fri Aug 4 21:02:28 CEST 2017 i586 Linux

riscv64:

    [root@localhost ~]# time gcc -O primes.c -o primes
    real    0m 2.08s
    user    0m 1.13s
    sys     0m 0.93s
    [root@localhost ~]# time ./primes
    Starting run
    3713160 primes found in 180893 ms
    216 bytes of code in countPrimes()
    real    3m 0.90s
    user    3m 0.89s
    sys     0m 0.00s
    [root@localhost ~]# uname -a
    Linux localhost 4.15.0-00049-ga3b1e7a-dirty #11 Thu Nov 8 20:30:26 CET 2018 riscv64 GNU/Linux

Conclusion: as seen also in QEMU (also started by Bellard!), RISC-V is a *lot* easier to emulate than x86. If you're building code specifically to run in emulation, use RISC-V: builds faster, smaller code, runs faster.

Note: quite different gcc versions, with x86_64 being 15.2.0, x86 9.3.0, and riscv64 7.3.0.

[1] http://hoult..rg/primes.txt

[+] dmitrygr|11 days ago|reply
MIPS (the arch of which RISCV is mostly a copy) is even easier to emulate, unlike RV it does not scatter immediate bits al over the instruction word, making it easier for an emulator to get immediates. If you need emulated perf, MIPS is the easiest of all
[+] saagarjha|11 days ago|reply
> If you're building code specifically to run in emulation, use RISC-V: builds faster, smaller code, runs faster.

I don't really think this bears out in practice. RISC-V is easy to emulate but this does not make it fast to emulate. Emulation performance is largely dominated by other factors where RISC-V does not uniquely dominate.

[+] camel-cdr|10 days ago|reply
x86 is a lot easier to JIT to Arm or RISC-V though, because it has fewer registers.
[+] vexnull|11 days ago|reply
Interesting to see the gcc version gap between the targets. The x86_64 image shipping gcc 15.2.0 vs 7.3.0 on riscv64 makes the performance comparison less apples-to-apples than it looks - newer gcc versions have significantly better optimization passes, especially for register allocation.
[+] maxloh|11 days ago|reply
Unfortunately, he didn't attach the source code for the 64-bit x86 emulation layer, or the config used to compile the hosted image.

For a more open-source version, check out container2wasm (which supports x86_64, riscv64, and AArch64 architectures): https://github.com/container2wasm/container2wasm

[+] zoobab|11 days ago|reply
"he didn't attach the source code for the 64-bit x86 emulation layer"

It's not open source? If that's the case, it should be in his FAQ.

[+] simonw|11 days ago|reply
The thing I most want to use this (or some other WASM Linux engine) for is running a coding agent against a virtual operating system directly in my browser.

Claude Code / Codex CLI / etc are all great because they know how to drive Bash and other Linux tools.

The browser is probably the best sandbox we have. Being able to run an agent loop against a WebAssembly Linux would be a very cool trick.

I had a play with v86 a few months ago but didn't quite get to the point where I hooked up the agent to it - here's my WIP: https://tools.simonwillison.net/v86 - it has a text input you can use to send commands to the Linux machine, which is pretty much what you'd need to wire in an agent too.

In that demo try running "cat test.lua" and then "lua test.lua".

[+] the_mitsuhiko|11 days ago|reply
> The thing I most want to use this (or some other WASM Linux engine) for is running a coding agent against a virtual operating system directly in my browser.

That exists: https://github.com/container2wasm/container2wasm

Unfortunately I found the performance to be enough of an issue that I did not look much further into it.

[+] andai|11 days ago|reply
I run agents as a separate Linux user. So they can blow up their own home directory, but not mine. I think that's what most people are actually trying to solve with sandboxing.

(I assume this works on Macs too, both being Unixes, roughly speaking :)

[+] westurner|11 days ago|reply
How do TinyEmu and JSLinux compare to linux-wasm?

From "Show HN: Amla Sandbox – WASM bash shell sandbox for AI agents" (2026) https://news.ycombinator.com/item?id=46825119 :

>>> How to run vscode-container-wasm-gcc-example with c2w, with joelseverin/linux-wasm?

>> linux-wasm is apparently faster than c2w

From "Ghostty compiled to WASM with xterm.js API compatibility" https://news.ycombinator.com/item?id=46118267 :

> From joelseverin/linux-wasm: https://github.com/joelseverin/linux-wasm :

>> Hint: Wasm lacks an MMU, meaning that Linux needs to be built in a NOMMU configuration

From https://news.ycombinator.com/item?id=46229385 :

>> There's a pypi:SystemdUnitParser.

[+] hashkitly|11 days ago|reply
Amazing work by Fabrice Bellard as always. The x86_64 support opens up so many possibilities for running modern Linux distributions in the browser.
[+] testifye|11 days ago|reply
I've been using the x86_64 Alpine jslinux browser image in Chrome for the last 4 hours - pulling code down via git, building several large packages from source, editing and altering code, and running their test suites. This VM may be 50 times slower than native, but it is rock solid - worked perfectly and is stable. It's simply remarkable.
[+] lxgr|11 days ago|reply
Is JSLinux still an interpreter, or does it JIT compile these days?

Or are modern JS JITs so good that this is no longer a relevant distinction, i.e. is the performance of a JITted x86 interpreter effectively equivalent to a JITting x86-to-Javascript translator where the result is then itself JIT interpreted?

[+] blackhaz|11 days ago|reply
Sorry for the off-topic, but what a bliss to see Windows 2000 interface. And what an absolute abomination from hell pretty much all the modern UIs are.
[+] stavros|11 days ago|reply
My god that interface feels like home.
[+] shevy-java|11 days ago|reply
Yeah. Microsoft really went downhill UI-wise.
[+] cheema33|11 days ago|reply
Is that even remotely relevant to JSLinux?
[+] wolttam|11 days ago|reply
I can launch this thing and start making arbitrary connections out to port 25 on the internet from some random IP? Hmm.
[+] maxloh|11 days ago|reply
From the "Technical notes" page:

> Access to Internet is possible inside the emulator. It uses the websocket VPN offered by Benjamin Burns (see his blog). The bandwidth is capped to 40 kB/s and at most two connections are allowed per public IP address. Please don't abuse the service.

https://bellard.org/jslinux/tech.html

[+] stjo|11 days ago|reply
I love how nonchalantly demonstrates his custom terminal emulator and javascript engine.
[+] sylware|11 days ago|reply
I am almost sure it was done so carefully that you can extract it from the abominations which are the whatng cartel web engines with a direct to OS abstraction layer that with only some little amount of work.
[+] lasgawe|10 days ago|reply
Didn’t know this was possible! Isn’t this open source? I’d like to see how it works. I assume this runs on top of pure WebAssembly.
[+] petcat|11 days ago|reply
I've always been fascinated by this, but I have never known what it would be useful for. Does anyone know of any practical use cases?
[+] toast0|11 days ago|reply
I use a similar emulator (v86) as a way to share my hobby OS. Approximately zero people, even my friends, are going to boot my hobby OS on real hardware; I did manage to convince some of them to run it in qemu, but it's difficult. A browser environment shows the thing quite well; and easy networking is cool too.

My hobby OS itself is not very useful, but it's fun if you're in the right mood.

[+] shirro|11 days ago|reply
We are a playful species. People enjoy play. If we didn't have to work for a living but still enjoyed food security that is all most of us would do. But we are also a very exploitative species, some more than others. Companies have made billions of dollars on top of Fabrice Bellard's works, qemu, ffmpeg etc.

These companies don't have any imagination. Their management has no vision. They could not create anything new and wonderful if they tried. People like Fabrice do and we are all richer for it. If your asking about the practical use you are likely in the exploitative mindset which is understandable on HN. The hacker/geek mindset enjoys this for what it is.

[+] Towaway69|11 days ago|reply
I guess for the author its learning about how Linux can be ported to the browser. For us, it's more of a nice amusement.

But then again, I've never understood why Buddhist monks create sand mandalas[1] and then let them be blown away (the mandalas not the monks!).

I think one should see it from the authors PoV instead of thinking "what is in it for me". If I were to use this, then to create digital sand mandalas in the browser! ;)

[1]: https://en.wikipedia.org/wiki/Sand_mandala

[+] s-macke|11 days ago|reply
Most such emulators have Internet access on the IP level. Therefore, this is a very cheap way to test anything on the Internet.

    apk add nmap
    nmap your.domain.com
However, the speed is heavily throttled. You can even use ssh and login to your own server.

It can also be used as a very cheap way to provide a complete build environment on a single website, for example to teach C/C++. Or to learn the shell. You don't have to install anything.

[+] postalrat|11 days ago|reply
Some sort of web based archive of applications/etc where you can boot them up in your browser.
[+] varun_ch|11 days ago|reply
Maybe if you’ve got some ancient software that’s missing source code and only runs with X Y and Z conditions, you could continue to offer it on the web and build around it like that? Not sure if that would be practical at all, but could be interesting
[+] redleader55|11 days ago|reply
Agentic workloads create and then run code. You don't want to just run that code in a "normal" environment like a container, or even a very well protected VM. There are other options, ofc - eg. gvisor, crossvm, firecracker, etc, but this one is uncommon enough to have a small number of attackers trying to hack it.
[+] maxloh|11 days ago|reply
My college professor used it to teach us the Linux command line

We have Windows PCs in the classroom.

[+] bvrmn|11 days ago|reply
I bet Fabrice could write JSAndroid which would provide no lag emulation experience.
[+] akomtu|10 days ago|reply
I'm sure he could implement JSWindows that would be faster than the Microsoft's version.
[+] cxplay|11 days ago|reply
There seems to be an issue with DNS. Did I miss something?
[+] westurner|11 days ago|reply
UBY: touchscreen: How to scroll the scrollback
[+] joey5403|11 days ago|reply
how can I install a openclaw in the jslinux.