# 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 494–513 | | 11 | Plasma 6 (workspace/desktop/framework) | not present in `redbear-full.toml` (commented out at line 159–161) | — | 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 107–154 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 494–513 (`/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 158–161 (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 159–161). * 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 73–75), 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 (1–2 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 (2–4 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 (2–4 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 (4–8 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 159–161. 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 87–95 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 ` 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