Repository navigation
Releases: OthmaneBlial/universe
Release list
UNIVERSE v0.4.0 — Node.js and Go on your Mac, unchanged
UNIVERSE v0.4.0 runs unchanged Node.js 22 and Go programs on an ARM64 Mac, alongside Linux's own GCC, bash, Perl, Ruby, git, vim and htop. Every x86-64 instruction is executed by UNIVERSE itself, including the machine code V8 generates at run time. No QEMU, Rosetta or VM.
python3 scripts/alpine.py --node
./bin/universe --unlimited --allow-files --sysroot artifacts/alpine-x86_64/sysroot \
/usr/bin/node -e 'console.log(6 * 7, process.arch, process.platform)'
# 42 x64 linuxNew applications (unchanged downloads with pinned SHA-256s)
- Node.js 22.23 (Alpine): fs, crypto, zlib, BigInt, timers, promises, exit codes and uncaught errors.
- fzf 0.74.5, a static Go binary: its rankings match the official macOS arm64 build byte for byte.
- GCC 14.2 (
scripts/alpine.py --gcc): gcc, cc1, as and ld build C programs that then run under UNIVERSE; both engines emit byte-identical executables. - bash 5.2, Perl 5.40, Ruby 3.4 with threads, SQLite 3.49, jq, make, nano, tree and file.
Runtime
- Lazily backed guest memory: owned mappings are anonymous host pages committed on touch. PROT_NONE reservations do not count toward the 256 MiB guest limit, splits share refcounted host mappings instead of copying, and fork copies only written regions. This admits V8's multi-gigabyte reservations and Go's 512 MiB arena.
- Linux ABI: epoll, eventfd, futex requeue, posix_spawn's vfork-style clone, tkill/tgkill, madvise (with real MADV_DONTNEED zeroing), getrusage, getpgid/getsid/setpgid, faccessat2, chmod/link/symlink families, FIONBIO, F_SETFL on host descriptors, more clocks, io_uring probes, and large reads and writes as short transfers.
- x86-64: RCL/RCR and JRCXZ/JECXZ.
- Speed: code caches now survive memory mappings and process switches. GCC under
--jitwent from 24.4 s to 7.2 s, and JIT code memory is packed into W^X chunks (256 KiB instead of ~25 MB for that compile). --syscallstraces show guest paths and, in multi-threaded guests, the calling thread.
Validation (Apple M2, macOS 26.6, Zig 0.16.0, all local; GitHub Actions stays disabled)
./scripts/check.shpasses, including 238/238 Zig tests, the x87/SSE oracles in both engines, site checks, 10,000 corpus mutations and 30,000 decoder cases.- Downloaded-app suites pass 589/589 workflows across interpreter and JIT: 350 static Linux (now including fzf), 34 Windows 7-Zip, 24 Debian Hello, 94 Debian coreutils, 10 CPython, 32 git, 12 vim/htop/Lua, 7 GCC, 20 bash/Perl/Ruby/SQLite/jq/make/tree/file and 6 Node.js.
- Fresh extraction of this archive passes 16/16 consumer checks: the version, six Hello guests in both engines, and fresh downloads running Alpine's shell, git, Lua, Node.js and fzf. (This check caught, before release, that
--nodealone was missing its C++ libraries.)
Limits: no networking or GUI; Node needs about 8 seconds to start (V8's generated code is interpreted, not translated); terminal job control is off; epoll is level-triggered; UNIVERSE is not a security sandbox (--allow-files grants host-user file access). Downloaded third-party apps and libraries are not bundled.
UNIVERSE v0.3.0 — Linux Python, git, vim and htop in your Mac terminal
UNIVERSE v0.3.0 runs real, unchanged Linux software in your Mac terminal: Alpine Linux's own x86-64 shell, git, vim, htop and Lua, and the official CPython 3.13 build with its interactive REPL. UNIVERSE executes every x86-64 instruction itself; no QEMU, Rosetta or VM.
python3 scripts/alpine.py # checksum-pinned Alpine 3.22.6 packages
./bin/universe --unlimited --allow-files --env TERM=xterm-256color \
--sysroot artifacts/alpine-x86_64/sysroot /bin/sh -iNew applications (all unchanged downloads with pinned SHA-256s)
- CPython 3.13.16 (python-build-standalone, musl): json, re, sqlite3, threads, Unicode files,
subprocesspipelines into BusyBox, and the interactive REPL. - git 2.49.1: init, add, commit, diff, log, branch, switch. Every object ID matches an independent SHA-1 oracle; the first commit also matches Apple's native git.
- Full-screen vim 9.1 and htop 3.4.1 on a real terminal; Lua 5.4; an interactive Alpine shell.
Runtime
- One-command runs: with
--sysroot,/usr/bin/gitnames the sysroot's file, and a working directory outside it starts the guest at/, as under chroot.--unlimitedlifts the default 10M-instruction / 10 s limits. - chroot-style symlink resolution inside sysroots;
argv[0]is the guest path. - Linux ABI: mremap, membarrier, vfork, chdir/fchdir (per process), chmod family, link/symlink, setsid, getrlimit, setfsuid/setfsgid, capget/capset, select/pselect6/ppoll, termios and window-size ioctls on real terminals, /dev/random and /dev/urandom, and a guest-owned /proc/stat, uptime, loadavg, statm and task view. Files owned by the host user appear owned by the guest user 1000. epoll and POSIX timers return ENOSYS.
- Speed: CPython's 132M-instruction sum benchmark went from a 37.7 s to an 8.1 s median (4.6×) on Apple M2, via a decoded-instruction cache, region hints, memory fast paths, by-reference CPU state and batched scheduler checks. The JIT no longer re-decodes uncompilable code: x86-64 222 → 88 ms, AArch64 123 → 57 ms, RISC-V64 44 → 21 ms on the microbenchmark.
--syscallstraces show guest path arguments;scripts/demo.pyrecords real terminal sessions as animated SVGs.
Validation (Apple M2, macOS 26.6, Zig 0.16.0, all local; GitHub Actions stays disabled)
./scripts/check.shpasses, including 231/231 Zig tests, x87/SSE oracles in both engines, site checks, 10,000 corpus mutations and 30,000 decoder cases.- Downloaded-app suites pass 540/540 workflows across interpreter and JIT: 334 static Linux, 34 Windows 7-Zip, 24 Debian Hello, 94 Debian coreutils, 10 CPython, 32 git and 12 vim/htop/Lua.
- Fresh extraction of this archive passes 14/14 consumer checks: the version, six Linux/Windows/Mach-O Hello guests in both engines, and a fresh
scripts/alpine.pydownload running Alpine's shell, git and Lua.
Limits: no networking, no GUI, roughly 16 million guest instructions per second interpreted, terminal job control is off, and UNIVERSE is not a security sandbox (--allow-files grants host-user file access). Downloaded third-party apps and libraries are not bundled.
UNIVERSE v0.2.2 — a guest-owned Linux system view
UNIVERSE v0.2.2 lets unchanged BusyBox inspect a guest-owned Linux system view on an ARM64 Mac: mount, df, free and ps now run without exposing host mounts, memory or processes.
- Synthetic
/proc/mountsand guest-backed/proc/meminfo: totals follow the configured guest memory limit; caches and swap are zero, not host values. - A read-only guest
/proctree built from the runtime's own process table: PID, UID/GID, command line, state and bounded accounting come from guest state. BusyBoxpspasses in an empty sysroot with no file grant. - A measurable roadmap toward near-100% practical compatibility (a frozen app-workflow catalog with per-category thresholds), replacing vague feature lists.
Validation on Apple M2 / macOS 26.6 ARM64 with Zig 0.16.0, all local (GitHub Actions remains disabled):
./scripts/check.shpasses: 225/225 Zig tests, source-guest and platform/API checks, the 358,129-query x87 arithmetic oracle in both engines, site validation, 10,000 corpus mutations and 30,000 decoder cases.- The unchanged downloaded-app suites pass 486/486 workflows across interpreter and JIT: 334 static Linux (BusyBox, jq, ripgrep, fd, 7-Zip), 34 Windows 7-Zip, 24 Debian Hello and 94 Debian coreutils.
- Fresh extraction of the macOS ARM64 archive passes 13/13 consumer checks: the version and six Linux/Windows/Mach-O Hello guests in both engines. Downloaded third-party apps and libraries are not bundled.
Verify the archive with SHA256SUMS. Compatibility remains experimental; Linux-host execution, GUI apps, networking, full OS/ISA coverage and a security sandbox are not claimed.
UNIVERSE v0.2.1 — long GNU listings on Mac
UNIVERSE v0.2.1 lets unchanged Debian GNU ls -l inspect granted Linux files on an ARM64 Mac. It adds the read-only Linux llistxattr syscall used by the original coreutils binary. On macOS, only native user.* attributes are exposed; other extended-attribute calls and ACL translation remain unsupported.
- x86-64 syscall 195 and AArch64/RISC-V64 generic syscall 12 share the existing file grant and sysroot checks.
- The unchanged Debian coreutils suite now passes 94 workflows (47 per engine), including an exact long listing. The total pinned-app suite passes 474 workflows across both engines.
- On Apple M2/macOS 26.6 ARM64 with Zig 0.16.0, the complete local check passes 222 Zig tests, source-guest and platform/API checks, site validation, 10,000 corpus mutations and 30,000 decoder cases. Linux GNU x86-64/AArch64 ReleaseSafe cross-builds also pass. GitHub Actions remains disabled.
- The macOS ARM64 archive contains the runtime, source, documentation, local check scripts and six source-built Linux/Windows/macOS Hello guests. Fresh extraction passes 13/13 version and exact-output checks across interpreter/JIT. Downloaded third-party apps and libraries are not bundled.
Verify the archive using SHA256SUMS. Compatibility remains experimental; Linux-host execution, GUI apps, networking, full OS/ISA coverage and a security sandbox are not claimed.
UNIVERSE v0.2.0 — unchanged apps, one runtime
UNIVERSE v0.2.0 runs unchanged downloaded Linux and Windows command-line applications on an ARM64 Mac through its own CPU engine and OS compatibility layers.
- Real applications: jq, ripgrep, fd, BusyBox, Linux/Windows 7-Zip, Debian GNU Hello and ten GNU coreutils. Dynamic glibc apps use their original loader and shared libraries.
- Linux: guest threads/TLS, blocking pipes, fork/wait/exec, standard signals, selected shell pipelines/background jobs, checked file metadata and filesystem statistics.
- Windows: archive/hash/error workflows, guest DLLs/TLS, Unicode/file APIs, shared mapped views and bounded C++ cleanup/catch execution.
- CPU/runtime: expanded x86 integer, SSE/MMX and x87 subsets, conservative virtual CPU features, optional ARM64 JIT, checked memory, tracing and debugger.
- Documentation: a clean README with a new SVG header, reproducible app commands and updated compatibility boundaries.
Validated locally on Apple M2 / macOS 26.6 ARM64 with Zig 0.16.0, ReleaseSafe: 221 Zig tests and 472 downloaded-app checks across interpreter/JIT, plus the full source-guest, CPU/API-oracle and bounded mutation suite. GitHub Actions remains disabled.
Download the macOS ARM64 archive and SHA256SUMS, verify the checksum, then try the included source-built guest:
shasum -a 256 -c SHA256SUMS
tar -xzf universe-v0.2.0-macos-arm64.tar.gz
cd universe-v0.2.0-macos-arm64
./bin/universe --version
./bin/universe guests/hello-x86_64-linux
./bin/universe --jit guests/hello-x86_64-linuxThe bundle includes the native runtime, six small Hello guests, source, documentation and local check scripts. Downloaded third-party applications/libraries are not bundled. Linux hosts are cross-compiled only; no Linux binary assets are shipped.
Compatibility remains experimental. GUI apps, networking, broad OS/ISA compatibility and a security sandbox are not provided. Host file access is opt-in and includes writes with the host user's permissions.
Website · Exact compatibility · Validation evidence
Apache-2.0; third-party notices are included.
UNIVERSE v0.1.0 — real foreign binary execution
UNIVERSE executes real foreign machine code through its own Zig loaders, CPU decoders, UIR, interpreter and OS compatibility layers.
- Static Linux ELF64: tested x86-64, RV64IM and AArch64 guest fixtures on macOS ARM64; static x86-64 musl Hello World.
- Optional checksum-pinned BusyBox 1.37.0 minimal echo/cat/ls build, with interpreter and JIT regressions. BusyBox is not bundled.
- Windows x86-64 PE32+ console fixtures: Hello World, standard input/output and virtual allocation/free through a small kernel32 API layer.
- Native ARM64 register-block JIT with W^X pages and code invalidation; interpreter fallback, debugger, tracing, IR disassembly and statistics.
- Mach-O inspection only. Dynamic linking, signals, threads, a BusyBox shell, general Windows applications and complete CPU ISAs remain unsupported. This is not a security sandbox.
The attached macOS ARM64 bundle includes bin/universe, source, fixtures, documentation and local check scripts. Built and tested on Apple M2 / macOS 26.6 with Zig 0.16.0, ReleaseSafe. Run ./bin/universe --version; rebuild guests using python3 scripts/fixtures.py. Linux x86-64 and ARM64 cross-builds passed, but Linux execution was not verified; no Linux binary assets are shipped.
Validation: clean source reconstruction; 30/30 Zig tests; core cross-architecture, PE, musl, debugger and JIT checks; fresh BusyBox source build and regressions; 50,000 corpus mutations and 150,000 random decoder cases. Deterministic mutation testing is not a coverage-guided fuzz campaign. GitHub Actions remains disabled; run ./scripts/check.sh locally.
Exact compatibility · Validation evidence · Reproducible benchmarks
Apache-2.0; included Zig standard-library MIT notice. Verify the archive against SHA256SUMS.