Compiled, not interpreted

Code that runs often stops being interpreted. It becomes WebAssembly, then native code, and the pieces a CPU spends its time on get the most care.

Compiling

Hot code, compiled

A block that runs often is compiled to WebAssembly, sixteen to a module, and the browser’s compiler turns it into native code. Cold code stays in the interpreter.

Loops

Whole loops and calls

A hot loop, and the calls inside it, compile as one region, so it runs start to finish without leaving compiled code.

Memory

Addresses out of the loop

A loop translates its memory addresses once a page, not once an access, and every other access reaches guest RAM through a direct TLB.

Registers

Registers stay put

Hot guest registers live in WebAssembly locals across a block or a loop, where the host keeps them in its own registers.

Flags

Flags only when read

Condition flags are worked out only where something reads them, so a compare and a branch compile to a compare and a branch.

Correctness

Checked against the Interpreter

Every compiled instruction is tested against the Interpreter, and whole boots run in lockstep with it: the same machine, only faster.

The numbers

Measured on an Apple M3, in Node. Details are in the notes at the bottom of the page.

About 4 s

for a cold Alpine Linux boot to its shell.1

About half

of native speed on md5sum, recursive calls and sorting.2

8 cores

each on its own host thread, with a compile thread of its own.

16 GB+

of guest RAM: past one WebAssembly memory, into more, while the guest sees one.3

More machine

Everything the Interpreter boots, with the graphics a desktop wants.

3D graphics

A virgl GPU on its own worker draws with WebGPU, then WebGL2, then software, whichever the host has.

Snapshots, GPU included

Save a running machine, its graphics memory with it, and pick up where it left off.

Browser and Node

The same core runs in a browser tab and in Node, driven through WEMU, QEMU’s own command line and QMP.

Open source. Licensed for business.

Use Just-In-Time freely under the AGPL, or take a commercial license when that doesn’t fit your product.

GNU AGPL v3

Free and open

Use it, study it, change it. If you distribute it or let people use it over a network, share your version’s source under the same license.

Read the license
Commercial license

For your product

Ship Just-In-Time inside a product or service without the AGPL’s obligation to release your source. One license covers both engines.

View pricing

Just need it exact?

The Interpreter is the same machine without the compiler: one instruction at a time, each exactly as Arm defines it.