Managed Linux workstations, built like infrastructure.
DeskOS compiles a workstation from text. You describe the machine (applications, desktop settings, branding, update policy) in YAML resources, and DeskOS produces a bootable Linux image.
DeskOS is not a distribution you consume. The published CentOS Stream 10 image exists so you can try it today. The product is your own golden image, built from your resources, installed with an ISO you make yourself. Two template repositories do that with a fork and one workflow.
A workstation is one file:
apiVersion: core.deskos.org/v1alpha1
kind: Workstation
metadata:
name: example-devops-centos-stream-10
spec:
platformRef: centos-stream-10
profiles: [deskos-core, deskos-gnome, example-organization, example-devops]Profiles sit at fixed layers: foundation, organization, role, workstation.
A higher layer overrides a lower one on purpose, never because of file order. Sets
union, keyed definitions must agree, and a scalar takes the highest layer. The
resulting plan records where every value came from.
Start from a template, not from our image:
| Template | What it is |
|---|---|
deskos-template-cs10 |
Use this template, edit four YAML files, and one workflow builds your image on a GitHub-hosted runner and pushes it to ghcr.io. The package starts private; one setting makes it public. |
deskos-template-rhel10 |
The same for RHEL 10, on your entitled RHEL runner, into your private registry. Fork it privately. |
Both templates stop at the container image: you pull it and build the ISO with
bootc-image-builder, because where an ISO lives and who signs it are your
decisions. Installing DeskOS
has the full command.
If you prefer to run the compiler here, the same three commands work:
./bin/deskosctl validate ./examples/centos-stream-10
./bin/deskosctl render ./examples/centos-stream-10 \
--workstation example-centos-stream-10 --output ./dist/centos
sudo podman build -t localhost/deskos-centos:test ./dist/centosdeskosctl is a single binary from
Releases, with no Go
toolchain needed. Every resource kind, with an example, is in
resources.md.
For an evaluation, not for a fleet. The image is
quay.io/deskos/deskos-core-centos-stream-10. On a machine that already runs
bootc:
sudo bootc switch quay.io/deskos/deskos-core-centos-stream-10:stable
sudo rebootTo install onto a disk, turn the same image into a QCOW2 or an ISO and install it: Installing DeskOS has both commands, complete.
There is also a preview installer ISO at https://download.deskos.org/. Check its
SHA256SUMS before booting it.
Every weekly build runs the same sequence, and publishes nothing unless all of it passes:
| Check | What it proves | Where |
|---|---|---|
| Compile and render | the same resources produce the same plan and build context | checks.yml |
| Image build and lint | the image builds from a pinned base and passes bootc container lint |
image-publish.yml |
| Boot | QEMU boots the disk to a graphical screen and shuts down | tests/vm/bootcheck.py |
| Session | every dconf default, extension, favorite, wallpaper and installed binary matches the plan; the desktop exposes its applications through AT-SPI and opens one | tests/vm/sessioncheck.py |
| First boot | the GNOME Initial Setup wizard is the session that comes up, and no account exists yet | tests/vm/firstbootcheck.py |
| Update and rollback | a machine moves A to B and back, including a candidate that cannot boot | lifecycle-test.yml |
| Domain login | a throwaway FreeIPA realm and a Samba AD domain, joined at first boot, with a session as the directory user | identity-freeipa.yml |
| Supply chain | installed SBOM, CVE scan, keyless signature and provenance on the digest | supply-chain.md |
The results of each published digest are in evidence.deskos.org, keyed by
digest, and summarised at deskos.org/evidence.
| Platform | Today |
|---|---|
| CentOS Stream 10 | published image, installer ISO, and the checks above on every weekly build |
| RHEL 10 | composes and renders here; the entitled build runs in the organization that owns the subscription, and is never published |
| AlmaLinux 10, Fedora | example platforms: they compose, render and boot weekly, and publish nothing |
The full matrix, with what is and is not verified on each platform, is platforms.md.
- Not a distribution with editions. Organizations compose their own workstations from Core, their baseline and their roles.
- Not configuration management. DeskOS owns the image, not the running machine. Ansible, Satellite, MDM and EDR keep managing endpoints.
- Not a developer environment manager. Personal tooling stays outside the managed baseline.
- RHEL images are never published. Organizations with a subscription build them privately; the EULA forbids redistribution.
| Install a machine | install.md |
| Operate one | operations.md, recovery.md |
| Fix a machine | troubleshooting.md |
| Choose a platform | platforms.md |
| Understand the model | architecture.md, runtime.md |
| Write resources | resources.md |
| Audit the supply chain | supply-chain.md |
| Contribute | CONTRIBUTING.md, development.md |
| What is next | roadmap.md, ADRs |
Code: Apache License 2.0. DeskOS artwork (resources/assets/deskos/,
docs/images/): CC BY-SA 4.0, see
PROVENANCE.md.