X11 and Wayland on iOS
Desktop Linux apps on a jailbroken iPad
Where this came from
I enjoy running software on machines that shouldn't run it. I own the machine and should be able to run what I want. And I've always thought it weird you can't run a "real desktop" on an iPad. (well, I know the reasons, but I'm not a fan.) 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 its different.
From here on, everything on this site has been written by LLMs with only brief oversight from me.
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.
Both of the big two run here now. GNOME Shell 46 boots on the A10, and KDE Plasma composites on the GPU with its effects turned on, which brings Konsole, Kate, Dolphin and System Settings with it. Ladybird, an independent browser engine, is ported too, so there is a way to open a web page that is not WebKit wearing a different hat.
The stack
For a full desktop, iOS only ever talks to one app: Xios.app. Whether iosc, Mutter or KWin is producing frames underneath is invisible to it, because they all hand the app the same kind of output surface. Native mode is the exception, and the point of it: there each Linux app gets its own Home Screen icon and its own host bundle, so iOS sees several ordinary apps instead of one.