Skip to content

Supported platforms ​

Guests ​

  • x86-64 Linux programs only; 32-bit x86 is out of scope.
  • Statically linked executables (ET_EXEC, and static-pie without an interpreter). Dynamically linked programs (using glibc shared libraries) are not supported yet.

Hosts ​

HostStatus
LinuxSupported; differential tests take their reference here
macOSSupported; the same Linux ELF runs in software
WindowsSupported; the same Linux ELF runs in software
Node.js (worker_threads)Supported (npm package)
Chromium-based browsersSupported (npm package)
FirefoxSupported (npm package)
SafariSupported (npm package); CI tests the real Safari, and WebKit on x86-64 Linux

On macOS and Windows, paludarium does not hand a Linux binary to the host to execute: it handles the instructions and system calls itself. The same ELF therefore runs the same way on every host.

Terminal information (whether a stream is a tty, and the window size) comes from each host in its own way: TCGETS and TIOCGWINSZ on Linux, libc termios on macOS, and the console API (read only) on Windows, converted to the Linux form the guest expects.

Verified versions ​

Before each release, the same code is checked to give the same results on all of these (Testing and verification):

  • Linux, macOS and Windows (GitHub Actions runners)
  • Node.js (the latest release at the time of the check)
  • Chromium, Firefox, and the real Safari (on a macOS runner)
  • WebKit on x86-64 Linux (Playwright's build), whose JavaScriptCore compiles WebAssembly for x86-64 rather than for the Arm Mac

In the browser ​

  • SharedArrayBuffer and module Workers.
  • A cross-origin isolated page (Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp); without it there is no SharedArrayBuffer.
  • Browsers do not allow Atomics.wait on the main thread, so the emulator runs entirely in Workers.

Rust toolchain ​

  • Built and tested with a pinned nightly (the one in rust-toolchain.toml, moved to the latest nightly every week).
  • The crates' MSRV is 1.101, so today's stable Rust cannot build them.
  • The WebAssembly build also uses nightly build-std and atomics.

Released under the Apache-2.0 License.