Pengy, the PengyOS penguin

PengyOS

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.

⏳ Downloads coming soon What is it? ↓
COMING SOON

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.

# What is PengyOS?

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.

🧱 Assembled, not invented

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.

🔁 Reproducible by construction

Defined declaratively and built from source with Buildroot. Same inputs, same build definition, same result — and the full input graph is recorded.

🧾 Verifiable by construction

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.

The genuinely new part is the process

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.

One base, three additive layers

        ┌──────────────────────────────────────────────┐
        │  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.

# The Three Editions

Three editions — four images, counting Desktop NVIDIA — one build engine, one verification layer. This is where each one stands today.

Core builds & boots

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

Server QEMU

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

Desktop on metal

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

What's inside the base

LayerDecisionWhy
KernelLinux 7.2, pinned, configured per hardware — not patchedlatest stable by policy
BootGRUB (UEFI), one kernel per slot, chosen through grubenv; Plymouth splash on the Desktopboring and proven; slot switching without UKIs
Initsystemd, kept as the contract (unit semantics, targets)compatibility over novelty
StorageRead-only ext4 system in A/B slots (root-a + root-b) and a btrfs data partition for everything that is this machinean update swaps the system, never your files
Our codeRust for system components (installer GUI, desktop pieces), Python for tooling, C upstreamthe right tool for each job
ProvenanceSPDX SBOM per artifact, ed25519-signed releases; measured boot latertrust 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.

# Status & What's Next

Every edition installs and boots; the release pipeline is what's left.

AreaStateDetail
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).

# How It Maintains Itself

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.

👁 Observe → ✍ Propose → 🔨 Build → 🧪 Verify → 🖊 Ratify (human)

👁 Observe

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.

✍ Propose

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.

🔨 Build & 🧪 Verify

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.

🖊 Ratify

A human approves anything crossing the security boundary. Everything is logged, attested, and fed back into what the system knows about itself.

Immutable at the base, mutable at the surface

TierSurfaceWho may change itMechanism
0 — BaseKernel, core libs, agent runtime, the image itselfnobody at runtimerebuilt → verified → signed → measured; A/B swap; rollback
1 — Agent-mutableConfig files, services, driver config, boot entriesthe agent, freelysnapshotted + journaled + attested; always revertible
2 — CriticalBootloader binaries and keys, crypto, the update trust roota human signssmall, 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.

# Principles

These are the laws of the project. When in doubt, they decide.

1Free by default, useful always
Free software first; where hardware needs a proprietary piece, it ships openly and every exception is documented.
2Assemble, don't derive
Compatible with the wider Linux world, derived from no distro.
3Compatibility is a contract
A component may be replaced; its public contract may not.
4Reproducible by construction
Declarative, built from source, with the full input graph recorded.
5Verifiable by construction
SBOM + signed attestation; build, boot and behaviour tests; append-only log.
6Contribute back by default
Upstreamable patches, with a divergence budget we actively pay down.
7Proven designs, current versions
Boring architecture, latest stable releases, rebase discipline.
8Human artistry is protected
Boot experience, theme, curation, naming: human-led, AI-assisted.
9The human signs the boundary
The agent may draft anything; a person ratifies the trust root.
10Continuity lives in artifacts
Durable knowledge lives in the repository, in plain text, under version control.

# The Toolkit

The build and maintenance toolkit is essentially complete: 83 tested tools, each a bounded project with its own suite.

3
editions
83+
tested tools
224 MB
Core idle RAM
1
command rebuild
pengyos-build
Declarative target registry → Buildroot builds
pengyos-qemu-verify
Boot an image under QEMU/KVM and assert it reaches login
pengyos-sign
Sign an artifact's digest (minisign-style)
pengyos-verifier
Independent witness: verify signatures and provenance
os-release / issue / motd
Versioned identity, written into the image
pengyos-install
Graphical and console installer, run from the USB stick
pengyos-release
Publish signed releases into the update feed
flash-usb
Write an image to a stick, with the mandatory GPT repair

Build it yourself

# 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.

# Downloads

Nothing to download yet — no images have been published.

💿
NOT READY YET

Install images

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.

  • Core — minimal bootable base on metal
  • Server — headless with services QEMU
  • Desktop — COSMIC, for Intel and AMD graphics on metal
  • Desktop NVIDIA — the same, with NVIDIA's driver on metal
🧾
PLANNED

Alongside every image

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.

# Documentation

Stubbed for now — the documents exist, but they are not published on the web yet.

📄
COMING SOON

Planned documentation set

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:

  • README — why PengyOS exists: philosophy, principles, process
  • SPEC — what we build: the component stack and the keystone decisions
  • USE-CASES — for whom: the user stories whose criteria become our tests
  • CHANGELOG — system-level milestones and notable changes
  • Install & update architecture, the verification ladder, and the QEMU testing runbook
🔒
NOT PUBLIC YET

Source repository

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.

# Updates

Live at pengyos.catbee.ca/update — on the testing channel while the first releases settle.

📡
WORKING

How updates work

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.

🐣
WHILE YOU WAIT

Follow the project's neighbours

PengyOS is part of the Catbee family. The other projects in the network — Pengy, BotTalk, MooFile and TheWatcher — are shipping today.