Working on this
The source is MIT-licensed and public. This page is the orientation: where things live, how a change gets proven on hardware, and the conventions that keep the package set from breaking a device.
Where things live
- x11/wayland
- The compositor, iosc, plus the EGL shim, the Mutter iOS backend, and the small daemons that bridge hardware.
- x11/apps
- The Swift side: Xios.app, the per-window native host, the iosc shell, and the session tooling.
- x11/ports and x11/linux-build
- Everything cross-compiled from upstream source: patch series per port, recipes, and the build drivers that run them in Docker.
- x11/packages
- Packages we wrote ourselves, including the flavor metas.
- x11/docs
- Plans, per-subsystem handoff notes, and device snapshots. Most of this site is downstream of those documents.
- bin
- Repo generation, the publish pipeline and its gates.
Proving it on hardware
Nothing here is really done until it has run on an iPad. A cross-compile that links is not evidence, a package that installs is not evidence, and a screenshot of a desktop that might be a stale frame is worse than no evidence. So there is a harness for it: xios-device wraps the SSH details and the on-device helpers, and writes what it collects into a timestamped evidence directory.
shot is the interesting one, because capturing a screen on a device like this can lie to you in several ways. It tries grim against the Wayland output first, falls back to a screencopy client of our own, and can fall back again to a host-side capture over the pairing connection. It also runs a pixel probe and counts what is actually non-black, so you can measure whether the desktop rendered instead of squinting at it, and collects the status files and logs next to the image.
There is a matching pair of smoke drivers for app waves and for the KDE session, which launch a client, wait, capture, and diagnose the failure if it never mapped.
Device reports in this project are expected to distinguish built, installed, launched and verified. "Should work" is not one of those states, and the difference between them is most of what the handoff notes in x11/docs are for.
Conventions to pick up early
- +iosN versions
- Anything rebuilt from upstream carries a marker on the Debian version, like
6.1.5+ios27. Packages that are ours carry no marker. Reading a version tells you which kind you are looking at, and how many times we have had to touch it. - Patch series, not sed
- Upstream changes belong in a quilt-style series next to the port. Procedural edits inside build scripts exist, but they are debt, and they are tracked as debt.
- Sign for the capability
- A binary that touches the GPU or imports another process's IOSurface needs the matching entitlements at signing time. See the GPU path.
- Never shadow the bootstrap
- Publishing a package that replaces one Procursus already provides is how this project once bricked apt and sshd on its own test device. The publish step now refuses that unless the replacement is a genuine drop-in superset with a written waiver.
- Rootless only
- Everything bakes
/var/jb. A rootful target is designed and partly scaffolded, but nothing rootful is built or published, and the converted packages refuse to produce one until a rootful server has been smoke-tested on hardware.
Filing something useful
Issues go to GitHub. The details that make a report actionable here are the device and iOS version, the jailbreak, the flavor and package versions, whether the screen was awake, and the compositor and session logs from /var/jb/tmp. If you can run the harness, xios-device collect gathers most of that for you.
Glossary
Names this project invented, which appear in logs, package lists and everywhere on this site.
- iosc
- this project's clean-room Wayland compositor, which composites into the output IOSurface
- ioscd
- the root daemon that starts, switches and supervises desktop sessions
- xios-session
- the command that launches a desktop flavor and tears the previous one down
- xios-device
- the host-side harness that drives the iPad over SSH and collects evidence
- display slot
- a named desktop with its own Wayland socket, config and status file
- iosc_iosurface
- the private Wayland protocol that passes IOSurfaces between clients and the compositor
- rootless
- a jailbreak layout where everything installs under /var/jb instead of /
- rootful
- the older jailbreak layout that writes directly into the system root
- Procursus
- the macOS-hosted bootstrap and cross-compile system this build stands on
- shadowing
- publishing a package that replaces one the bootstrap already provides
- MinimumOSVersion
- the iOS floor stamped into a binary, which the store uses to hide it from older devices