Version 26.09.0 · a Catbee project · work in progress
A reproducible, verifiable, free Linux-based operating system — assembled from the best of the open-source world and owned end to end.
PengyOS is not finished, and there is nothing to download yet. All three editions build, install from a USB stick and boot — the Desktop is in daily use on real hardware, NVIDIA GPU included. Updates already reach installed machines. What remains is the release pipeline: published install images and docs — until then those sections below are placeholders.
An operating system that is assembled, not derived: every component is chosen on its own merits and justified in writing, the whole system rebuilds from pinned sources, and the result is attested. It keeps Linux and the shared contracts — POSIX, ELF, systemd unit semantics, D-Bus, Wayland, freedesktop — and replaces only what earns replacement.
The open-source world already contains most of what a great system needs. The craft is in choosing, integrating, and occasionally replacing — deliberately, one component at a time.
Defined declaratively and built from source with Buildroot. Same inputs, same build definition, same result — and the full input graph is recorded.
Every image ships a software bill of materials and a signed attestation. Changes are proven by build + boot + behaviour tests. "It works on my machine" is not evidence.
PengyOS is curated and maintained by a continuous human–AI partnership. An agent observes upstream releases and advisories, drafts changes with justifications, builds them reproducibly, and verifies them — but a human signs the security boundary. Release signing, update acceptance and privilege changes never happen without independent verification and a person's sign-off. A system that maintains itself must never be able to silently change its own trust root.
┌──────────────────────────────────────────────┐
│ DESKTOP = Server + graphical stack + apps │ the masterpiece
├──────────────────────────────────────────────┤
│ SERVER = Core + remote-work + services │ headless, comfortable
├──────────────────────────────────────────────┤
│ CORE = the shared, minimal, bootable base│ tiny, builds on it
└──────────────────────────────────────────────┘
(all three share one build engine + one verification layer)
Core is the exact base the other two are defined on — not a cut-down subset. A Desktop
component never contradicts a Core decision; it only adds. Each edition is a Buildroot target with its
own defconfig and board, driven from a single targets.toml.
Three editions — four images, counting Desktop NVIDIA — one build engine, one verification layer. This is where each one stands today.
The shared, minimal, bootable base. Installs, brings up DHCP, runs key-only sshd,
starts one unattended service, and reaches a video console at roughly 224 MB idle RAM.
M2 · Intel N100 · ~224 MB idle
Core plus remote work and services: the comfort CLI set, rootless podman, Python + pip, zsh, git, distrobox, monitoring, backup and a default-deny firewall. Boots headless and installs from its own USB stick.
headless · QEMU-verified
Server plus a complete desktop: the COSMIC session behind a proper login screen, Wi-Fi, Bluetooth, audio, printing and Flatpak with Flathub — Firefox, Chrome, Steam, Discord and VS Code all run. A second image ships NVIDIA's driver for GeForce cards.
COSMIC · Wayland + Xwayland · PipeWire · Vulkan
| Layer | Decision | Why |
|---|---|---|
| Kernel | Linux 7.2, pinned, configured per hardware — not patched | latest stable by policy |
| Boot | GRUB (UEFI), one kernel per slot, chosen through grubenv; Plymouth splash on the Desktop | boring and proven; slot switching without UKIs |
| Init | systemd, kept as the contract (unit semantics, targets) | compatibility over novelty |
| Storage | Read-only ext4 system in A/B slots (root-a + root-b) and a btrfs data partition for everything that is this machine | an update swaps the system, never your files |
| Our code | Rust for system components (installer GUI, desktop pieces), Python for tooling, C upstream | the right tool for each job |
| Provenance | SPDX SBOM per artifact, ed25519-signed releases; measured boot later | trust from verification, not authority |
Applications extend the OS through four lanes, layered by trust: recipes built from source (the default) → upstream artifacts pinned by hash → Flatpak and AppImage sandboxed apps → compatibility guest containers for anything that only exists as a deb or rpm. Proprietary pieces are the exception, not the rule: where hardware needs them (NVIDIA's driver, device firmware) they ship in plain sight, in their own image or package, and are documented — a working machine beats a pure one.
Every edition installs and boots; the release pipeline is what's left.
| Area | State | Detail |
|---|---|---|
| Toolkit | essentially complete | 83+ tested tools under tools/ — build, image, sign, verify, QEMU harness, os-release and more. |
| Core (M2) | boots on metal | Installs, DHCP, key-only SSH, ~224 MB idle. Open: reproducible rebuild and measured boot. |
| Server | QEMU | Builds and boots headless. Next: real hardware. |
| Desktop | daily use | Runs on real hardware with an NVIDIA GPU: login screen, audio, Bluetooth, printing, Flatpak apps and Steam games. Next: COSMIC 1.9, accessibility and input methods, more hardware. |
| Downloads | not ready | No published images yet — see Downloads. |
| Docs | stub | SPEC, use cases and changelog exist in the repository but are not published — see Docs. |
| Updates | working | Signed releases over the air, with automatic fallback — the update feed (testing channel for now). |
The same loop the rest of the fleet already runs — observe, propose, build, verify, and a human at the boundary — applied to an operating system.
Track upstream releases, changelogs and security advisories for the pinned component set, and triage them: security / relevant / ignore. This is the task language models are strongest at — reading a lot, judging relevance, summarizing.
The agent drafts the change — a version bump, a patch, a new component — with a written justification, and files it. It does not apply it.
A reproducible build produces the artifact and its SBOM. An independent witness then runs the boot and behaviour test matrix. The agent's own tests are necessary but not sufficient.
A human approves anything crossing the security boundary. Everything is logged, attested, and fed back into what the system knows about itself.
| Tier | Surface | Who may change it | Mechanism |
|---|---|---|---|
| 0 — Base | Kernel, core libs, agent runtime, the image itself | nobody at runtime | rebuilt → verified → signed → measured; A/B swap; rollback |
| 1 — Agent-mutable | Config files, services, driver config, boot entries | the agent, freely | snapshotted + journaled + attested; always revertible |
| 2 — Critical | Bootloader binaries and keys, crypto, the update trust root | a human signs | small, explicitly enumerated list |
A live fix is the exception that improves the spec: the agent diagnoses, applies a Tier-1 change, and the fix is captured back into the declarative definition — so the same surgery is never needed twice, and reproducibility is preserved because the definition grew.
These are the laws of the project. When in doubt, they decide.
The build and maintenance toolkit is essentially complete: 83 tested tools, each a bounded project with its own suite.
# 0. provision a build host (once, idempotent) sudo scripts/provision-behoserver.sh # 1. build an edition — e.g. Core (M2) cd tools/pengyos-build python3 -m pengyos_build list --targets ../../targets.toml python3 -m pengyos_build build pengyos-core-m2 --targets ../../targets.toml # 2. boot it headless under QEMU/KVM (UEFI) cd ../pengyos-qemu-verify python3 -m pengyos_qemu_verify boot \ ~/build/pengyos/output/pengyos-core-m2/images/pengyos-m2-x86_64.img --uefi
The verified build host is an x86_64 Linux box with about 16 GB of RAM. Targets are declared in
targets.toml.
Nothing to download yet — no images have been published.
When they land, each edition will ship as a single signed image with an SBOM and an attestation alongside it — write it to a USB stick and boot. Until the release pipeline is finished and a build has been attested end to end, this page will stay empty on purpose.
A software bill of materials, a signed attestation, the source hash manifest, and the exact build definition used to produce it — so anyone with the same inputs can rebuild and check the result.
Stubbed for now — the documents exist, but they are not published on the web yet.
The project keeps its durable knowledge in plain text under version control. These are the documents that will be published here once the site is finished:
PengyOS is not published as a public repository yet, so there is no clone link to offer. When the release pipeline is in place, the repository and the site will go up together.
Live at pengyos.catbee.ca/update — on the testing channel while the first releases settle.
Each release is announced in a feed — subscribe in any feed reader for
the release notes. Installed machines read the same feed (sudo pengyos-update apply),
download the new system image for their edition, and check it against PengyOS's signing key before
touching anything.
The new image is written to the spare system slot and tried on the next boot. If it doesn't come up cleanly, the machine falls back to the previous one by itself. Your files, accounts, Wi-Fi and apps live on a separate partition and are never touched.
PengyOS is part of the Catbee family. The other projects in the network — Pengy, BotTalk, MooFile and TheWatcher — are shipping today.