Skip to content

Releases: OthmaneBlial/universe

UNIVERSE v0.4.0 — Node.js and Go on your Mac, unchanged

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 13 Oct 03:55

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 linux

New 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 --jit went 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).
  • --syscalls traces 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.sh passes, 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 --node alone 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.

Website · Node.js and Go · Alpine apps and GCC · CPython

UNIVERSE v0.3.0 — Linux Python, git, vim and htop in your Mac terminal

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 13 Oct 00:42

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 -i

New applications (all unchanged downloads with pinned SHA-256s)

  • CPython 3.13.16 (python-build-standalone, musl): json, re, sqlite3, threads, Unicode files, subprocess pipelines 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/git names the sysroot's file, and a working directory outside it starts the guest at /, as under chroot. --unlimited lifts 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.
  • --syscalls traces show guest path arguments; scripts/demo.py records real terminal sessions as animated SVGs.

Validation (Apple M2, macOS 26.6, Zig 0.16.0, all local; GitHub Actions stays disabled)

  • ./scripts/check.sh passes, 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.py download 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.

Website · CPython · git, vim, htop, Lua · Compatibility

UNIVERSE v0.2.2 — a guest-owned Linux system view

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 12 Oct 19:36

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/mounts and guest-backed /proc/meminfo: totals follow the configured guest memory limit; caches and swap are zero, not host values.
  • A read-only guest /proc tree built from the runtime's own process table: PID, UID/GID, command line, state and bounded accounting come from guest state. BusyBox ps passes 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.sh passes: 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.

Website · Compatibility · Roadmap

UNIVERSE v0.2.1 — long GNU listings on Mac

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 02 Oct 08:03

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.

Website · Compatibility · Validation

UNIVERSE v0.2.0 — unchanged apps, one runtime

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 02 Oct 07:13

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-linux

The 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

Choose a tag to compare

@OthmaneBlial OthmaneBlial released this 30 Sep 17:29

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.