JSLinux - Technical Notes
This emulator has a long history. In 2011 I wrote the initial
Linux. I reused parts of another of my emulators
(QEMU) for the x86 helpers and the
After some time (2015), I modified it to use
it is faster with the browsers supporting it.
In 2016, after having
written riscvemu, a
RISC-V emulator, I decided to make
using emscripten. I
added a VirtIO 9P
filesystem inspired by the one
by Sebastian Macke so that it is easier to use remote filesystems
and to import or export files.
Then I found interesting to reuse the VirtIO devices for the x86
JS emulator, so I converted the JSLinux asm.js code to C and
! With a careful tuning, the new version is now faster than the
hand-coded asm.js version.
The next step was to run another operating system than Linux, for
example Windows NT. A first release of this emulator ran Windows
NT with QEMU inside the emulated Linux system. It
was still usable because the x86 emulator supports an x86
virtualization extension (AMD SVM) used by QEMU.
The current version of JSLinux runs Windows NT by emulating the
few missing PC devices (PS/2 keyboard and mouse, IDE disk, dummy VGA).
A x86 CPU with the following features is emulated:
- Pentium class CPU
- x87 with bit exact 80 bit floating point numbers
- PAE support
- CMOV instructions
- AMD Virtual Machine extensions (SVM) with Nested Page Table support
- RDPMC support to read the instruction count
- No MMX/SSE/AVX
- No segment limit and right checks when accessing memory
- No single-stepping
- No debug support (DRx registers)
- 8259 Programmble Interrupt Controller
- 8254 Programmble Interrupt Timer
- 16450 UART (only used to debug)
- Real Time Clock
- PCI bus
- VirtIO console
- VirtIO 9P filesystem
- VirtIO network
- VirtIO block device
- VirtIO input
- Simple framebuffer
- IDE controller (optional)
- PS/2 keyboard and mouse (optional)
- Dummy VGA display (optional)
On a typical desktop PC (2017) with a Firefox browser, the
emulator runs about 100 MIPS. Detailed benchmarks are possible
with the integrated
It is an improved version of the original JSLinux one. It has a
scrollbar and supports URL highlighting.
It uses the Buildroot
embedded distribution. Custom packages are added for vfsync,
qemacs, riscvemu, x86emu, tcc, calc. Optional X Window support is
What's the use ?
enough to do complicated things. Real use could be:
technologies (asm.js, WASM).
- Learning to use command line Unix tools without leaving the browser.
- Secure file access within the browser (vfsync).
- Running old PC software.
Several other PC or Linux emulators are available. In particular:
- jor1k: OpenRISC OR1K CPU emulator.
- v86: PC emulator.
- angel: RISC-V CPU emulator.