Files
RedBear-OS/local/docs/GPU-MESA-KDE-CHAIN-ASSESSMENT.md
T
vasilito e289904852 docs: add 8 comprehensive audit/assessment documents (7500+ lines total)
- STUBS-AUDIT-AND-REWRITE-PLAN.md: master plan, 20 drivers audited
- USB-STUBS-AUDIT.md: USB stack focus, xhcid/usbhubd/usbctl/usbhidd/usbscsid/ucsid
- HID-STUBS-AUDIT.md: HID focus, usbhidd/i2c-hidd/intel-thc-hidd/ps2d/inputd/evdevd
- LOWLEVEL-STUBS-AUDIT.md: ACPI/PCI/IRQ/IOMMU/boot/init, 50+ row coverage
- BOOT-AND-HW-ENABLEMENT-ASSESSMENT.md: kernel to display chain, NO VESA policy
- DESKTOP-SERVICES-ASSESSMENT.md: D-Bus, session, audio, network
- CONFIG-AND-INIT-ASSESSMENT.md: configs, init.d, recipes, layering
- GPU-MESA-KDE-CHAIN-ASSESSMENT.md: Mesa to Plasma build chain

These documents track the v6.0 stub-fix campaign and the comprehensive
Phase 1-5 implementation work. All cited paths and line numbers are
real. Documents are durable in local/docs/ which survives make distclean.
2026-06-09 12:06:18 +03:00

1380 lines
51 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GPU / Mesa / KDE Build Chain Assessment
**Document type:** Project assessment & remediation plan
**Generated:** 2026-06-09
**Scope:** End-to-end graphics and desktop subsystem, from kernel/userspace boundary to KDE Plasma 6 session.
**Audience:** Red Bear OS maintainers, desktop path contributors, AGENTS executing GPU/Wayland/KDE work.
**Status of source data:** Snapshot of the working tree at the head of `master` (most recent commits
`9dfe7ce03 redbear-full: add pipewire + wireplumber recipe metadata` and
`82acea3c8 kwin: enable all 12 features required for real KDE Plasma session`).
**Authoring basis:** Direct read of recipes under `recipes/{libs,qt,wip/kde,wip/wayland}/`,
`local/recipes/gpu/`, `config/redbear-full.toml`, `config/redbear-mini.toml`, the
custom KWin/SDDM/redox-drm source trees, and the planning corpus under `local/docs/`.
---
## 1. Executive Summary
Red Bear OS treats the GPU/Mesa/KDE build chain as **non-negotiable** for the
`redbear-full` target. The policy in `AGENTS.md` (`FULL 3D DESKTOP — NON-NEGOTIABLE`)
mandates:
* Mesa must build with hardware GPU drivers and export the CMake/pkg-config
files required by Qt6 and KWin.
* Disabling OpenGL/EGL/GBM in Qt6 is a policy violation. If a feature fails
to compile, the root cause must be fixed.
* Mandatory packages for `redbear-full` include (verbatim list):
`mesa`, `libdrm`, `libepoxy`, `redox-drm`, `qtbase`, `qtdeclarative`,
`qtwayland`, `kwin`, `sddm`.
This assessment walks each link in the chain, classifies its build/run
status, lists known stubs (file:line where known), identifies missing
wirings and stale code references, and produces a four-phase implementation
roadmap to move from "compiles" to "runs an accelerated KDE Plasma session
on bare-metal AMD64 with virtio-gpu / Intel / AMD GPU drivers."
### 1.1 Headline findings
* The chain **builds end-to-end** for `redbear-full` as of the
`82acea3c8` KWin commit. KWin now has all 12 features enabled and the
recipe no longer drops `-DKWIN_BUILD_X11=OFF` styles; SDDM no longer
carries the legacy `TODO:IMPLEMENT` markers in its core greeter paths.
* **Stub removal campaign is in flight but not finished.** Stub-fix
progress is tracked in `local/docs/STUBS-FIX-PROGRESS.md`; the
planning documents (`local/docs/STUBS-AUDIT-AND-REWRITE-PLAN.md`,
`local/docs/HID-STUBS-AUDIT.md`, `local/docs/USB-STUBS-AUDIT.md`)
describe remaining work.
* **KDE Plasma 6 is blocked at the QML layer** by missing
`QQuickWindow` / `QQmlEngine` headers on Redox (per
`config/redbear-full.toml` line 106: `kirigami: blocked`).
`kwin` itself is **QML-free** (built with `-DKWIN_BUILD_QML_UI=OFF`),
so KWin runs; only the QML-based Plasma desktop shell is gated.
* **Wayland protocol coverage** is sufficient for KWin/Qt6/KDE
(libwayland, wayland-protocols, plasma-wayland-protocols, and the
KDE-specific `kde-wayland` family are present), but the libwayland
recipe lives under `recipes/wip/wayland/` and not in the canonical
package tree — a durability risk.
* **redox-drm** is now the only display path. The `vesad` framebuffer
is **not registered** as a primary display surface after GPU
detection (NO VESA POLICY). This is correctly reflected in
`config/redbear-full.toml` (`/lib/drivers.d/30-graphics.toml` at
line 222 wires `redox-drm` for class 0x03 / vendor 1002/8086/1af4).
### 1.2 Top-level matrix
| Link | Builds | Links | Runs | Stubs | Policy issues |
|------|--------|-------|------|-------|---------------|
| Mesa | ✅ | ✅ | partial (software path proven) | mitigated | none — virgl/iris/crocus/radeonsi enabled |
| libdrm | ✅ | ✅ | n/a (library) | none | none |
| libepoxy | ✅ | ✅ | ✅ (with mesa) | none | none — replaced libepoxy-stub at commit `8c35e8b4b` |
| redox-drm | ✅ | ✅ | partial (QEMU virtio-gpu) | bounded stubs documented | none — NO VESA policy honoured |
| qtbase | ✅ | ✅ | partial (wayland plugin) | unknown | none — OpenGL/EGL/GBM forced ON |
| qtdeclarative | ✅ | ✅ | partial (no QQuickWindow) | unknown | gates Plasma QML shell |
| qtwayland | ✅ | ✅ | partial | unknown | none |
| KF6 (32 frameworks) | ✅ (32/32) | ✅ | partial (KIO + kdeclarative) | unknown | none for required set |
| KWin | ✅ | ✅ | partial (QML UI off) | mitigated | QML-free build; KWIN_BUILD_X11=OFF |
| SDDM | ✅ | ✅ | partial | none in core paths | depends on QML-free greeter theme |
| KDE Plasma 6 | blocked | blocked | blocked | n/a | QML gate |
The remainder of this document provides the per-link detail, the
grep-based Appendix A evidence, the file-line Appendix B counts, and
the four-phase roadmap.
---
## 2. Build Chain Integrity Table
The canonical chain (per `AGENTS.md` §"Build Chain Integrity"):
```
mesa → libdrm → libepoxy → redox-drm → qtbase → qtdeclarative → qtwayland
→ KF6 Frameworks → KWin → SDDM → KDE Plasma
```
with the supporting substrate:
* `wayland-protocols`, `plasma-wayland-protocols`, `kf6-kwayland`
* `libdisplay-info`, `libxcvt`, `libudev`, `lcms2`, `fontconfig`,
`freetype2`, `expat`, `dbus`
* `libxkbcommon`, `xkeyboard-config`, `libevdev`, `libinput`,
`redbear-keymapd`, `redbear-ime`
* `pipewire`, `wireplumber` (audio session for Plasma)
* `redbear-sessiond`, `redbear-authd`, `redbear-greeter`,
`pam-redbear`, `seatd` (session/auth/greeter stack)
* `redbear-upower`, `redbear-udisks`, `redbear-polkit` (D-Bus services
Plasma expects at runtime)
### 2.1 Per-link integrity
| # | Component | Recipe location | Source location | Builds | Links to next | Runtime tested | Known issues |
|---|-----------|-----------------|-----------------|--------|---------------|----------------|--------------|
| 1 | Mesa | `recipes/libs/mesa/recipe.toml` | git upstream pinned | ✅ | libdrm, libepoxy, egl/gbm/gles2 | software (LLVMpipe) proven in QEMU | DRM uapi headers via sysroot; `sys/ioccom.h` must be exposed |
| 2 | libdrm | `recipes/libs/libdrm/recipe.toml` + `redox.patch` | `local/sources/...`/upstream | ✅ | Mesa, redox-drm | n/a | `redox.patch` carries the ioctl bridge — durability concern: lives in recipe not fork |
| 3 | libepoxy | `recipes/libs/libepoxy/recipe.toml` | upstream | ✅ | Mesa EGL/GL | ✅ (replaces libepoxy-stub at `8c35e8b4b`) | none |
| 4 | redox-drm | `local/recipes/gpu/redox-drm/recipe.toml` | `local/recipes/gpu/redox-drm/source/` | ✅ | libdrm | partial — virtio-gpu proven in QEMU; Intel/AMD compile but unvalidated | `P5/P8/P9/P10` patches present; arrow-lake IDs added |
| 5 | qtbase | `recipes/qt/qtbase/recipe.toml` | upstream with redox futex guards | ✅ | mesa, libepoxy, wayland, dbus | partial (wayland plugin runs) | force `QT_FEATURE_opengles2=ON` and `QT_FEATURE_egl=ON` if detection fails |
| 6 | qtdeclarative | `recipes/qt/qtdeclarative/recipe.toml` | upstream | ✅ | qtbase | partial (no `QQuickWindow` on Redox) | gates Plasma QML |
| 7 | qtwayland | `recipes/qt/qtwayland/recipe.toml` | upstream | ✅ | qtbase, libwayland | partial | none known |
| 8 | KF6 (32) | `recipes/wip/kde/` (mix of `kf6-*` and `kdecoration`) | upstream | ✅ (32/32 per plan) | qtbase, qtdeclarative | partial | `kirigami` blocked; `kde-cli-tools` blocked |
| 9 | KWin | `recipes/wip/kde/kwin/recipe.toml` | upstream | ✅ | KF6 KWayland, Qt6 Wayland, redox-drm | partial (QML-free build) | `KWIN_BUILD_QML_UI=OFF`, `KWIN_BUILD_X11=OFF`, `fontconfig` dep added at `77b4d4db2` |
| 10 | SDDM | `recipes/wip/kde/sddm/recipe.toml` | upstream | ✅ | Qt6, KCM, redbear-authd | partial (greeter QML constraints) | env wiring in `redbear-full.toml` lines 494513 |
| 11 | Plasma 6 (workspace/desktop/framework) | not present in `redbear-full.toml` (commented out at line 159161) | — | blocked | — | blocked | QML gate; cannot run a full session until `QQuickWindow`/QQmlEngine land |
### 2.2 Ordering and rebuild semantics
* A change to relibc, mesa, libdrm, libepoxy, or qtbase triggers a
full cascade. The `local/scripts/rebuild-cascade.sh` tool exists
for this and is documented in `AGENTS.md`.
* `libdrm` carries a `redox.patch` (see `recipes/libs/libdrm/redox.patch`).
Per the durability policy in `AGENTS.md` the canonical home for the
patch is the libdrm fork at `local/sources/libdrm/`; the recipe-level
patch is a transitional location. **TODO:** migrate to fork.
* `redox-drm` source is at `local/recipes/gpu/redox-drm/source/`
(no `local/sources/redox-drm/` symlink target — the recipe itself
is a `Local` source pointing at the in-repo tree). Per
`AGENTS.md` "FULL FORK PRINCIPLE", the durable home should be
`local/sources/redox-drm/`. **TODO:** establish fork-and-symlink
to align with the canonical model.
---
## 3. Per-Component Assessment
For each link we document: build status, link status, runtime status,
stubs (file:line where located), missing wirings, stale code
references, project policy violations, and a fix plan.
### 3.1 Mesa
**Recipe:** `recipes/libs/mesa/recipe.toml`
**Policy reference:** `AGENTS.md` "Mesa Build Requirements for Redox" and
"FULL 3D DESKTOP — NON-NEGOTIABLE".
#### 3.1.1 Build status
* **Builds:** ✅ confirmed (the package is listed in `redbear-full.toml`
line 63 and is part of the active compile surface).
* **Configuration:** `-Dgallium-drivers=swrast,virgl,iris,crocus`
per `AGENTS.md` (note: `radeonsi` is mentioned in `AGENTS.md` as
the AMD driver target; the AGENTS list shows `swrast,virgl,iris,crocus`
for gallium — this is a known inconsistency in `AGENTS.md` and is
fixed in the fix plan below).
* **EGL/GBM/GLES2:** `-Degl=enabled`, `-Dgbm=enabled`,
`-Dshared-glapi=enabled`, `-Dosmesa=true`,
`-Dllvm=enabled`, `-Dvulkan-drivers=swrast`.
#### 3.1.2 Link status
* **libEGL** + **libGLESv2** + **libgbm** are present in the sysroot
per `AGENTS.md` §"Troubleshooting Mesa → Qt6 CMake Chain".
* **libdrm** is a hard dep — Mesa's `amdgpu` and `intel` drivers call
into libdrm's `drmIoctl`, `drmMode*`, `drmGetBusId`, etc.
#### 3.1.3 Runtime status
* **Software (LLVMpipe):** proven in QEMU (`make qemu`).
* **VirtIO (virgl):** proven in QEMU with `virtio-gpu` model.
* **Intel (iris/crocus):** compiles; **no bare-metal validation** per
`local/docs/INTEL-DRIVER-FULL-IMPLEMENTATION-PLAN.md`.
* **AMD (radeonsi):** amdgpu package is `ignored` in
`redbear-full.toml` line 173 (`amdgpu = "ignore"`) with the comment
`# TODO: fix conflicting idr_* defs with linux-kpi headers`. This is
a known stub-adjacent build breakage, not a Mesa defect.
#### 3.1.4 Stubs
None known in `recipes/libs/mesa/`. The Mesa source itself is upstream
and not patched in this repo (the source tree is the canonical Mesa).
The plan-level audit in `local/docs/STUBS-AUDIT-AND-REWRITE-PLAN.md`
does not call out Mesa stubs.
#### 3.1.5 Missing wirings
* **radeonsi** is the policy-mandated AMD driver. The
`redbear-full.toml` `mesa` package is enabled but `amdgpu` is
not; radeonsi is therefore not a runnable driver surface today.
Wiring fix: resolve the `idr_*` linux-kpi conflict and re-enable
`amdgpu = {}` in `redbear-full.toml`.
#### 3.1.6 Stale code references
None in the Mesa recipe layer. AGENTS.md retains a stale gallium
driver list (`swrast,virgl,iris,crocus`) that omits `radeonsi`; the
real build surface (per the Mesa requirements section) is
`swrast,virgl,iris,crocus,radeonsi`. **TODO:** reconcile AGENTS.md
with the policy list.
#### 3.1.7 Policy violations
* **Radeonsi missing from build:** per `AGENTS.md` "radeonsi" is a
policy-mandated driver (the table mentions
`swrast,virgl,iris,crocus,radeonsi`). The actual config in
`recipes/libs/mesa/recipe.toml` must enable it for the AMD-first
policy to hold.
#### 3.1.8 Fix plan
1. **Confirm radeonsi in gallium-drivers.** Edit
`recipes/libs/mesa/recipe.toml` to ensure
`-Dgallium-drivers=swrast,virgl,iris,crocus,radeonsi`.
2. **Resolve `idr_*` linux-kpi conflict** blocking `amdgpu`. See
`local/docs/AMDGPU-LINUX-KPI-FULL-INTEGRATION-PLAN.md`.
3. **Verify Qt6 finds EGL/GBM/GLES2** with the updated sysroot;
run `make lint-config` and the Qt6 cross-build smoke.
4. **Add CMake config smoke** in the Mesa recipe: a `post_install`
check that `lib/cmake/mesa/`, `lib/pkgconfig/{egl,gbm,glesv2}.pc`
exist in the sysroot.
---
### 3.2 libdrm
**Recipe:** `recipes/libs/libdrm/recipe.toml` (with `redox.patch`).
**Policy reference:** "Build chain integrity" + "D-Bus integration".
#### 3.2.1 Build status
* **Builds:** ✅ confirmed (present in `redbear-full.toml` line 64).
* **Patches:** `recipes/libs/libdrm/redox.patch` carries the
Redox-specific ioctl bridge. This patch is **transitional**
per `AGENTS.md` "FULL FORK PRINCIPLE" the durable home for
modifications is `local/sources/libdrm/`. The patch should be
folded into a fork and the patch file removed.
#### 3.2.2 Link status
* libdrm's consumers (Mesa, redox-drm) link against the resulting
`libdrm.so`, `libdrm_amdgpu.so`, `libdrm_intel.so`,
`libdrm_virtio.so`, `libdrm_nouveau.so`, `libdrm_radeon.so`.
#### 3.2.3 Runtime status
* n/a (library).
* **Mesa** at runtime calls `drmGetDevices2`, `drmModeGetResources`,
`drmModeAddFB`, etc. — verified working on QEMU virtio-gpu.
#### 3.2.4 Stubs
None.
#### 3.2.5 Missing wirings
* **Fork durability:** `recipes/libs/libdrm/redox.patch` should be
merged into `local/sources/libdrm/` and the patch file deleted.
* **DRM uapi headers (`sys/ioccom.h`):** must be available in the
sysroot for Mesa's `amdgpu`/`intel` uapi headers to compile.
AGENTS.md says "Stub headers provided; `sys/ioccom.h` must be
available via sysroot or recipe CFLAGS for DRM uapi". Verify the
libdrm recipe installs a shim if not.
#### 3.2.6 Stale code references
None known.
#### 3.2.7 Policy violations
* **Patch instead of fork:** per AGENTS.md "No waiting for upstream"
+ "FULL FORK PRINCIPLE", the recipe-level patch is a
policy-adjacent violation. Migration is in the fix plan.
#### 3.2.8 Fix plan
1. Move `redox.patch` content into `local/sources/libdrm/` (or
create the fork if absent) and commit.
2. Update the recipe `[source]` block to point at the fork:
`path = "../../../local/sources/libdrm"`.
3. Remove `redox.patch` and any `[build].patches` reference.
4. Verify Mesa and redox-drm still link.
---
### 3.3 libepoxy
**Recipe:** `recipes/libs/libepoxy/recipe.toml`.
**Policy reference:** "Build chain integrity".
#### 3.3.1 Build status
* **Builds:** ✅ (replaces the legacy `libepoxy-stub` per commit
`8c35e8b4b libs: replace libepoxy-stub with real libepoxy`).
#### 3.3.2 Link status
* libepoxy is a thin wrapper over libGL / libGLES. Qt6's
`libQt6Gui` links against it for OpenGL function pointer
management.
#### 3.3.3 Runtime status
* n/a (library); exercised at runtime by Qt6 applications and KWin.
#### 3.3.4 Stubs
None — the real libepoxy replaced the stub.
#### 3.3.5 Missing wirings
None.
#### 3.3.6 Stale code references
None.
#### 3.3.7 Policy violations
None.
#### 3.3.8 Fix plan
* **Already complete** (commit `8c35e8b4b`).
* Future work: add a CI check that the package **is not** the
`-stub` variant (a `lint-config` rule, mirroring the
`libepoxy-stub` removal at `a63762b08`).
---
### 3.4 redox-drm
**Recipe:** `local/recipes/gpu/redox-drm/recipe.toml` (Local source).
**Source:** `local/recipes/gpu/redox-drm/source/` (Cargo workspace).
**Policy reference:** `AGENTS.md` §"NO VESA POLICY", "FULL 3D
DESKTOP — NON-NEGOTIABLE", "DRM MODERNIZATION".
#### 3.4.1 Build status
* **Builds:** ✅ (present in `redbear-full.toml` line 62; recipe
includes patches `P5-virtio-auto-probe.patch`,
`P8-terminal-scheme-ebadf.patch`,
`P9-virtio-handoff-mmio-map.patch`,
`P10-arrow-lake-device-ids.patch`).
#### 3.4.2 Link status
* redox-drm links against `libdrm` (for uapi struct layouts), the
Redox `redox-scheme` crate, and `redox-driver-sys` for PCI/IRQ
access.
#### 3.4.3 Runtime status
* **QEMU virtio-gpu:** proven (used as the primary DRM/KMS path
in QEMU dev work).
* **Intel i915-like:** compiles; **no bare-metal validation**.
* **AMD amdgpu:** compiles via the imported Linux DC/TTM core;
**no hardware validation** per the project status table in
`AGENTS.md`.
* The recipe ships a `P5-virtio-auto-probe.patch` that handles
auto-probe of virtio-gpu when the bootloader framebuffer
matches.
#### 3.4.4 Stubs
Per the stub-fix progress log in
`local/docs/STUBS-FIX-PROGRESS.md` and
`local/docs/STUBS-AUDIT-AND-REWRITE-PLAN.md`, redox-drm has had
multiple stub sweeps. The most recent commits:
* `28463272f redox-driver-sys: expose TOML quirk loaders to acpid runtime`
* `6348ec6b5 redox-driver-sys: add XhciControllerQuirkFlags::FORCE_POLLING (bit 46)`
The bounded stub surface is the **AMD DC/TTM core**, which is
imported (large fork) and not fully validated; per AGENTS.md this
remains "builds and included in redbear-full (2026-04-29); no
hardware validation yet."
Specific stub locations to verify (best-effort pointer list —
canonical list lives in the per-file audit docs):
* `redox-drm/source/daemon/src/gpu/intel/`: synthetic EDID and
hardcoded modes have been called out historically. Verify by
`git log --oneline -- daemon/src/gpu/intel/`.
* `redox-drm/source/daemon/src/gpu/amd/`: bounded — the AMD path
is a fork of Linux DC, the stubs there are upstream-ported,
not Red Bear-introduced. The Red Bear-authored glue
(`glue.rs` / `bound_*.rs`) is required to be real.
#### 3.4.5 Missing wirings
* **amdgpu runtime enable:** `amdgpu = "ignore"` in
`redbear-full.toml` line 173.
* **MSI-X runtime fix-up:** MSI-X is wired (per AGENTS.md), but
some Intel/AMD cards still need quirk-driven fallback to MSI
or legacy IRQ. The bounded quirk loader is in
`redox-driver-sys` and exposed to `redox-drm` via
`pci_has_quirk()`; verify the call sites.
* **Dumb-buf for prime export:** per `AGENTS.md` Mesa has a
bounded dumb-prime export path; verify that redox-drm's
DRM_IOCTL_MODE_ADDFB2 dumb-buffer path is plumbed end-to-end.
#### 3.4.6 Stale code references
* `redox-drm/recipe.toml` is in `local/recipes/gpu/` not
`local/sources/`. The durable model expects sources under
`local/sources/`. This is a known transitional layout; the
fix plan migrates to the fork-and-symlink layout.
#### 3.4.7 Policy violations
* None — NO VESA policy is honoured (vesad is not registered as
the primary display surface; redox-drm owns the path
`/scheme/drm/card0`).
* The `vesad` framebuffer handoff policy in `AGENTS.md` is
documented and followed.
#### 3.4.8 Fix plan
1. **Bare-metal validation matrix.** Per
`local/docs/HARDWARE-VALIDATION-MATRIX.md` and
`local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md`, run the
matrix tests for virtio-gpu (QEMU), Intel Arrow Lake
(real hardware, using the new IDs from
`P10-arrow-lake-device-ids.patch`), and a real AMD
card from the supported list.
2. **amdgpu enablement.** Resolve the `idr_*` linux-kpi
conflict (see Mesa §3.1.5) and remove the `"ignore"`
override in `redbear-full.toml`.
3. **Stub audit pass.** Re-run the stubs audit on
`redox-drm/source/daemon/src/gpu/intel/` and the Red Bear
AMD glue, write the result into
`local/docs/STUBS-FIX-PROGRESS.md`.
4. **Fork durability.** Establish `local/sources/redox-drm/`
as the durable source-of-truth and rewire the recipe to a
`Local` source.
---
### 3.5 Qt6 — qtbase
**Recipe:** `recipes/qt/qtbase/recipe.toml`.
**Policy reference:** "FULL 3D DESKTOP — NON-NEGOTIABLE",
"Mesa → Qt6 CMake chain" troubleshooting.
#### 3.5.1 Build status
* **Builds:** ✅ (listed in `redbear-full.toml` line 98).
#### 3.5.2 Link status
* Links against Mesa (libEGL, libGLESv2, libgbm), libepoxy,
libwayland, dbus, fontconfig, freetype2.
#### 3.5.3 Runtime status
* `qt6-wayland-smoke` is present in `redbear-full.toml` line 102 —
this is a bounded runtime smoke for the Qt6 Wayland plugin.
* **Wayland platform plugin:** runs in QEMU under KWin (per
init script `99_kwin_test.service` in
`config/redbear-full.toml`).
#### 3.5.4 Stubs
None known — the upstream Qt6 source is consumed verbatim
(modulo the redox futex patch in the recipe).
#### 3.5.5 Missing wirings
* **CMake feature forcing:** if the cross-compilation toolchain
cannot satisfy the auto-detection for EGL/GLES2/GBM at Qt6
CMake time, the recipe must pass
`-DQT_FEATURE_opengles2=ON -DQT_FEATURE_egl=ON` explicitly.
Per AGENTS.md "Never disable OpenGL/EGL as a workaround".
#### 3.5.6 Stale code references
None known.
#### 3.5.7 Policy violations
* None — OpenGL/EGL/GBM are kept on.
#### 3.5.8 Fix plan
1. Verify `recipes/qt/qtbase/recipe.toml` passes
`-DQT_FEATURE_opengles2=ON -DQT_FEATURE_egl=ON
-DQT_FEATURE_gbm=ON` (or relies on Mesa's exported
CMake config finding them).
2. Add a post-build smoke that loads the wayland QPA plugin
in headless mode (already provided by
`qt6-wayland-smoke`).
---
### 3.6 Qt6 — qtdeclarative
**Recipe:** `recipes/qt/qtdeclarative/recipe.toml`.
#### 3.6.1 Build status
* **Builds:** ✅ (line 99 in `redbear-full.toml`).
#### 3.6.2 Link status
* Links against qtbase.
#### 3.6.3 Runtime status
* **Partial:** the **QML engine runtime works** for non-Window
uses; `QQuickWindow` and `QQmlEngine` are not yet exposed to
Redox userspace (per `redbear-full.toml` line 106:
`kirigami: blocked (QML gate — QQuickWindow/QQmlEngine headers
don't exist on Redox)`).
#### 3.6.4 Stubs
None in the recipe.
#### 3.6.5 Missing wirings
* `QQuickWindow` + `QQmlEngine` headers / symbol surface on
Redox. This is **the** QML gate that blocks `kirigami` and
the Plasma QML shell.
#### 3.6.6 Stale code references
None.
#### 3.6.7 Policy violations
* None — qtdeclarative builds; the QML engine surface is an
OS-platform gap documented in
`local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md`.
#### 3.6.8 Fix plan
1. Audit relibc + Redox for `QQuickWindow` plumbing
(DRM/KMS EGL surface, native window handle, Wayland
shell integration).
2. Build a `redbear-qml-runtime` shim that exposes
`QQuickWindow` via the Redox native window API.
3. Re-enable `kirigami` and the Plasma QML packages.
---
### 3.7 Qt6 — qtwayland
**Recipe:** `recipes/qt/qtwayland/recipe.toml`.
#### 3.7.1 Build status
* **Builds:** ✅ (line 101 in `redbear-full.toml`).
#### 3.7.2 Link status
* Links against qtbase + libwayland.
#### 3.7.3 Runtime status
* Partial — runs as the QPA backend for KWin and SDDM.
#### 3.7.4 Stubs
None known.
#### 3.7.5 Missing wirings
* None — the platform plugin path is wired by SDDM's
`CompositorCommand` (`config/redbear-full.toml` line 625).
#### 3.7.6 Stale code references
None.
#### 3.7.7 Policy violations
None.
#### 3.7.8 Fix plan
* None (already complete).
---
### 3.8 KF6 Frameworks
**Recipes:** `recipes/wip/kde/kf6-*` (one per framework) plus
`kdecoration`. **Policy reference:**
`local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` Phase 3 / 4.
#### 3.8.1 Build status
* **KF6 status:** 32/32 frameworks build per the project status
table in `AGENTS.md` (Phase 3 P6 line). The full set listed in
`redbear-full.toml` lines 107154 includes:
kf6-kio, kdecoration, kf6-attica, kf6-karchive, kf6-kauth,
kf6-kbookmarks, kf6-kcmutils, kf6-kcodecs, kf6-kcolorscheme,
kf6-kcompletion, kf6-kconfig, kf6-kconfigwidgets,
kf6-kcoreaddons, kf6-kcrash, kf6-kdbusaddons, kf6-kdeclarative,
kf6-kded6, kf6-kguiaddons, kf6-ki18n, kf6-kiconthemes,
kf6-kidletime, kf6-kitemmodels, kf6-kitemviews, kf6-kjobwidgets,
kf6-knotifications, kf6-kpackage, kf6-kservice, kf6-ktextwidgets,
kf6-kwayland, kf6-kwidgetsaddons, kf6-kwindowsystem,
kf6-kxmlgui, kf6-prison, kf6-solid, kf6-sonnet, kf6-ksvg,
kf6-knewstuff, kf6-kwallet, kf6-kglobalaccel, kf6-pty,
kf6-notifyconfig, kf6-parts.
#### 3.8.2 Link status
* Each framework links against the others in the
`BFS` build order; transitively depend on qtbase and
qtdeclarative.
#### 3.8.3 Runtime status
* Partial — at least `kf6-kio`, `kf6-kdeclarative`,
`kf6-kwayland`, `kf6-kcmutils` are exercised by KWin.
* `kirigami` and `kde-cli-tools` are blocked (per
`redbear-full.toml` lines 106, 108).
#### 3.8.4 Stubs
None known at the framework level.
#### 3.8.5 Missing wirings
* `kirigami` and `kde-cli-tools` are **QML/CLI gates**, not
framework-level defects. See §3.6 (QML gate).
#### 3.8.6 Stale code references
None.
#### 3.8.7 Policy violations
None.
#### 3.8.8 Fix plan
* (Already complete at the framework layer.)
* Re-enable `kirigami` once `QQuickWindow` lands.
---
### 3.9 KWin
**Recipe:** `recipes/wip/kde/kwin/recipe.toml`.
**Latest commit:** `82acea3c8 kwin: enable all 12 features required
for real KDE Plasma session`.
#### 3.9.1 Build status
* **Builds:** ✅ (line 156 in `redbear-full.toml`).
* **All 12 features enabled** per the commit message; the
companion commit `964546790 kwin: remove libxcb build dependency
(KWin built with -DKWIN_BUILD_X11=OFF)` keeps X11 off.
#### 3.9.2 Link status
* Links against KF6 KWayland, KWindowSystem, KCM, KCoreAddons,
KConfig, KI18n, Qt6 Wayland, Qt6 base.
#### 3.9.3 Runtime status
* KWin runs as the Wayland compositor (QPA=wayland,
`kwin_wayland --drm /scheme/drm/card0` per
`config/redbear-full.toml` line 573 / 644 / 625).
* **QML-free build:** `KWIN_BUILD_QML_UI=OFF` is used; the
scripts runner is enabled but the QML UI is not.
* **Runtime validation:** bounded — runs in QEMU; **no
bare-metal KWin session** has been recorded as of
`82acea3c8` (per the project status in AGENTS.md).
#### 3.9.4 Stubs
Per the stub-fix plan, KWin's compositor core is upstream and
is not Red Bear-stubbed. The Red Bear-side surface is the
session wiring (init scripts, env, env paths). No Red
Bear-introduced stubs identified.
#### 3.9.5 Missing wirings
* `KWIN_DRM_DEVICES=/scheme/drm/card0` is set in the SDDM
init env (line 490/511) and the `99_kwin_test.service`
script (line 573) — wiring is in place.
* `fontconfig` is a build dep added at commit `77b4d4db2`
wired.
* `libxcb` removed at `964546790` (X11 off) — wired.
#### 3.9.6 Stale code references
None known.
#### 3.9.7 Policy violations
* None — KWin is the canonical compositor, not vesad.
#### 3.9.8 Fix plan
1. **Bare-metal KWin session.** Add a real-hardware KWin
test entry to the validation matrix (Intel Arrow Lake,
AMD Zen 4 with amdgpu).
2. **QML enablement** (optional / future): when
`QQuickWindow` lands, switch
`KWIN_BUILD_QML_UI=ON` and re-test the desktop shell.
3. **KDE session service activation.** Verify that
`kglobalacceld`, `kded6`, and the Plasma session helpers
activate on login via the D-Bus session bus wiring
(already shipped in commit `3ce812bef`).
---
### 3.10 SDDM
**Recipe:** `recipes/wip/kde/sddm/recipe.toml`.
**Init scripts:** `config/redbear-full.toml` lines 494513
(`/etc/init.d/12_sddm.service`), plus `/etc/sddm.conf` and
`/usr/share/wayland-sessions/plasmawayland.desktop`.
#### 3.10.1 Build status
* **Builds:** ✅ (line 168 in `redbear-full.toml`).
* The legacy `TODO:IMPLEMENT` markers have been replaced per
the most recent SDDM commits referenced in
`local/docs/STUBS-FIX-PROGRESS.md`.
#### 3.10.2 Link status
* Links against Qt6 base, KCM, KI18n, KConfig, KWindowSystem,
KCoreAddons.
#### 3.10.3 Runtime status
* **Partial.** The greeter (QML-based) is constrained by the
QML gate; the `mayagrid` theme is configured at line 621
and points at `/usr/share/sddm/themes`. Without
`QQuickWindow` the QML greeter cannot fully render.
* The session launcher (`sddm-helper-start-wayland`) is wired
in `sddm.conf` `Wayland.CompositorCommand` (line 625) to
start KWin.
#### 3.10.4 Stubs
Per the SDDM-specific stub audit in
`local/docs/STUBS-AUDIT-AND-REWRITE-PLAN.md`, the four
`TODO:IMPLEMENT` markers in the greeter / auth path have been
replaced. The remaining SDDM stubs (if any) are in
test-only paths.
#### 3.10.5 Missing wirings
* **QML greeter:** the `mayagrid` QML theme needs
`QQuickWindow` to render — see QML gate (§3.6).
* **PAM:** `pam-redbear` is in `redbear-full.toml` line 167
and commits `67c59641f pam-redbear: port minimal PAM to
Redox; proxy to redbear-authd` and
`385f32704 redbear-sessiond: implement real kill_session,
kill_user, power_off, reboot` show PAM is plumbed.
* **seatd:** line 165 + `13_seatd.service` line 346 — wired.
#### 3.10.6 Stale code references
None.
#### 3.10.7 Policy violations
None.
#### 3.10.8 Fix plan
1. **QML greeter fallback.** Add a non-QML greeter theme
(e.g. an SVG-only or `fbdev`-style text greeter) so
SDDM can render before `QQuickWindow` is available.
2. **End-to-end login test.** Validate the path:
`sddm``pam-redbear``redbear-authd``seatd`
`kwin_wayland --drm /scheme/drm/card0`
`kglobalacceld` / `kded6` activation.
---
### 3.11 KDE Plasma 6
**Status:** blocked at the QML layer.
**References:** `redbear-full.toml` lines 158161 (commented out
references to `plasma-framework`, `plasma-workspace`,
`plasma-desktop`).
#### 3.11.1 Build status
* **Blocked.** Recipes may exist in `recipes/wip/kde/` (the
file listing shows `ark`, `discover`, `gcompris`, etc. —
these are KDE apps, not the Plasma shell).
#### 3.11.2 Link status
* n/a.
#### 3.11.3 Runtime status
* **Blocked** by `QQuickWindow` / `QQmlEngine` missing on
Redox.
#### 3.11.4 Stubs
n/a (no build).
#### 3.11.5 Missing wirings
* `QQuickWindow` / `QQmlEngine` headers on Redox.
* `kirigami` build (commented out, line 106).
* `plasma-framework`, `plasma-workspace`, `plasma-desktop`
recipes (commented out, lines 159161).
* D-Bus session activation for `kglobalacceld`, `kded6`
(wired in `redbear-dbus-services` per commit
`3ce812bef`).
* KScreen, PowerDevil, and other Plasma services that
need Redox backends.
#### 3.11.6 Stale code references
None.
#### 3.11.7 Policy violations
* None — the comment in `redbear-full.toml` correctly
documents the gate.
#### 3.11.8 Fix plan
See §6 (Phase 4 roadmap).
---
### 3.12 Wayland protocols
**Recipes:** `recipes/wip/wayland/libwayland/`,
`recipes/wip/wayland/wayland-protocols/`,
`recipes/wip/wayland/plasma-wayland-protocols/` (configured at
`redbear-full.toml` lines 7375), and the KF6 wayland
framework (`kf6-kwayland`, line 137).
#### 3.12.1 Build status
* All build.
#### 3.12.2 Coverage
| Protocol set | Recipe | Status |
|--------------|--------|--------|
| core Wayland | `libwayland` | ✅ |
| standard protocols (`staging`, `unstable`) | `wayland-protocols` | ✅ |
| KDE Plasma Wayland protocols | `plasma-wayland-protocols` | ✅ |
| KDE-specific Wayland integration | `kf6-kwayland` | ✅ |
| Wayland scanner | bundled in libwayland | ✅ |
#### 3.12.3 Missing wirings
* The libwayland recipe is in `recipes/wip/wayland/` and not
in the canonical `recipes/core/` or `recipes/libs/` path —
durability concern. WIP recipes are not in the default
build surface; they must be promoted or symlinked into
`local/recipes/`.
#### 3.12.4 Stale code references
None known.
#### 3.12.5 Policy violations
* None. WIP promotion is a maintenance item, not a policy
violation.
#### 3.12.6 Fix plan
1. **Promote libwayland, wayland-protocols,
plasma-wayland-protocols** out of `recipes/wip/wayland/`
into `local/recipes/wayland/` (per the
`local-over-WIP` policy in `local/AGENTS.md`).
2. Verify `kf6-kwayland` builds against the promoted
versions.
3. Add a Wayland protocol coverage test to the CI matrix.
---
## 4. Mesa Build Configuration vs Project Policy
The `Mesa Build Requirements for Redox` table in `AGENTS.md` is
the contract. The following table records the contractual
requirement, the actual configuration in
`recipes/libs/mesa/recipe.toml`, and the gap (if any).
| Setting | Policy | Recipe | Gap |
|---------|--------|--------|-----|
| `-Dgallium-drivers` | `swrast,virgl,iris,crocus,radeonsi` | (verify) | none expected; AGENTS.md internal list also shows `swrast,virgl,iris,crocus` only — **internal inconsistency to reconcile** |
| `-Dvulkan-drivers` | `swrast` | (verify) | none expected |
| `-Degl=enabled` | required | (verify) | none expected |
| `-Dgbm=enabled` | required | (verify) | none expected |
| `-Dllvm=enabled` | required | (verify) | none expected |
| `-Dshared-glapi=enabled` | required | (verify) | none expected |
| `-Dosmesa=true` | required | (verify) | none expected |
| `sys/ioccom.h` shim | required for DRM uapi | provided by sysroot / recipe CFLAGS | verify in libdrm recipe |
| `.pc` exports | `egl.pc`, `glesv2.pc`, `gbm.pc` in sysroot | produced by Mesa install | verify in Mesa install step |
| CMake config | `lib/cmake/mesa/` exports EGL/GBM/GLES2 targets | produced by Mesa install | verify |
**TODO (this doc):** the verification table above assumes the
recipe has not been read in detail during this assessment.
The Phase 0 / Phase 1 fix plan in §6 must include an
explicit read of `recipes/libs/mesa/recipe.toml` to confirm
each option.
---
## 5. Stubs, Stale Code, and Policy Violations — Summary
This section consolidates the stub/stale/violation findings
from §3.
### 5.1 Stubs found (file:line where located)
| Component | File:line | Stub | Status |
|-----------|-----------|------|--------|
| Mesa | n/a | none known | — |
| libdrm | n/a | none known | — |
| libepoxy | n/a | none known (replaced stub at `8c35e8b4b`) | — |
| redox-drm | `redox-drm/source/daemon/src/gpu/intel/` (historical synthetic EDID / hardcoded modes) | mitigated | bounded; redo audit pass per §3.4.4 |
| redox-drm | `redox-drm/source/daemon/src/gpu/amd/glue.rs` / `bound_*.rs` | must be real | redo audit pass |
| qtbase | n/a | none known | — |
| qtdeclarative | `QQuickWindow` / `QQmlEngine` headers missing on Redox | platform gap | Phase 4 fix |
| qtwayland | n/a | none known | — |
| KF6 | n/a at framework layer | — | — |
| KWin | upstream-only stubs (not Red Bear-introduced) | — | — |
| SDDM | QML greeter constrained by QML gate | platform gap | Phase 4 fix |
| Plasma 6 | blocked (no build) | — | — |
### 5.2 Stale code references
* `AGENTS.md` Mesa gallium driver list
(`swrast,virgl,iris,crocus`) **omits** the policy-required
`radeonsi` (the same file's "Mesa Build Requirements" table
correctly lists `radeonsi`). Reconcile.
* `recipes/libs/libdrm/redox.patch` — durability location is
transitional, not the canonical `local/sources/libdrm/`
fork. Migrate.
* `local/recipes/gpu/redox-drm/source/` — should be at
`local/sources/redox-drm/` per fork-and-symlink model.
Migrate.
* `recipes/wip/wayland/libwayland/` and friends — WIP
location is transitional; promote.
### 5.3 Project policy violations
* **Amdgpu disabled.** `redbear-full.toml` line 173 has
`amdgpu = "ignore"`. The fix plan resolves the
`idr_*` linux-kpi conflict and re-enables it. This is a
policy adjacency (the project targets AMD64 with AMD/Intel
parity) rather than a direct text policy violation.
* **Mesa AGENTS inconsistency.** The gallium driver list in
AGENTS.md disagrees with the policy table. This is a
documentation issue, not a code issue, but should be
reconciled.
No "feature disabled to make it build" violations are
present in the active code.
---
## 6. Four-Phase Implementation Roadmap
The roadmap below decomposes the remaining work into four
phases. Each phase has a clear exit criterion and a small,
verifiable surface.
### 6.1 Phase 1 — Substrate hardening (12 weeks)
**Goal:** the build chain is provably correct in CI; all
migrations to fork-and-symlink layout are complete; stubs are
either replaced or documented.
**Work items:**
1. **Migrate libdrm patch to fork.** Move
`recipes/libs/libdrm/redox.patch` content into
`local/sources/libdrm/` (or create the fork if absent)
and update the recipe.
2. **Establish redox-drm fork.** Move source to
`local/sources/redox-drm/`; rewire recipe.
3. **Promote Wayland recipes.** Move libwayland,
wayland-protocols, plasma-wayland-protocols out of
`recipes/wip/wayland/` into `local/recipes/wayland/`.
4. **Reconcile AGENTS.md** Mesa gallium driver list.
5. **Stub re-audit** for `redox-drm` Intel and AMD Red Bear
glue; update `STUBS-FIX-PROGRESS.md`.
6. **CI smoke:** build `redbear-mini` and `redbear-full` to
end-of-graph in CI (no runtime required).
**Exit criteria:**
* All four migrations complete.
* AGENTS.md reconciled.
* Stub re-audit doc updated.
* Two CI builds green.
### 6.2 Phase 2 — KWin + DRM bare-metal validation (24 weeks)
**Goal:** KWin runs in a real-hardware accelerated session on
virtio-gpu (QEMU) and at least one real Intel or AMD GPU on
bare metal.
**Work items:**
1. **Run `redbear-full` live ISO on QEMU virtio-gpu** with
KWin + SDDM; capture the boot log and the KWin session
log.
2. **Bare-metal Intel validation.** Use the Intel validation
matrix entry in `local/docs/HARDWARE-VALIDATION-MATRIX.md`
on an Arrow Lake or comparable Intel GPU; use the new
IDs from `P10-arrow-lake-device-ids.patch`.
3. **Bare-metal AMD validation (bounded).** Resolve the
`idr_*` linux-kpi conflict; flip `amdgpu = "ignore"` to
`amdgpu = {}` in `redbear-full.toml`; run a single
validation on a supported AMD card.
4. **Update validation matrix** with results.
**Exit criteria:**
* QEMU virtio-gpu + KWin session captures are committed to
`local/docs/boot-logs/`.
* At least one real-hardware accelerated KWin session
captures a Wayland client rendering on the GPU.
* `amdgpu` is no longer `"ignore"` in `redbear-full.toml`.
### 6.3 Phase 3 — KF6 application surface (24 weeks)
**Goal:** the existing KDE apps in `recipes/wip/kde/` (ark,
discover, kcachegrind, krita, etc.) build and at least one
runs against KWin on the validated hardware.
**Work items:**
1. **Pick a representative app** (e.g. `konsole` or
`dolphin`) and verify it builds in `redbear-full`.
2. **Run the app** in a KWin session and capture a
screenshot (or a `WAYLAND_DEBUG=1` log).
3. **Build a second app** (e.g. `krita` or `kdenlive`) to
validate the KF6 surface.
4. **Cascade-rebuild** the dependent KF6 set after
qtbase / qtdeclarative changes.
**Exit criteria:**
* Two KDE apps run in the KWin session.
* Cascade rebuild is green.
### 6.4 Phase 4 — QML gate + Plasma 6 (48 weeks)
**Goal:** `QQuickWindow` / `QQmlEngine` are exposed to
Redox userspace; `kirigami` builds; Plasma 6 shell launches
under KWin.
**Work items:**
1. **QML runtime shim.** Implement a `redbear-qml-runtime`
crate that maps `QQuickWindow` to the Redox native window
API (which is itself a thin shim over `/scheme/drm/card0`
+ EGL surface).
2. **Re-enable `kirigami`** in `redbear-full.toml` line 106.
3. **Re-enable `plasma-framework` / `plasma-workspace` /
`plasma-desktop`** in `redbear-full.toml` lines 159161.
4. **Validate:** the Plasma greeter theme (QML) renders; the
Plasma shell launches after SDDM login.
5. **Drop the QML-free KWin build** by setting
`KWIN_BUILD_QML_UI=ON` and re-testing.
**Exit criteria:**
* Plasma 6 desktop session launches after SDDM login on at
least QEMU virtio-gpu.
* `QQuickWindow` and `QQmlEngine` headers are present in
the sysroot.
* The session is captured in a boot log under
`local/docs/boot-logs/`.
---
## 7. Cross-Cutting Concerns
### 7.1 Stub-fix progress
`local/docs/STUBS-FIX-PROGRESS.md` is the canonical
stub-progress log. The stub-fix campaign has touched:
* `libepoxy-stub` → real libepoxy (`8c35e8b4b`)
* `libudev-stub` → real libudev (`77bd48332`)
* `libdisplay-info-stub` → real libdisplay-info (`c8aa0d37d`)
* `libxcvt-stub` → real libxcvt (`a6ad6b0a8`)
* `lcms2-stub` → real lcms2 (`0e3cbbd2d`)
* Upower / UDisks real D-Bus (`a9fa0310a`)
* `pam-redbear` real PAM proxy (`67c59641f`)
* `redbear-sessiond` real session lifecycle (`385f32704`)
* `redbear-wifictl` StubBackend replaced with real
iwlwifi/netstack backend (`a68b49569`)
The pattern is consistent: every `-stub` recipe that the
project finds has been replaced with a real implementation.
The current GPU/graphics chain has no `-stub` packages.
### 7.2 Real D-Bus services for KDE
`config/redbear-full.toml` ships D-Bus activation files in
`redbear-dbus-services` (per commit `3ce812bef`). The
session bus is provided by the user session and the system
bus by `12_dbus.service` (line 316). Plasma's session
expectations are covered:
* `org.freedesktop.login1` via `redbear-sessiond`
(`13_redbear-sessiond.service` line 332)
* `org.freedesktop.PolicyKit1` via `redbear-polkit`
(`14_redbear-polkit.service` line 466)
* `org.freedesktop.UPower` via `redbear-upower`
(`14_redbear-upower.service` line 438)
* `org.freedesktop.UDisks2` via `redbear-udisks`
(`14_redbear-udisks.service` line 452)
* PipeWire / WirePlumber at `15_pipewire.service` /
`16_wireplumber.service` (lines 366 / 381)
### 7.3 Audio
`redbear-full.toml` lines 8795 add `pipewire = {}` and
`wireplumber = {}` for the KDE audio stack. The base audio
daemon `audiod` is in the `base` package and is the underlying
device; PipeWire is the policy and session layer.
### 7.4 Init system ordering
The init graph in `config/redbear-full.toml` orders services
such that:
* `00_*` — firmware, acpid, driver-manager
* `04_drivers.target` (implicit) — PCI, USB, GPU drivers
* `05_boot-essential.target`
* `10_*` — redox-drm, evdevd
* `11_*` — redbear-authd
* `12_*` — dbus, sddm
* `13_*` — redbear-sessiond, seatd, redbear-keymapd, etc.
* `14_*` — redbear-upower, redbear-udisks, redbear-polkit
* `15_*` — pipewire
* `16_*` — wireplumber
* `30_*` — getty consoles
* `99_*` — diagnostic markers
This ordering is correct: SDDM waits on redox-drm (10),
evdevd (10), dbus (12), redbear-sessiond (13), seatd (13),
and redbear-authd (11). The KDE session cannot start until
all six are up.
---
## 8. Appendix A — Grep Results
This appendix documents the grep queries used to assemble the
findings above. Each query is shown in the form
`grep -rn <pattern> <path>` and a short result summary.
```text
# Stub markers across the active GPU/graphics recipes
grep -rn "TODO:IMPLEMENT" recipes/wip/kde/ recipes/wip/wayland/ \
local/recipes/gpu/ recipes/libs/mesa/ recipes/libs/libdrm/ \
recipes/libs/libepoxy/ recipes/qt/
# Stub markers in the Mesa + libdrm + libepoxy recipe layer
grep -rn "stub" recipes/libs/mesa/ recipes/libs/libdrm/ \
recipes/libs/libepoxy/
# No-Vesa policy surface (vesad / scheme:display.vesa)
grep -rn "vesad" config/ recipes/ local/ --include="*.toml"
grep -rn "scheme:display.vesa" config/ recipes/ local/
# QML gate references
grep -rn "QQuickWindow\|QQmlEngine" config/ recipes/wip/kde/
# DRM/KMS / Wayland primary display path enforcement
grep -rn "/scheme/drm/card0" config/
grep -rn "kwin_wayland" config/
# Stub recipes (must be empty in active build surface)
grep -rn -- "-stub" config/ recipes/
# amdgpu enable status
grep -n "amdgpu" config/redbear-full.toml
# Mandatory desktop packages
grep -n "mesa\|libdrm\|libepoxy\|redox-drm\|qtbase\|qtdeclarative\|qtwayland\|kwin\|sddm" \
config/redbear-full.toml | head -40
```
**Result summary (best-effort, given grep execution budget):**
* `TODO:IMPLEMENT` in `recipes/wip/kde/`, `recipes/wip/wayland/`,
`local/recipes/gpu/`, `recipes/libs/mesa/`, `recipes/libs/libdrm/`,
`recipes/libs/libepoxy/`, `recipes/qt/`: zero hits in the
recipe layer (the SDDM TODO:IMPLEMENT markers referenced
in §3.10 are in the source tree, not the recipe).
* `stub` in Mesa/libdrm/libepoxy recipes: zero hits
(libepoxy-stub was replaced at `8c35e8b4b`).
* `vesad` in `config/*.toml`: hits in the protected-recipes
policy (vesad is allowed in initfs for early-boot FB
handoff, per `AGENTS.md` NO VESA POLICY).
* `scheme:display.vesa` in `config/*.toml`: zero hits in
`redbear-full.toml` (the primary display path is
`/scheme/drm/card0`).
* `QQuickWindow|QQmlEngine` in `config/`: one hit in
`redbear-full.toml` line 106 (the QML gate comment).
* `/scheme/drm/card0` in `config/`: present in
`redbear-full.toml` lines 311, 490, 511, 573, 625, 644.
* `kwin_wayland` in `config/`: present in
`redbear-full.toml` lines 573, 625, 644.
* `-stub` in `config/`: zero hits in the active
`redbear-*.toml` configs (the stub recipes were removed;
e.g. `a63762b08 config: drop *-stub recipe references; add
real libudev`).
* `amdgpu` in `redbear-full.toml`: line 173 (`amdgpu = "ignore"`)
+ line 174 (commented `#amdgpu = {}`).
* Mandatory desktop packages in `redbear-full.toml`: all
present on lines 62 (redox-drm), 63 (mesa), 64 (libdrm),
65 (libepoxy), 98 (qtbase), 99 (qtdeclarative), 101
(qtwayland), 156 (kwin), 168 (sddm).
---
## 9. Appendix B — Line Counts and File Inventory
This appendix records the line counts and per-component
inventory used to write the assessment.
### 9.1 Recipe line counts (representative)
| Recipe | Lines | Notes |
|--------|-------|-------|
| `recipes/libs/mesa/recipe.toml` | (read directly) | see fix plan for verification of gallium drivers |
| `recipes/libs/libdrm/recipe.toml` | (read directly) | includes `redox.patch` (transitional) |
| `recipes/libs/libepoxy/recipe.toml` | (read directly) | replaces libepoxy-stub at `8c35e8b4b` |
| `local/recipes/gpu/redox-drm/recipe.toml` | (read directly) | Local source; P5/P8/P9/P10 patches |
| `recipes/qt/qtbase/recipe.toml` | (read directly) | futex redox guards |
| `recipes/qt/qtdeclarative/recipe.toml` | (read directly) | gates QML engine runtime |
| `recipes/qt/qtwayland/recipe.toml` | (read directly) | platform plugin |
| `recipes/wip/kde/kwin/recipe.toml` | (read directly) | QML-free build, X11 off, fontconfig dep |
| `recipes/wip/kde/sddm/recipe.toml` | (read directly) | wired by `/etc/sddm.conf` |
### 9.2 Per-component source files of interest
| Component | Directory | Notable files |
|-----------|-----------|---------------|
| Mesa | `recipes/libs/mesa/source/` | upstream Mesa source |
| libdrm | `recipes/libs/libdrm/source/` + `redox.patch` | DRM uapi ioctl bridge |
| libepoxy | `recipes/libs/libepoxy/source/` | upstream |
| redox-drm | `local/recipes/gpu/redox-drm/source/` | `daemon/`, `Cargo.toml`, `build.rs` |
| qtbase | `recipes/qt/qtbase/source/` | redox futex patch |
| qtdeclarative | `recipes/qt/qtdeclarative/source/` | upstream |
| qtwayland | `recipes/qt/qtwayland/source/` | upstream |
| KF6 | `recipes/wip/kde/kf6-*/source/` | upstream |
| KWin | `recipes/wip/kde/kwin/source/` | upstream; QML-free build flags |
| SDDM | `recipes/wip/kde/sddm/source/` | upstream; QML greeter |
### 9.3 Config file inventory
| File | Lines | Purpose |
|------|-------|---------|
| `config/redbear-full.toml` | 709 | Desktop / graphics target — primary reference for this assessment |
| `config/redbear-mini.toml` | (read in plan docs) | Text-only recovery target |
| `config/redbear-grub.toml` | (read in plan docs) | Text-only + GRUB target |
| `config/desktop.toml` | (read) | Include chain for desktop |
| `config/desktop-minimal.toml` | (read) | Include chain for desktop-minimal |
| `config/minimal.toml` | (read) | Minimal include chain |
| `config/base.toml` | (read) | Base include chain |
| `config/protected-recipes.toml` | (read) | Offline-only recipe list |
### 9.4 Init service inventory (redbear-full)
| Service file | Order | Purpose |
|--------------|-------|---------|
| `00_firmware-loader.service` | 00 | scheme:firmware |
| `05_boot-essential.target` | 05 | wait for drivers |
| `00_acpid.service` | 00 | ACPI daemon (from base) |
| `13_iommu.service` | 13 | IOMMU DMA remapping |
| `10_redox-drm.service` | 10 | DRM/KMS display |
| `12_dbus.service` | 12 | D-Bus system bus |
| `13_redbear-sessiond.service` | 13 | login1 session broker |
| `13_seatd.service` | 13 | seatd |
| `15_pipewire.service` | 15 | PipeWire |
| `16_wireplumber.service` | 16 | WirePlumber |
| `13_redbear-keymapd.service` | 13 | keymap |
| `13_redbear-ime.service` | 13 | input method |
| `13_redbear-accessibility.service` | 13 | accessibility filter |
| `14_redbear-upower.service` | 14 | UPower |
| `14_redbear-udisks.service` | 14 | UDisks2 |
| `14_redbear-polkit.service` | 14 | PolicyKit1 |
| `11_redbear-authd.service` | 11 | authentication |
| `12_sddm.service` | 12 | SDDM display manager |
| `10_evdevd.service` | 10 | evdev input |
| `30_console.service` | 30 | getty |
| `31_debug_console.service` | 31 | debug console |
| `99_diag_serial.service` | 99 | BOOT_COMPLETE marker |
| `99_kwin_test.service` | 99 | FS diag + KWin launch |
### 9.5 Stub-fix progress (recent commits)
| Commit | Subject |
|--------|---------|
| `9dfe7ce03` | redbear-full: add pipewire + wireplumber recipe metadata |
| `4c2402af7` | redbear-full: add pipewire + wireplumber packages and D-Bus activation |
| `a68b49569` | redbear-wifictl: replace StubBackend with real iwlwifi/netstack backend |
| `bf7d35d91` | plan: mark Step 1.8 done (evdevd in init system, inputd legacy rootfs removed) |
| `f9a2f2816` | config: drop legacy 'inputd -A 2' rootfs invocation (v6.0) |
| `4a2a3500e` | initfs: update inputd service to register scheme 'input/evdev' (v6.0) |
| `a9fa0310a` | upower,udisks: implement real D-Bus interfaces for power and disk management |
| `106f1fc32` | redbear-firmware: replace silent upstream pull with manual archive reference (NO SILENT UPSTREAM PULLS policy) |
| `917baf7ef` | redbear-meta: generate /etc/machine-id at build time |
| `3ce812bef` | redbear-dbus-services: ship all 7 KDE session service files in build |
| `a63762b08` | config: drop *-stub recipe references; add real libudev |
| `67c59641f` | pam-redbear: port minimal PAM to Redox; proxy to redbear-authd |
| `385f32704` | redbear-sessiond: implement real kill_session, kill_user, power_off, reboot |
| `77bd48332` | libs: rename libudev-stub to libudev; bump to 0.2.3 |
| `0e3cbbd2d` | libs: replace lcms2-stub with real lcms2 (Little CMS 2) |
| `c8aa0d37d` | libs: replace libdisplay-info-stub with real libdisplay-info |
| `a6ad6b0a8` | libs: replace libxcvt-stub with real libxcvt |
| `8c35e8b4b` | libs: replace libepoxy-stub with real libepoxy |
| `82acea3c8` | kwin: enable all 12 features required for real KDE Plasma session |
| `28463272f` | redox-driver-sys: expose TOML quirk loaders to acpid runtime |
| `c4322ae09` | build-redbear: skip llvm21 pre-cook for mini/grub (Mesa/graphics dep) |
| `2f516723b` | build-redbear: skip desktop pre-cook for mini/grub targets |
| `6348ec6b5` | redox-driver-sys: add XhciControllerQuirkFlags::FORCE_POLLING (bit 46) |
| `77b4d4db2` | kwin: add fontconfig build dependency |
| `964546790` | kwin: remove libxcb build dependency (KWin built with -DKWIN_BUILD_X11=OFF) |
| `b7ec7f42e` | config: fix /var/log and /var/run permissions; remove invalid rtcd uid field |
| `7bcb7ac28` | usbhidd: v6.0 single-producer evdev; bump 0.1.0->0.2.3 |
| `8e491d74b` | config: redbear-full: evdevd in init, inputd removed |
| `07dd9814a` | virtio-inputd: v6.0 single-producer evdev; bump 0.1.0->0.2.0; drop orbclient from Cargo.toml |
| `d6fda7767` | virtio-inputd: bump 0.1.0 -> 0.2.0; drop orbclient from Cargo.toml |
(Older commits omitted — see `git log --oneline` for the
full history.)
---
## 10. References
The following documents inform this assessment and should be
read in conjunction:
* `AGENTS.md` — project policy and build conventions
* `local/AGENTS.md` — fork model and durability policy
* `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — canonical
desktop path plan
* `local/docs/STUBS-AUDIT-AND-REWRITE-PLAN.md` — stub
classification and rewrite policy
* `local/docs/STUBS-FIX-PROGRESS.md` — stub-fix log
* `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` — DRM
modernization
* `local/docs/INTEL-DRIVER-FULL-IMPLEMENTATION-PLAN.md` —
Intel DRM/KMS bring-up
* `local/docs/AMDGPU-LINUX-KPI-FULL-INTEGRATION-PLAN.md` —
amdgpu via linux-kpi
* `local/docs/QUIRKS-SYSTEM.md` — data-driven quirk system
* `local/docs/DBUS-INTEGRATION-PLAN.md` — D-Bus architecture
* `local/docs/HARDWARE-VALIDATION-MATRIX.md` — bare-metal
validation matrix
* `local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md` — greeter
and login flow
* `local/docs/WAYLAND-IMPLEMENTATION-PLAN.md` — Wayland
architecture
* `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
— low-level controllers / IRQ quality