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:
@@ -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 0–2, 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
|
||||
|
||||
@@ -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 1–2):** 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 1–2):** 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 3–4):** 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**.
|
||||
|
||||
@@ -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 |
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user