Single-tenant · isolation-first Linux · in development
qdistro
A single-tenant Linux workstation that separates work, personal, and throwaway contexts on one seamless desktop, with a userspace that is readable and modifiable at the source level.
openSUSE Tumbleweed · libweston + Wayland · Python/Qt/QML · GPL-3.0
What qdistro is trying to be
The design shorthand is one owner, many silos, dynamic sessions. One human is the sole tenant and policy authority. Silos isolate data and program state — work, personal, dev, client projects, browser profiles. Sessions attach silos and resources while a task is happening, then release them.
-
Goal 1
Tiered isolation, chosen per app
An isolation ladder from a confined SELinux context, through rootless podman containers and separate uids, up to KVM virtual machines. Isolation strength is chosen per app, within admin policy.
-
Goal 2
Seamless windows across every boundary
Containers and VMs do not present as a separate desktop session. Each silo runs a nested Wayland compositor; its windows arrive over
waypipeand land on one desktop, tagged and placed by the admin compositor, with silo identity carried by trusted chrome. Lower tiers ship today; VM windows are experimental. -
Goal 3
Explicit, audited crossings
Clipboard, file transfer, window handoff, device access, and privilege escalation between silos all route through the admin broker.
qsureplacessudowith single-command, zero-cache approval and a full audit trail. -
Goal 4
A userspace modifiable by humans or LLMs
The shell, apps, session manager, and policy are plain Python + Qt + QML — no compile step, no opaque binaries. Infrastructure stays commodity C (libweston, PipeWire, systemd, qemu), used as-is, not rewritten.
-
Goal 5
An overlay on stock Tumbleweed, not a fork
qdistro bootstraps on top of a standard openSUSE Tumbleweed install via one idempotent script. Normal package updates and btrfs/Snapper rollback continue to work; everything qdistro adds is an inspectable script or repo.
The full picture: overview · architecture · threat model · honest feature status.
Trying it today: run it in a VM, test it through CI
qdistro is in active development and changes fast. The supported way to try it is inside a libvirt / virt-manager VM — the full-stack test suites run in disposable libvirt VMs. Nested virtualization must be enabled on the host (the VM-based isolation tiers run VMs inside the VM); note that nested virtualization enlarges the hypervisor attack surface and can be a security risk for the host, so use a development machine, not a host whose isolation you rely on. Bare-metal installs follow the same steps but are currently untested. This is a development preview, not a verified release channel — inputs aren't signed or pinned yet.
# inside a fresh Tumbleweed Minimal/Server VM, as user "admin":
git clone https://codeberg.org/qdistro/qdistro.git
git clone https://codeberg.org/qdistro/qdwin.git
git clone https://codeberg.org/qdistro/qdshell.git
cd qdistro && sudo bash scripts/install/qdistro-bootstrap.sh
To see qdistro working, run the CI GUI tests in a foreground
terminal. The GUI gate boots disposable VMs, drives the real
compositor, shell, locker, and permission flows, and writes a report with
screenshots. Testing this project is agent-driven: the GUI scenarios are
markdown playbooks executed by a coding-agent CLI, configured via
QCI_AGENT_CMD; without one they are recorded as blocked.
ci/bin/qci preflight # check libvirt + host tools
QCI_AGENT_CMD='your-agent-cli {prompt}' ci/bin/qci gui # run in foreground
Gate reference, agent-command templating, and triage workflow: ci/README.md. Found something broken? File an issue.
Where things live
qdistro is a set of small, focused repos rather than one monolith. Architecture and component contracts live in the umbrella repo's doc/ directory — the source of truth this site deliberately does not duplicate.
- qdistroUmbrella — docs, broker, daemons, SDK, admin app, SELinux policy, CI, tests
- qdwinThe Wayland compositor — a libweston shell plugin (mechanism, no policy)
- qdshellThe desktop shell — panels, tray, admin overlays (Noctalia QML fork)
- qdgreeterThe greetd login screen
- qdlockerScreen locker with fingerprint unlock
- qdbrowserIdentity-pinned browser integration + extensions
- qterminatorQt terminal (a port of Terminator)
- qnotebookPyQt6 markdown wiki editor
- qfilemanFile manager with cross-silo send-to