milestone: desktop path Phases 1-5

Phase 1 (Runtime Substrate): 4 check binaries, --probe, POSIX tests
Phase 2 (Wayland Compositor): bounded scaffold, zero warnings
Phase 3 (KWin Session): preflight checker (KWin stub, gated on Qt6Quick)
Phase 4 (KDE Plasma): 18 KF6 enabled, preflight checker
Phase 5 (Hardware GPU): DRM/firmware/Mesa preflight checker

Build: zero warnings, all scripts syntax-clean. Oracle-verified.
This commit is contained in:
2026-04-29 09:54:06 +01:00
parent b23714f542
commit 8acc73d774
508 changed files with 76526 additions and 396 deletions
+60 -13
View File
@@ -82,20 +82,22 @@ Rules:
| amdgpu retained C path | builds | Red Bear display glue retained path + linux-kpi compat; imported Linux AMD DC/TTM/core remain under compile triage | No hardware runtime validation |
| evdevd | builds, boots | scheme:evdev registers at boot; 65 unit tests (device classification, capability bitmaps, input translation) | |
| udev-shim | builds, boots | scheme:udev registers at boot; 15 unit tests (device database, subsystem naming, property formatting) | |
| redbear-hwutils | builds | lspci/lsusb tools; 19 unit tests (PCI location parsing, USB device description, argument handling) | |
| libwayland 1.24.0 | builds | No compositor proof yet | |
| redbear-hwutils | builds | lspci/lsusb + 4 Phase 1 check binaries (evdev, udev, firmware, DRM); 79 host-runnable unit tests + 12 Redox-only (cfg-gated) | |
| libwayland 1.24.0 | builds | Compositor now creates socket, accepts clients | |
| wayland-protocols | builds | Build blocker removed | |
| Mesa EGL + GBM + GLES2 | builds | Software rendering via LLVMpipe proven | Hardware path not proven |
| libdrm + libdrm_amdgpu | builds | Package-level success only | |
| Qt6 qtbase 6.11.0 | builds | Core, Gui, Widgets, DBus, Wayland, OpenGL, EGL | |
| qtdeclarative | builds | QML JIT disabled | |
| qtdeclarative 6.11.0 | builds | QML JIT disabled; builds host tools + cross-compiled libs | No QML runtime proof |
| qtsvg | builds | | |
| qtwayland | builds | | |
| D-Bus 1.16.2 | builds, bounded runtime | System bus wired in redbear-full | |
| qtwayland | builds | Wayland platform plugin builds but shell integration fails at runtime (see § Known Gaps) | |
| D-Bus 1.16.2 | builds, partial runtime | System bus daemon starts; fails to resolve `messagebus` user at runtime — group added to config but passwd/group not generated in rootfs | Session bus not wired |
| libinput 1.30.2 | builds | Runtime integration open | |
| libevdev 1.13.2 | builds | Runtime integration open | |
| seatd | builds | Session-management runtime proof open | |
| All 32 KF6 frameworks | builds | Major build milestone; some higher-level pieces use bounded/reduced recipes (kirigami stub-only, kf6-kio heavy shim, kf6-knewstuff/kwallet stubs) | |
| seatd | builds | Session-management runtime proof open; seatd package now in redbear-full config | |
| All 32 KF6 frameworks | builds | Major build milestone; 30 real cmake builds + 2 stubs (knewstuff, kwallet); 18 KF6 + kglobalacceld enabled in redbear-full; 5 remain suppressed (kirigami stub-only, kf6-kio heavy shim, kf6-knewstuff/kwallet stubs, kf6-kdeclarative QML-dependent) | |
| daemon (base recipe init-notify) | builds, boots-fixed | P0 patch: replaced unwrap() in get_fd/ready with graceful returns; survives clean re-fetch | |
| bootstrap (initfs workspace) | builds, boots-fixed | P0 patch: added bootstrap to workspace members; survives clean re-fetch | |
| kdecoration | builds | | |
| plasma-wayland-protocols | builds | | |
| kf6-kwayland | builds | | |
@@ -133,7 +135,7 @@ The repo has crossed major build-side gates:
4. **Qt6 + D-Bus** — qtbase (7 libs + 12 plugins), qtdeclarative (11 libs), qtsvg, qtwayland, D-Bus 1.16.2
5. **KF6 + KDE-facing** — All 32 KF6 frameworks, kdecoration, plasma-wayland-protocols, kf6-kwayland, kf6-kcmutils
6. **Tracked profiles** — redbear-mini, redbear-full, redbear-grub
7. **Phase 1 test coverage** — 300+ unit tests across evdevd (65), udev-shim (15), firmware-loader (24), redox-drm (68), redbear-hwutils (19), and bluetooth/wifi daemons
7. **Phase 1 test coverage** — 300+ unit tests across evdevd (65), udev-shim (15), firmware-loader (24), redox-drm (68), redbear-hwutils (79 host + 12 Redox-cfg-gated), and bluetooth/wifi daemons
### What is runtime-proven (limited scope)
@@ -159,7 +161,7 @@ The repo has crossed major build-side gates:
- kf6-kio is a heavy shim
- 11 KWin feature switches remain disabled (BUILD_WITH_QML=OFF, KWIN_BUILD_KCMS=OFF, KWIN_BUILD_EFFECTS=OFF, KWIN_BUILD_TABBOX=OFF, KWIN_BUILD_GLOBALSHORTCUTS=OFF, KWIN_BUILD_NOTIFICATIONS=OFF, KWIN_BUILD_SCREENLOCKING=OFF, KWIN_BUILD_SCREENLOCKER=OFF, legacy backend disabled, KWIN_BUILD_RUNNING_IN_KDE=OFF, KWIN_BUILD_ELECTRONICALLY_SIGNING_DOCS=OFF)
- QtNetwork disabled (relibc networking incomplete)
- No compositor session proof exists — KWin builds but has zero runtime session evidence
- No compositor session proof exists — KWin recipe is a stub (cmake configs only); real KWin build requires Qt6Quick/QML cross-compilation which is not yet available
- Qt6Quick/QML runtime not proven — JIT disabled, no QML client test exists
### Baseline conclusion
@@ -260,15 +262,31 @@ Track C (parallel): Hardware GPU Enablement
| 1.3 | Validate udev-shim device enumeration | libinput can enumerate at least one keyboard and one pointer device through udev-shim; DRM devices are visible to Mesa |
| 1.4 | Validate firmware-loader with real blobs + real consumer | Blob is requestable, loadable, consumable at runtime |
| 1.5 | Validate `scheme:drm/card0` registration + bounded KMS queries in QEMU | Scheme registers, answers basic queries, no startup-class failures |
| 1.6 | Produce repeatable runtime-service health check for `redbear-wayland` | `redbear-info` or equivalent shows all Phase 1 services as functional |
| 1.6 | Produce repeatable runtime-service health check for `redbear-full` | `redbear-info --probe` exits 0 and reports all Phase 1 services as PRESENT |
#### Exit criteria
**Test coverage progress (Phase 1 substrate):** 300+ unit tests now cover all Phase 1 daemon pure-logic surfaces. Runtime validation of these tests in a live environment remains the exit criterion.
**Code artifacts (Wave 02, build-verified, Oracle-reviewed):**
- `redbear-info --probe`: 5 scheme-presence probes (evdev, udev, firmware, drm, time), bidirectional `--probe`/`--json`/`--test`/`--quirks` mutual exclusivity, exits non-zero on gaps, unit-tested
- `redbear-phase1-evdev-check`: validates evdev scheme + event device semantics
- `redbear-phase1-udev-check`: validates udev-shim enumeration with targeted `--keyboard`/`--pointer`/`--drm` flags, `overall_success` respects config
- `redbear-phase1-firmware-check`: validates firmware scheme + blob listing/reading/fstat
- `redbear-phase1-drm-check`: validates DRM scheme + card enumeration + connector/mode queries
- `test-phase1-runtime.sh`: guest mode (exit-code-based, missing binary = FAIL) + QEMU mode (expect-based, POSIX FAIL enforcement)
- All Phase 1 binaries wired into `Cargo.toml` ([[bin]]) and `recipe.toml` ([package.files])
- `relibc-phase1-tests`: 6 C POSIX programs (test_signalfd_wayland, test_timerfd_qt6, test_eventfd_qt6, test_shm_open_qt6, test_sem_open_qt6, test_waitid_qt6) with `-Wall -Wextra -Werror` Makefile, custom recipe template, staged to `/home/user/relibc-phase1-tests/`
- Zero `cargo check` warnings, zero LSP errors on all modified files
- [ ] `redbear-wayland` boots in validation environment
**Runtime validation checklist (requires QEMU/bare metal):**
- [ ] `redbear-full` boots in QEMU validation environment
- [ ] All Phase 1 runtime services register without startup errors
- [ ] relibc runtime checks pass for desktop-facing consumers
- [ ] `redbear-info --probe` exits 0 and reports all 5 services PRESENT
- [ ] `redbear-phase1-evdev-check` exits 0 (evdev scheme + event devices)
- [ ] `redbear-phase1-udev-check` exits 0 (udev-shim device enumeration)
- [ ] `redbear-phase1-firmware-check --json` exits 0 (firmware blob serving)
- [ ] `redbear-phase1-drm-check --json` exits 0 (DRM/KMS queries)
- [ ] relibc POSIX runtime checks pass for desktop-facing consumers (signalfd, timerfd, eventfd, shm_open, sem_open, waitid)
- [ ] Input path reaches evdevd and yields expected event nodes + bounded test events
- [ ] udev-shim exposes expected bounded device view
- [ ] firmware-loader serves at least one real consumer path with real blobs
@@ -306,6 +324,12 @@ compositor + input + Qt client issues before session-shell complexity.
#### Exit criteria
**Code artifacts (validation infrastructure):**
- `redbear-phase2-wayland-check`: validates compositor socket visibility, compositor process presence, bounded `wl_display.get_registry` connectivity, `/usr/lib/libEGL.so`, `/usr/lib/libGBM.so`, software-renderer evidence, and the optional `qt6-wayland-smoke` binary; supports human + `--json` output and exits non-zero on failures
- `test-phase2-runtime.sh`: guest mode + QEMU mode runtime harness with explicit required-binary checks and exit-code-based expect markers
- Phase 2 validation binary is wired into `local/recipes/system/redbear-hwutils/source/Cargo.toml` and `local/recipes/system/redbear-hwutils/recipe.toml`
- [ ] the compositor launches into a working session in QEMU
- [ ] Keyboard and mouse work through the current input stack
- [ ] Mesa software rendering works through GBM and EGL
@@ -375,6 +399,12 @@ compositor + input + Qt client issues before session-shell complexity.
#### Exit criteria
**Code artifacts (validation infrastructure):**
- `redbear-phase3-kwin-check`: validates `kwin_wayland`/`redbear-compositor` presence, `DBUS_SESSION_BUS_ADDRESS`, `dbus-send --session`, `/run/seatd.sock`, active `WAYLAND_DISPLAY`, and a bounded `wl_display.sync` roundtrip; supports human + `--json` output and exits non-zero on failures
- `test-phase3-runtime.sh`: guest mode + QEMU mode runtime harness with explicit required-binary checks and exit-code-based expect markers
- Phase 3 validation binary is wired into `local/recipes/system/redbear-hwutils/source/Cargo.toml` and `local/recipes/system/redbear-hwutils/recipe.toml`
- [ ] KWin cmake configure succeeds without any `-stub` INTERFACE IMPORTED targets
- [ ] KWin process starts and registers `WAYLAND_DISPLAY`
- [ ] KWin owns display output for at least 60 seconds without crash
@@ -394,6 +424,8 @@ compositor + input + Qt client issues before session-shell complexity.
**Goal:** Boot into a KDE Plasma session with essential desktop shell and session services.
**Profile target:** `redbear-full`
**Current state (2026-04-29):** 47 KDE recipe directories exist — 42 real cmake builds (all 32 KF6 frameworks except knewstuff/kwallet, plus plasma-workspace, plasma-desktop, plasma-framework, kdecoration, kf6-kwayland, plasma-wayland-protocols, breeze, kde-cli-tools, kglobalacceld, kf6-prison, kf6-solid, kf6-sonnet) and 5 stubs (kf6-knewstuff, kf6-kwallet, kirigami, kwin, smallvil). 18 KF6 + kglobalacceld enabled in redbear-full.toml; 5 remain suppressed (kirigami, kf6-kio, kf6-kdeclarative, kf6-knewstuff, kf6-kwallet). Real KDE Plasma session gated on Qt6Quick/QML + real KWin (both not yet available). Test scripts exist (test-phase4-wayland-qemu.sh, test-phase4-runtime.sh, test-phase6-kde-qemu.sh).
#### Work items
| # | Task | Acceptance criteria | Technical path |
@@ -428,6 +460,13 @@ plasma-desktop
#### Exit criteria
**Code artifacts (build-verified):**
- `redbear-phase4-kde-check`: validates KF6 library presence, plasma binaries (plasmashell, systemsettings), session entry points, kirigami status
- `test-phase4-runtime.sh`: automated QEMU test harness (guest + QEMU modes) for Phase 4 preflight checks
- 18 KF6 + kglobalacceld enabled in `redbear-full.toml` (non-cascading subset)
**Runtime validation checklist (requires QEMU/bare metal):**
- [ ] `redbear-full` boots into a KDE Plasma session (plasmashell process is running)
- [ ] KWin is the active compositor (`WAYLAND_DISPLAY` owned by KWin)
- [ ] Plasma panel renders and is interactive (launcher opens, clock visible)
@@ -453,6 +492,8 @@ block KWin/Plasma session assembly, which can proceed on the software renderer.
criterion ("compositor runs through hardware path") requires a working compositor from Phase 2
or Phase 3. In practice, Track C's final validation gate depends on Track A completing first.
**Current state (2026-04-29):** redox-drm driver exists with Intel Gen8-Gen12 and AMD device support + quirk tables. Mesa builds with llvmpipe software renderer (hardware renderers radeonsi/iris not yet cross-compiled). GPU command submission (CS ioctl) missing. No hardware validation yet. DRM display check binary exists (redbear-drm-display-check).
#### Work items
| # | Task | Acceptance criteria |
@@ -465,6 +506,12 @@ or Phase 3. In practice, Track C's final validation gate depends on Track A comp
#### Exit criteria
**Code artifacts (build-verified):**
- `redbear-phase5-gpu-check`: validates DRM device registration, GPU firmware, Mesa DRI drivers, display mode enumeration
- `test-phase5-gpu-runtime.sh`: automated QEMU test harness (guest + QEMU modes) for Phase 5 preflight checks
**Runtime validation checklist (requires real hardware):**
- [ ] GPU command submission exists with focused proof coverage
- [ ] `modetest -M amd` shows display modes on real AMD hardware
- [ ] Equivalent Intel DRM query shows display modes on real Intel hardware
+85 -18
View File
@@ -1,15 +1,55 @@
# Red Bear OS Desktop Stack — Current Status
**Last updated:** 2026-04-28
**Canonical plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v2.0)
**Last updated:** 2026-04-29
**Canonical plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v2.1)
**Boot improvement plan:** `local/docs/BOOT-PROCESS-IMPROVEMENT-PLAN.md` (v1.0)
**Source archival policy:** `local/docs/SOURCE-ARCHIVAL-POLICY.md` (v1.0)
## Recent Changes (2026-04-29, Wave 6)
- **Phase 2/3 validation infrastructure**: Added bounded runtime checkers and harnesses for the next two desktop plan gates.
- `redbear-phase2-wayland-check`: Validates Wayland socket visibility, compositor process presence, bounded `wl_display.get_registry` connectivity, `/usr/lib/libEGL.so`, `/usr/lib/libGBM.so`, software-renderer evidence, and the optional `qt6-wayland-smoke` binary.
- `test-phase2-runtime.sh`: Automated `--guest` and `--qemu` Phase 2 harness using explicit binary checks plus exit-code-based expect markers.
- `redbear-phase3-kwin-check`: Validates `kwin_wayland`/`redbear-compositor` presence, `DBUS_SESSION_BUS_ADDRESS`, `dbus-send --session`, `/run/seatd.sock`, active `WAYLAND_DISPLAY`, and a bounded `wl_display.sync` roundtrip.
- `test-phase3-runtime.sh`: Automated `--guest` and `--qemu` Phase 3 harness using explicit binary checks plus exit-code-based expect markers.
- Both binaries are wired into `redbear-hwutils` Cargo packaging and the recipe staged-file list.
## Recent Changes (2026-04-29, Wave 5)
- **Phase 1 runtime validation infrastructure**: Added service presence probes and check binaries for the Phase 1 desktop substrate.
- `redbear-info --probe`: New output mode that probes Phase 1 service presence (evdevd, udev-shim, firmware-loader, redox-drm, time) via scheme enumeration. Reports per-service presence + summary line ("ALL PHASE 1 SERVICES PRESENT", "MOSTLY PRESENT, SOME GAPS", "SIGNIFICANT GAPS REMAIN").
- `redbear-phase1-evdev-check`: Validates evdev scheme enumeration, event device readability, EV_KEY/EV_REL event semantics.
- `redbear-phase1-udev-check`: Validates udev-shim device enumeration, keyboard/pointer/DRM device counts.
- `redbear-phase1-firmware-check`: Validates firmware scheme registration, blob listing, blob reading with fallback key attempts.
- `redbear-phase1-drm-check`: Validates DRM scheme registration, card enumeration, connector/mode queries.
- `relibc-phase1-tests`: Six C POSIX test programs (signalfd, timerfd, eventfd, shm_open, sem_open, waitid) exercising relibc compatibility layers as real consumers would.
- `test-phase1-runtime.sh`: Automated QEMU validation script with --guest and --qemu modes.
- All changes in local/ (durable, survives upstream refresh).
- `relibc-phase1-tests` wired into `config/redbear-full.toml`.
- **relibc-phase1-tests recipe**: Cross-compiles with Redox toolchain, installs to `/home/user/relibc-phase1-tests/` in guest filesystem.
## Recent Changes (2026-04-29, Wave 4)
- **Daemon INIT_NOTIFY panic fixed**: `P0-daemon-fix-init-notify-unwrap.patch` — replaced two `unwrap()` calls in base `daemon/src/lib.rs` (`get_fd` and `ready`) with graceful error handling. Fix survives clean source re-fetch via recipe `patches = [...]`.
- **Bootstrap workspace fix**: `P0-workspace-add-bootstrap.patch` — added `bootstrap` to workspace members in base `Cargo.toml` so initfs builds succeed.
- **Broken P2 base patches removed**: 23 broken upstream P2 patches removed from `recipes/core/base/recipe.toml` — they could not apply to current source revision and blocked fresh fetches.
- **Compositor protocol fix**: Fixed swapped size/opcode field parsing in `redbear-compositor` `dispatch()` — Wayland wire format `[size:u16][opcode:u16]` was reversed. Compositor now correctly identifies message types.
- **Compositor binary finding fix**: Wrapper script now uses `/usr/bin/redbear-compositor` (full path) to avoid PATH issues when running as `greeter` user.
- **messagebus group**: Added `[groups.messagebus]` to `config/redbear-full.toml` (gid=100, members=["messagebus"]) — D-Bus was failing to find the messagebus group.
- **Live ISO built**: `build/x86_64/redbear-full.iso` (4.0G) and `build/x86_64/redbear-full.img` built successfully with full D-Bus + Qt6 + greeter stack.
- **Source archival policy**: `local/docs/SOURCE-ARCHIVAL-POLICY.md` — new canonical policy requiring versioned filenames and fully-patched sources in archives.
- **Sources export**: 152 patches (29 recipe + 123 local) plus 40 source tarballs exported to `sources/x86_64-unknown-redox/`.
### Known Remaining Issues (Wave 4)
- **Qt Wayland shell integration**: Compositor correctly parses protocol now, but Qt6's Wayland plugin reports "Loading shell integration failed" and falls back to redox platform plugin. The compositor's event messages use native endianness (`to_ne_bytes()`) instead of Wayland's required little-endian (`to_le_bytes()`) wire format. Additionally, SHM file descriptor passing uses `read()` instead of `recvmsg()` with `SCM_RIGHTS`.
- **D-Bus session bus**: `dbus-daemon --system` starts but fails with "Could not get UID and GID for username 'messagebus'" — even though the user/group config exists, the `/etc/passwd` and `/etc/group` files in the runtime may not reflect the config entries. This blocks `redbear-sessiond` and all KDE services that depend on the session bus.
- **KF6 enablement**: 18 KF6 packages + kglobalacceld now enabled in redbear-full.toml (non-cascading subset). kirigami, kf6-kio, kf6-kdeclarative, kf6-knewstuff, kf6-kwallet remain suppressed (QML stubs, QtNetwork shims).
## Recent Changes (2026-04-28, Wave 3)
## Recent Changes (2026-04-28, Wave 3)
- **Real Wayland compositor** (`redbear-compositor`): 690-line Rust display server replaces KWin stubs. Full XDG shell protocol support (15/15 protocols). Integration tested. Cross-compiles for Redox target.
- **DRM backend active**: `KWIN_DRM_DEVICES=/scheme/drm/card0` wired end-to-end through greeter chain. Verified in QEMU boot — compositor reports "using DRM KWin backend".
- **Bounded Wayland compositor proof** (`redbear-compositor`): 788-line Rust compositor replaces KWin stubs. Self-consistent protocol dispatch (wl_display, wl_compositor, wl_shm, wl_shell, xdg_wm_base, wl_seat). Zero warnings. 3/3 tests pass. Known limitations: SHM fd passing uses payload bytes (not Unix SCM_RIGHTS), framebuffer compositing uses private memory (not real vesad), wire encoding uses NUL-terminated strings (not padded Wayland format). Cross-compiles for Redox target. Not yet a real compositor runtime proof — bounded scaffold only.
- **DRM backend wired**: `KWIN_DRM_DEVICES=/scheme/drm/card0` wired through greeter chain in config. Runtime verification pending.
- **Intel GPU Gen8-Gen12**: Expanded from Gen12-only to Gen8-Gen12 with firmware keys (SKL/KBL/CNL/ICL/GLK/RKL/DG1/TGL/ADLP/DG2/MTL/ARL/LNL/BMG). 200+ device IDs from Linux 7.0 i915.
- **VirtIO GPU driver**: New 220-line DRM/KMS backend in redox-drm for QEMU testing.
- **Kernel 4GB RAM fix**: MEMORY_MAP overflow at 512 entries → 1024. Verified with canary chain.
@@ -36,7 +76,7 @@ For subsystem planning detail, see `local/docs/WAYLAND-IMPLEMENTATION-PLAN.md`;
The canonical desktop plan uses a three-track model:
- **Track A (Phase 12):** Runtime Substrate → Software Compositor — **Phase 1 test coverage is substantially complete (300+ unit tests across all Phase 1 daemons); runtime validation in a live environment remains the exit gate**
- **Track A (Phase 12):** Runtime Substrate → Software Compositor — **Phase 1 active probe and check binaries are now implemented; runtime validation in a live environment remains the exit gate**
- **Track B (Phase 34):** KWin Session → KDE Plasma — **blocked on Track A**
- **Track C (Phase 5):** Hardware GPU — **can start after Phase 1**
@@ -60,7 +100,7 @@ greeter/auth/session-launch stack on the `redbear-full` desktop path.
|---|---|---|
| `libwayland` | **builds** | relibc/Wayland-facing compatibility is materially stronger; 33 patches verified (was 25): signalfd, timerfd, eventfd, pthread_yield, secure_getenv, getentropy, dup3, vfork, clock_nanosleep, named-semaphores, tls-get-addr-panic-fix, fcntl-dupfd-cloexec, ipc-tests, socket-flags, syscall-0.7.4-procschemeattrs-ens-to-prio, sysv-ipc, sysv-sem-impl, sysv-shm-impl, waitid-header, open_memstream, F_DUPFD_CLOEXEC, MSG_NOSIGNAL, waitid, RLIMIT, eth0 networking, shm_open, sem_open, select-not-epoll-timeout, exec-root-bypass, tcp-nodelay, netdb-lookup-retry-fix, eventfd-mod, fd-event-tests, ifaddrs-net_if, signalfd-header, elf64-types, socket-cred, strtold-cpp-linkage, semaphore-fixes |
| Qt6 core stack | **builds** | `qtbase` (7 libs + 12 plugins), `qtdeclarative`, `qtsvg`, `qtwayland`; Qt6Quick/JIT not runtime-proven |
| KF6 frameworks | **builds** | All 32/32; some higher-level pieces use bounded/reduced recipes (kf6-kio heavy shim, kirigami stub-only) |
| KF6 frameworks | **builds** | 32/32 recipes exist; 30 real cmake builds + 2 stubs (knewstuff, kwallet); kirigami stub-only; kf6-kio heavy shim; 18 KF6 + kglobalacceld enabled in redbear-full; 5 suppressed |
| KWin | **experimental** | Recipe exists; current reduced path now links honest `libudev.so` and `libdisplay-info.so` provider paths alongside real `libepoxy` and `lcms2`; 11 feature switches remain disabled and runtime/session proof is still missing |
| plasma-workspace | **experimental** | Recipe exists; stub deps (kf6-knewstuff, kf6-kwallet) unresolved |
| plasma-desktop | **experimental** | Recipe exists; depends on plasma-workspace |
@@ -86,12 +126,40 @@ greeter/auth/session-launch stack on the `redbear-full` desktop path.
| redbear-dbus-services | ✅ Created | D-Bus activation files + policies staged |
| DRM/KMS | **builds** | redox-drm scheme daemon; 68 unit tests (KMS, GEM, PRIME, wire structs, scheme pure logic); no hardware runtime validation |
| GPU acceleration | **blocked** | PRIME/DMA-BUF ioctls and bounded private CS surface implemented; real vendor render CS/fence path still missing |
| validation compositor runtime | **experimental** | Reaches early init in QEMU; no complete session |
| validation compositor runtime | **experimental bounded scaffold** | Self-consistent protocol dispatch; 3/3 tests pass; known gaps: SHM fd passing, wire encoding, framebuffer compositing; not a real client-compatible compositor runtime proof |
| validation profile | **builds, boots** | Bounded Wayland runtime profile |
| `redbear-full` profile | **builds, boots** | Active desktop/graphics compile surface; now owns the experimental greeter/auth/session-launch integration path |
| `redbear-grub` profile | **builds** | Text-only with GRUB chainload for bare-metal multi-boot |
| `redbear-mini` profile | **builds** | Minimal non-desktop compile target |
| `redbear-hwutils` | **builds** | lspci/lsusb tools; 19 unit tests (PCI location parsing, USB device description, argument handling) |
| `redbear-hwutils` | **builds** | lspci/lsusb + Phase 1 check tools; 79 unit tests (12 cfg-gated Redox-only); zero warnings; 4 Phase 1 check binaries (evdev, udev, firmware, DRM) |
| `redbear-info --probe` | **builds** | Phase 1 service presence probes (evdevd, udev-shim, firmware-loader, redox-drm, time); reports PRESENT/ABSENT with summary; exits non-zero on gaps; 5 unit tests; bidirectional `--probe`/`--json`/`--test`/`--quirks` mutual exclusivity |
| `relibc-phase1-tests` | **builds** | Six C POSIX tests (signalfd, timerfd, eventfd, shm_open, sem_open, waitid); cross-compiled for Redox |
| `test-phase1-runtime.sh` | **builds** | Automated QEMU validation (--guest/--qemu modes) for Phase 1 substrate |
| `redbear-phase2-wayland-check` | **builds** | Phase 2 compositor proof checker: socket/process visibility, bounded `wl_display.get_registry`, EGL/GBM presence, software-renderer evidence, and optional `qt6-wayland-smoke` presence |
| `test-phase2-runtime.sh` | **builds** | Automated guest/QEMU Phase 2 harness using explicit binary checks and exit-code-only pass/fail markers |
| `redbear-phase3-kwin-check` | **builds** | Phase 3 desktop session preflight: compositor binary presence, session-bus address + `dbus-send`, seatd socket, active `WAYLAND_DISPLAY`, and bounded `wl_display.sync` roundtrip (does not validate real KWin behavior) |
| `test-phase3-runtime.sh` | **builds** | Automated guest/QEMU Phase 3 harness using explicit binary checks and exit-code-only pass/fail markers |
| | | |
| **Phase 4 (KDE Plasma) — 42 real builds + 5 stubs in 47-recipe tree** | | |
| KF6 frameworks | **32 recipes** | 30 real cmake builds, 2 stubs (knewstuff, kwallet); 18 KF6 + kglobalacceld enabled; 5 suppressed |
| `plasma-workspace` | **real cmake build** | Full cmake build with 52 dependency items; suppressed in config |
| `plasma-desktop` | **real cmake build** | Full cmake build, depends on plasma-workspace; suppressed |
| `plasma-framework` | **real cmake build** | Plasma applets/containments/shell (BUILD_WITH_QML=OFF) |
| `kdecoration` | **real cmake build** | Window decoration library required by KWin |
| `kf6-kwayland` | **real cmake build** | Qt/C++ Wayland protocol wrapper |
| `plasma-wayland-protocols` | **real cmake build** | XML protocol definitions for kwayland/KWin |
| `kirigami` | **stub** | #TODO: QML-based, cannot build without Qt6Quick |
| `kwin` | **stub** | cmake configs + wrapper scripts that delegate to redbear-compositor |
| `test-phase4-runtime.sh` | **exists** | Phase 4 KDE Plasma preflight harness (guest + QEMU modes) |
| `test-phase5-gpu-runtime.sh` | **exists** | Phase 5 hardware GPU preflight harness (guest + QEMU modes) |
| `redbear-phase4-kde-check` | **builds** | Phase 4 KDE preflight: KF6 libraries, plasma binaries, session entry points, kirigami status |
| `redbear-phase5-gpu-check` | **builds** | Phase 5 GPU preflight: DRM device, GPU firmware, Mesa DRI drivers, display modes |
| | | |
| **Phase 5 (Hardware GPU) — driver scaffold** | | |
| `redox-drm` | **builds** | DRM scheme daemon with Intel Gen8-Gen12 + AMD device support and quirk tables; no hardware validation |
| `mesa` | **builds** | Software llvmpipe renderer; hardware renderers (radeonsi/iris) not cross-compiled |
| `amdgpu` | **compile triage** | Imported Linux AMD DC/TTM/core C port; bounded path compiles |
| `test-phase5-network-qemu.sh` | **exists** | Legacy Phase 5 network/session QEMU launcher (pre-v2.0 plan) |
## Profile View
@@ -120,13 +188,13 @@ greeter/auth/session-launch stack on the `redbear-full` desktop path.
The repo has real build-visible desktop progress, but build success exceeds runtime confidence.
Phase 1 exists specifically to close this gap.
Phase 1 test coverage is now comprehensive (300+ unit tests across evdevd, udev-shim, firmware-loader, redox-drm, redbear-hwutils). The remaining gap is live-environment runtime validation of these tested surfaces.
Phase 1 code implementation is build-verified complete (zero warnings, zero test failures, zero LSP errors). Active service probes and check binaries are in place (`redbear-info --probe`, `redbear-phase1-{evdev,udev,firmware,drm}-check`). Six C POSIX test programs for relibc compatibility layers are wired in the `relibc-phase1-tests` recipe. The automated QEMU test harness (`test-phase1-runtime.sh`) is complete and syntax-verified. Live-environment runtime validation remains pending (requires QEMU/bare metal, not available in current environment).
### 2. No complete compositor session (Phase 2 gate)
A bounded compositor initialization reaches early startup but does not complete a usable Wayland compositor session.
This blocks all desktop session work.
KWin is the sole intended compositor. No alternative (weston, wlroots) is in a working state. The KWin reduced path builds with 11 feature groups disabled but has zero runtime session evidence.
KWin is the sole intended compositor direction. No alternative (weston, wlroots) is in a working state. KWin recipe currently provides cmake config stubs and wrapper scripts that delegate to redbear-compositor; real KWin build requires Qt6Quick/QML cross-compilation (not yet available).
### 3. Greeter/login path now exists, but runtime proof is still missing (desktop-login gate)
@@ -152,10 +220,9 @@ Current truth for that slice:
This means Red Bear now has a credible **bounded runtime-visible login boundary**, but not yet a
runtime-trusted general-purpose graphical login surface.
### 4. KWin reduced build is now dependency-honest, but runtime proof is still missing (desktop-session gate)
### 4. KWin recipe is a cmake stub; real KWin desktop-session proof requires Qt6Quick/QML
The reduced KWin path now builds with honest provider linkage for `libepoxy`, `lcms2`, `libudev`,
and `libdisplay-info`.
KWin recipe provides cmake config stubs and wrapper scripts (kwin_wayland, kwin_wayland_wrapper) that delegate to redbear-compositor. Real KWin build requires Qt6Quick/QML cross-compilation which is not yet available.
Current truth for that slice:
@@ -225,11 +292,11 @@ Init service configuration has been streamlined:
The Red Bear desktop stack has crossed major build-side gates and one important bounded runtime gate:
- All Qt6 core modules, all 32 KF6 frameworks, Mesa EGL/GBM/GLES2, and D-Bus build
- Four supported compile targets exist, with desktop/graphics on `redbear-full`
- Three supported compile targets exist, with desktop/graphics on `redbear-full`
- the Red Bear-native greeter/login path now has a bounded passing QEMU proof (`GREETER_HELLO=ok`, `GREETER_INVALID=ok`, `GREETER_VALID=ok`)
- relibc compatibility is materially stronger than before
- Phase 1 test coverage is comprehensive: 300+ unit tests across all Phase 1 daemons (evdevd 65, udev-shim 15, firmware-loader 24, redox-drm 68, redbear-hwutils 19, bluetooth/wifi 209)
- KWin reduced path builds with honest dependency linkage (libepoxy, lcms2, libudev, libdisplay-info) but has no compositor session proof
- Phase 1 test coverage is comprehensive: 300+ unit tests across all Phase 1 daemons (evdevd 65, udev-shim 15, firmware-loader 24, redox-drm 68, redbear-hwutils 79 host + 12 Redox-cfg-gated, bluetooth/wifi 209); service presence probes (`redbear-info --probe`) and 4 check binaries (`redbear-phase1-{evdev,udev,firmware,drm}-check`) validate Phase 1 substrate; 6 C POSIX tests (`relibc-phase1-tests`) exercise relibc compatibility layers
- KWin recipe provides cmake config stubs and wrapper scripts delegating to redbear-compositor; real KWin build requires Qt6Quick/QML (not yet available); no compositor session proof exists
- Critical blockers for Phase 4: kirigami stub (needs Qt6Quick), kf6-kio shim (needs QtNetwork), kf6-knewstuff/kwallet stubs
The remaining work is **broader runtime validation, compositor/session stability, and the remaining KDE session/runtime proof work**.
+10 -8
View File
@@ -216,19 +216,21 @@ shell = "/usr/bin/ion"
| W9 | **Power action fallbacks missing** | Low | authd calls `/usr/bin/shutdown`, `/usr/bin/reboot` | May not exist on Redox; failure is silent |
| W10 | **greeterd socket path hardcoded** | Low | `/run/redbear-greeterd.sock` vs XDG_RUNTIME_DIR | Works for single-seat; breaks in multi-seat |
| W11 | **greeter init service is `true` stub** | **Critical** | `redbear-greeter-services.toml``20_greeter.service cmd = "true"` | Real greeter only in `redbear-full.toml`; mini/grub don't have it |
| W12 | **redbear-greeter-compositor missing from image** | **Critical** | recipe.toml installs to `/usr/bin/` but path referenced as `COMPOSITOR_BIN_PATH` | greeterd fails to start compositor |
| W13 | **`dbus-run-session` may not exist in image** | **Critical** | session-launch fallback is direct `redbear-kde-session` | D-Bus session bus may not start without explicit dbus-daemon |
| W12 | ~~redbear-greeter-compositor missing from image~~(resolved) | Low | Recipe installs to both `/usr/bin/` and `/usr/share/redbear/greeter/`; main.rs checks both | compositor binary available via both paths |
| W13 | ~~dbus-run-session may not exist in image~~(resolved) | Low | dbus in redbear-mini config (inherit by redbear-full); session-launch prefers `/usr/bin/dbus-run-session`; dbus recipe installs it | D-Bus session bus available |
### 7.3 Critical Blockers for Greeter Reaching Login Screen
### 7.3 Greeter Login-Screen Prerequisites (most resolved; bounded QEMU proof now passes)
*Note: As of 2026-04-29, the bounded `redbear-full` QEMU greeter proof passes (`GREETER_HELLO=ok`, `GREETER_VALID=ok`). Most items below are satisfied by the active config; remaining items are "verify via build."*
| Blocker | Source | Fix |
|---------|--------|-----|
| greeter init service stub in greeter-services.toml | `20_greeter.service cmd = "true"` | Use `redbear-full.toml` service definition (already correct there) |
| compositor binary path mismatch | `COMPOSITOR_BIN_PATH = /usr/bin/redbear-greeter-compositor` but recipe installs to `/usr/share/` first then `/usr/bin/` | Verify binary at `/usr/bin/redbear-greeter-compositor` in image |
| seatd not in image | seatd recipe may not have been cooked | Ensure `seatd` package is in config and cooked |
| redbear-authd not in image | authd recipe may not have been cooked | Ensure `redbear-authd` package is in config and cooked |
| redbear-sessiond not in image | sessiond recipe may not have been cooked | Ensure `redbear-sessiond` package is in config and cooked |
| greeter user account missing | TOML `[users.greeter]` may not be applied | Verify greeter user uid=101 exists in /etc/passwd in image |
| ~~compositor binary path mismatch~~ (resolved) | Recipe installs to both `/usr/bin/` and `/usr/share/redbear/greeter/`; greeterd checks both | No action needed |
| seatd package in config | seatd = {} now present in redbear-full.toml packages section | Rebuild to include seatd in image |
| redbear-authd now in config | authd recipe in redbear-full config | Verify authd binary reaches image via build |
| redbear-sessiond now in config | sessiond inherited from redbear-mini config | Verify sessiond binary reaches image via build |
| greeter user account present in config | `[users.greeter]` in redbear-full config | Verify greeter user uid=101 in /etc/passwd in image after build |
| compositor requires DRM but QEMU has none | `kwin_wayland_wrapper --drm` fails in VM | Use `--virtual` in VM; compositor script already handles this |
---
+91
View File
@@ -0,0 +1,91 @@
# Source Archival Policy — Red Bear OS
**Effective:** 2026-04-29
**Status:** Active / Enforceable
## Principle
Every source archive exported to `sources/<target-triple>/` must include the package version
number in its filename, and must contain the fully-patched source tree as it was used during the
build. No archive may be named solely by category — every archive filename must carry a version
qualifier.
## Naming Convention
```
sources/<target-triple>/<category>-<pkgname>-v<version>-patched.tar.gz
```
| Component | Meaning | Example |
|---|---|---|
| `<category>` | Recipe category directory | `core`, `libs`, `wip` |
| `<pkgname>` | Package name from recipe directory | `base`, `dbus`, `qtbase` |
| `<version>` | Source version from recipe (tar/git rev) | `1.16.2`, `6.11.0`, `463f76b` |
| `patched` | Indicates all recipe patches are applied | always present |
**Examples:**
```
core-base-v463f76b-patched.tar.gz
wip-services-dbus-v1.16.2-patched.tar.gz
wip-qt-qtbase-v6.11.0-patched.tar.gz
wip-qt-qtdeclarative-v6.11.0-patched.tar.gz
core-relibc-v2025-10-03-patched.tar.gz
```
## Version Sources
The version is extracted from the recipe's `[source]` block:
| Source type | Version extraction |
|---|---|
| `tar = "https://.../pkg-X.Y.Z.tar.xz"` | Extract `X.Y.Z` from URL |
| `git = "https://...repo.git"` + `rev = "abc123"` | Use git rev short hash (`abc123`) |
| `path = "source"` (local) | Use the recipe's `[source]` section name or a manual version marker |
## Archive Contents
Each versioned archive must contain:
1. The **fully patched source tree** at `recipes/<category>/<pkgname>/source/` — after all `patches = [...]` have been applied
2. The **recipe file** (`recipe.toml`) that defines the build
3. A **metadata file** (`source-info.json`) with: package name, version, source type, patch list, and build date
### Metadata format
```json
{
"package": "dbus",
"version": "1.16.2",
"source_type": "tar",
"source_url": "https://dbus.freedesktop.org/releases/dbus/dbus-1.16.2.tar.xz",
"blake3": "b1d1f22858a8f04665e5dca29d194f892620f00fd3e3f4e89dd208e78868436e",
"patches": ["redox.patch"],
"build_date": "2026-04-29T00:00:00Z",
"target": "x86_64-unknown-redox"
}
```
## Enforcement
- The `packages.txt` manifest in `sources/<target-triple>/` lists all exported packages with versions
- Every CI/documentation run that exports sources must use versioned naming
- An archive without a version number is considered incomplete — it must be regenerated
- The `make sources` target (when created) will auto-generate versioned archives
## Existing Non-Versioned Archives (Migration)
Current archives in `sources/x86_64-unknown-redox/` named like `core-base.tar.gz` are legacy.
They must be migrated to the versioned naming convention on next rebuild:
| Old name | New name |
|---|---|
| `core-base.tar.gz` | `core-base-v463f76b-patched.tar.gz` |
| `core-kernel.tar.gz` | `core-kernel-v<rev>-patched.tar.gz` |
| `core-relibc.tar.gz` | `core-relibc-v<rev>-patched.tar.gz` |
| `libs-mesa.tar.gz` | `libs-mesa-v<ver>-patched.tar.gz` |
## Related
- `../AGENTS.md` — repository structure and durability policy
- `docs/06-BUILD-SYSTEM-SETUP.md` — build system mechanics
- `local/docs/PATCH-GOVERNANCE.md` — patch governance policy