Releases

What changed, and why. One entry per version, taken from the changelog.

Versions follow semantic versioning. Before 1.0.0 a minor version may break an API — the changelog says when one does.

0.3.0

The local machine now runs a Rust interpreter, and the agent no longer talks in the clear. The rv32ima core exists twice — Swift and Rust — and a differential test boots the same kernel through both, comparing retired instructions and console bytes at every checkpoint, which is what makes preferring the faster one a measurement rather than a taste.

  • The Rust core is the default and what the app ships: about 8% faster over a full boot. WISQ_SWIFT_CORE=1 returns to the Swift one; a missing library stops the build with the command to run, so which interpreter ships never depends on what the build machine happened to have.
  • That differential test found a real defect on the day it was written: the Rust bus answered CLINT mtime from a snapshot taken before the step advanced the clock, so the guest read a clock behind its own machine — by a whole idle period after a wait-for-interrupt jump.
  • The core is proven where it runs: an XCFramework with device, simulator and macOS slices, and a real Linux kernel booted through the C ABI inside a booted iPhone simulator on every commit.
  • The agent speaks TLS. A self-signed certificate on first run, its SHA-256 fingerprint carried in the wisq:// pairing link, pinned by the app — no authority to operate. A malformed fingerprint is an error, never a silent downgrade to plain HTTP.
  • The local console is a real terminal: cursor addressing, erases, scroll region, alternate screen, deferred wrap. Editors, pagers and top now behave instead of smearing.
  • The site is bilingual throughout, with a light/dark/system theme control and a privacy page that can be checked rather than believed.

0.2.0

The local machine got about three times faster: 55 to 163 million guest instructions a second, boot to a login prompt from 0.81 s to 0.27 s, for the same 44.6 million instructions. The semantics did not move — only the cost of running them.

  • The register file moved off a Swift array, which the optimiser was reloading after every opaque call. That alone was 2.7×.
  • Immediates are sign-extended by an arithmetic shift rather than a test-and-OR, removing a branch from the paths that are 85% of a boot.
  • Guest RAM is mapped rather than allocated and cleared: construction went from 33–194 ms to under 0.1 ms, and the app no longer commits 64 MB before the guest has touched a page.
  • The emulation thread declares its quality of service, so the scheduler stops parking an interpreter on an efficiency core.
  • The console became incremental. The old one re-derived the visible text on every arrival — quadratic in the output, 36.7 s of processing for 2 000 lines against 0.22 s now.

0.1.1

A fix for a defect found by downloading the release and running it: the Linux agent was dynamically linked, so it needed libswiftCore.so on the target machine and died on its first line anywhere that had never installed a Swift toolchain.

  • The Linux binary is statically linked and verified under an empty environment in the release job itself, so a regression fails the release rather than the user.
  • The installer runs the downloaded binary before installing it and falls back to a source build if it will not start.

0.1.0

The first release: the VNC client, the local RISC-V machine, the host agent, and the project foundations.

  • A hand-written RFB 3.8 client — handshake, DES authentication, Raw, CopyRect, RRE, Hextile, zlib, ZRLE and Tight with JPEG, over session-lived zlib streams.
  • Continuous updates, server cursor drawn locally, desktop resize, clipboard, and reconnection that never retries an authentication failure.
  • An interpreted rv32ima machine that boots a real Linux 6.1 nommu kernel to a shell.
  • The host agent, boot-before-connect, wisq:// pairing links and Bonjour discovery.
  • A changelog, a release workflow, and CI that boots a real kernel as a test.