13 Fishes in the Sea: The TunaOS Variant Landscape
For too long, the Linux desktop has been held back by fragmentation. Hundreds of distros that are 95% the same packages with 5% different defaults β and picking one felt like a permanent, load-bearing architecture decision.
TunaOS rejects that. Today we ship 13 variants spanning 5 package managers and every major Linux family, all producing a completely consistent desktop experience. The proof is in the matrix: when you can switch base OS underneath the same desktop without changing a thing, the distro stops being a decision and becomes a dial.
The Image Factoryβ
TunaOS is not a distribution. It's an image factory. The inputs are simple data:
base OS + desktop + kernel + drivers = bootable image
The output is an OCI container image you can bootc switch to atomically, with clean rollback. Want a different desktop on the same base? Switch. Want a performance kernel? Switch. The matrix is your menu:
# Same base, different desktop
sudo bootc switch ghcr.io/tuna-os/marlin:kde
sudo bootc switch ghcr.io/tuna-os/marlin:gnome
# Same desktop, different kernel
sudo bootc switch ghcr.io/tuna-os/marlin:kde-hwe
bootc switch works within the same storage backend β both source and target images must use either ComposeFS or OSTree. Cross-backend migration (e.g. OSTree β ComposeFS) requires bootc-migrate-composefs [alpha].
Cross-family migration (e.g. AlmaLinux β Arch in-place) is also on the roadmap. Even same-family switching alone makes the base OS interchangeable in a way the traditional distro model never allowed.
The stack underneath is cloud-native: bootc, CI/CD automation, and Podman. By treating operating systems like container deployments, the desktop catches up to workflows the server side has had for years.
The Variantsβ
Every TunaOS variant is named after a fish. There are 13:
| Variant | Base Distribution | Status |
|---|---|---|
| π Yellowfin | Production | |
| π Albacore | Production | |
| π£ Skipjack | Production | |
| π Redfin | Local-build | |
| π£ Bonito | Production | |
| π Bonito Rawhide | Production | |
| π Grouper | Experimental | |
| π‘ Flounder | Production | |
| β’οΈ Flounder Sid | Production | |
| π Marlin | Production | |
| π Wahoo | Experimental | |
| π¦ Sailfin | Production | |
| π§ Guppy | Production |
Each variant ships 5 desktops: GNOME,
KDE Plasma,
COSMIC,
Niri +
DMS, and
XFCE (Wayland). Custom kernels or NVIDIA drivers layer on top of any of them.
How We Got Hereβ
A week ago, adding a new base OS meant writing hundreds of lines of shell scripts. Today it means three things:
- A Containerfile that bootcifies the stock container image β adapted from bootcrew's base images
- A package manager manifest (
pacman:,apt:, etc.) defining the desktop components for that OS - An entry in
build-config.ymlβ variant name, base image, target platforms
That's it. The CI pipeline handles the rest: container images and bootable ISOs, automatically. No per-distro bash scripts. No per-DE-per-distro combinatorial explosion. The factory just runs.
The Desktopsβ
Every variant ships the same five desktop environments, defined as YAML manifests with per-package-manager package lists. Two are worth highlighting for pushing the Wayland envelope.
Niri +
DMSβ
Niri is a scrollable-tiling Wayland compositor β windows tile horizontally on an infinite ribbon you scroll through, rather than stacking in workspaces. It's the most unusual DE in the lineup and the one that most purely commits to Wayland's protocol model.
TunaOS pairs Niri with DMS (DankMaterialShell), a desktop shell that layers greeter integration, a CLI control panel, and application launching on top of Niri. The full stack is greetd (display manager) β Niri (compositor) β DMS (shell). DMS is still early-stage but gives Niri a cohesive desktop experience beyond bare windows.
TunaOS also maintains Zirconium Hawaii β a Niri desktop built entirely from source on freedesktop-sdk using BuildStream. Where the variants layer on top of existing distributions, Zirconium builds the entire stack from source, 100% reproducible. Think of it as "GNOME OS, but Niri."
XFCE (Wayland)β
XFCE 4.20 introduced experimental Wayland support via its new compositor xfwl4, replacing the X11-era xfwm4. While XFCE's Wayland session is still maturing, it already works well enough for daily driving on Fedora and EL10 β TunaOS ships the optional xfce4-wayland package and defaults to GDM as the display manager to ensure the Wayland session is discoverable. Think of it as "XFCE, but with tear-free rendering and per-monitor refresh rates."
The other three desktops β GNOME,
KDE Plasma, and
COSMIC β are Wayland-first by default and round out the lineup with more mature, full-featured environments. Each has a sibling "distroless" project in the TunaOS family: Project Bluefin for GNOME, Aurora for KDE Plasma, and Zirconium for Niri β all built from source on freedesktop-sdk with BuildStream.
What's Nextβ
- Build validation β getting CI green across all 13 variants on all platforms
- More desktops β Hyprland, Sway, and Budgie are one manifest file away
- Cross-backend migration β
bootc-migrate-composefs[alpha]handles OSTree β ComposeFS in-place; cross-family migration (e.g. AlmaLinux β Arch) up next - Community manifests β let anyone contribute a desktop definition without touching build scripts
Creditsβ
This architecture stands on the work of these projects:
- bootcrew β Reference bootc implementations for Arch, Gentoo, openSUSE, and Debian
- jumpvi / bootc-shindig β bootc-deb packaging for Ubuntu and Debian
- Universal Blue & Project Bluefin β Pioneering the bootc desktop model at scale
- bootc β The engine that makes all of this possible
The distro is no longer a decision. It's a dial. Pick your fish.
