Where this came from

I enjoy running software on machines that shouldn't run it. I own the machine, after all. And I've always thought it weird you can't run a "real desktop" on an iPad. A few years ago, I painstakingly ported X11 to iOS. The server ran on-device, but you had to connect with a VNC client, and everything was rendered in software with no GPU support. This time the display path is direct.

An X11 server and a GPU-accelerated Wayland compositor now run as native arm64 code and draw straight to the display through Metal. And to be clear, there is no Linux kernel here: no VM or emulator. The apps are GNOME, KDE, GTK, Qt, Wayland, and X11 programs from the Linux desktop world, but every one of them is a native iOS binary. Their windows reach the screen as IOSurfaces, and your touches reach them as X11 and Wayland input.

When I first did the X11 work, I compiled everything by hand, on the device. When I inevitably revisited it, the right move was a proper build system. Thankfully the Procursus folks have since made one.

The reference target is a rootless iPad 7 on iPadOS 17.6.1. Other jailbreakable devices may work, but that is the path I test.

Native mode: Linux apps as Home Screen icons
The iosc desktop
GNOME Shell 46, on the A10
Native mode: switching between apps

What this is

If you are on macOS or Windows, you use the desktop environment Apple or Microsoft gives you, and you never think about it as a separate thing. Linux users do not have that constraint: the desktop is its own piece, and you pick which one you want. A desktop environment is the whole graphical shell of the computer, the windows and the panel and the file manager and the settings. GNOME and KDE are the big two, and behind them sits decades of software: terminals, editors, file managers, media players.

An iPad has a Unix-like OS, an arm64 CPU, and a real GPU. Under the touch layer, iOS is close enough to macOS that a lot of desktop software can be rebuilt for it. Apple does not expose that path, so this project builds the missing pieces.

The stack

Figure 00. The display and input pathapp to A10

iOS only ever talks to xiOS.app. Whether an X server or the Wayland compositor is producing frames underneath is invisible to it, because both hand the app the same kind of output surface.