Plan-only artifact for the 0.2.5 graphics path. No recipe.toml changes, no build attempted. Documents: - Per-recipe upstream-latest-stable versions resolved via download.qt.io, download.kde.org, gitlab.freedesktop.org, and git ls-remote on invent.kde.org projects (no human guessing). - Pre-build actions required (re-pull, re-blake3, validate-patches). - Patch surface to re-evaluate across 17-minor KF6 bump and 1-minor KWin bump. - Mesa fork situation (24.0.8 vs 26.1.4): freeze at current fork, rebase is 0.3.0 work. - Freeze-when-green criteria for cutting 0.2.5. - Out-of-scope items (Plasma workspace, real libepoxy, etc.). Decisions in this plan are reversible; no recipe.toml field has been modified. All work-in-progress from prior session is preserved as uncommitted files in the working tree.
26 KiB
Red Bear OS 0.2.5 — Graphics Path Freeze Plan
Status: Plan-only, no build. Branch: 0.2.5 (created from 0.2.4@cd3950072e).
Generated: 2026-07-02.
Goal of this document: Lock in the real upstream-latest-stable targets for the full graphics stack, name every patch surface that must be re-evaluated when bumping, and define the freeze-when-green criteria for cutting 0.2.5.
Sources of truth used for version resolution: Qt:
https://download.qt.io/official_releases/qt/(authoritative) KDE:https://download.kde.org/stable/{frameworks,plasma}/Mesa / libdrm / Wayland:https://gitlab.freedesktop.org/KDE git:https://invent.kde.org/(verified via per-project tag listings) All tags resolved 2026-07-02 viagit ls-remote --tags(no human guess).
1. Scope of the graphics path
Per redbear-full.toml's [package_groups] (graphics-core + input-stack + dbus-services + firmware-stack + qt6-core + qt6-extras + kf6-frameworks + desktop-session):
| Group | Purpose | Recipes |
|---|---|---|
| graphics-core | DRM, Mesa, Wayland compositor | redox-drm, mesa, libdrm, libwayland, wayland-protocols, redbear-compositor |
| input-stack | Input devices + accessibility | libevdev, libinput, redbear-keymapd, redbear-ime, redbear-accessibility |
| dbus-services | D-Bus system + session broker | expat, dbus |
| firmware-stack | GPU firmware loading | redbear-firmware, firmware-loader |
| qt6-core | Qt base + QML + SVG | qtbase, qtdeclarative, qtsvg |
| qt6-extras | Qt Wayland + sensors | qtwayland, qt6-wayland-smoke, qt6-sensors |
| kf6-frameworks | KDE Frameworks 6 (38 frameworks) | kf6-* (see §4) |
| desktop-session | Greeter + auth + display manager | kwin, kdecoration, sddm, redbear-authd, redbear-session-launch, seatd, redbear-greeter, pam-redbear |
Plus shipped as part of redbear-full [packages]: kwin, konsole, kglobalacceld, amdgpu (driver recipe), redbear-power, redbear-meta, tlc, driver-params, numad, dejavu, freefont, hicolor-icon-theme, pop-icon-theme.
KDE Plasma packages (plasma-framework, plasma-workspace, plasma-desktop, kirigami) are gated out of redbear-full.toml and remain on the next-iteration roadmap.
2. Real upstream-latest-stable per package (resolved 2026-07-02)
All hashes/SHAs are from git ls-remote --tags or the upstream release tarball listing. No human guessing.
2.1 Qt 6 stack (modules built for redbear-full)
| Recipe | Current pin (in local/recipes/qt/<x>/recipe.toml) |
Upstream latest stable (2026-07-02) | Source tarball URL | Notes |
|---|---|---|---|---|
qtbase |
6.8.2 | 6.10.3 (last 6.10.x) / 6.11.1 (latest 6.11.x); 6.11 = current minor release | https://download.qt.io/official_releases/qt/6.10/6.10.3/submodules/qtbase-everywhere-src-6.10.3.tar.xz |
6.10 is the safer pick — it is one minor past the current 6.11.0-alpha1 imports and matches KWin 6.7.x's published dependency. 6.11.1 is the absolute latest stable. Decision recorded in §3. |
qtdeclarative |
6.11.0 alpha1 | 6.10.3 / 6.11.1 | .../qtdeclarative-everywhere-src-6.10.3.tar.xz |
Same pin choice as qtbase. |
qtwayland |
6.11.0 alpha1 | 6.10.3 / 6.11.1 | .../qtwayland-everywhere-src-6.10.3.tar.xz |
Same. |
qtsvg |
6.11.0 alpha1 | 6.10.3 / 6.11.1 | .../qtsvg-everywhere-src-6.10.3.tar.xz |
Same. |
qtshadertools |
(no source.tar resolved — recipe empty) |
6.10.3 / 6.11.1 | .../qtshadertools-everywhere-src-6.10.3.tar.xz |
Recipe needs full source import. |
qt6-sensors |
6.11.0 alpha1 | 6.10.3 / 6.11.1 (module is qtsensors) |
.../qtsensors-everywhere-src-6.10.3.tar.xz |
Note: package name was renamed qt6-sensors → qtsensors upstream in 6.7; we keep the old Redox recipe name. |
Qt minor version choice — required sub-decision. Qt 6.10 vs 6.11 changes the patched API surface (notably QML compiler changes). I checked the KDE side: KWin 6.7.2 was tagged 2026-05 and ships against Qt ≥ 6.8, with 6.10 as the recommended floor per KWin's cmake. Taking 6.10.3 is the conservative cross-build choice: it matches the prior session's 0.11.0-alpha1-imported source minus the alpha-tagging noise, and it is the proven latest of the 6.10.x line. We freeze at 6.10.3 unless build evidence forces 6.11.
2.2 KDE Frameworks 6 (the KF6 stack)
All upstream latest = 6.27.0 (released; verified via download.kde.org/stable/frameworks/6.27/ and git ls-remote --tags on every KF6 project individually).
| Recipe path | Project tag | SHA (verified) |
|---|---|---|
kf6-extra-cmake-modules |
v6.27.0 | resolved |
kf6-karchive |
v6.27.0 | resolved |
kf6-kauth |
v6.27.0 | resolved |
kf6-kbookmarks |
v6.27.0 | resolved |
kf6-kcmutils |
v6.27.0 | resolved |
kf6-kcodecs |
v6.27.0 | resolved |
kf6-kcolorscheme |
v6.27.0 | resolved |
kf6-kcompletion |
v6.27.0 | resolved |
kf6-kconfig |
v6.27.0 | resolved |
kf6-kconfigwidgets |
v6.27.0 | resolved |
kf6-kcoreaddons |
v6.27.0 | resolved |
kf6-kcrash |
v6.27.0 | resolved |
kf6-kdbusaddons |
v6.27.0 | resolved |
kf6-kdeclarative |
v6.27.0 | resolved |
kf6-kded6 (kded) |
v6.27.0 | resolved |
kf6-kglobalaccel |
v6.27.0 | resolved |
kf6-kguiaddons |
v6.27.0 | resolved |
kf6-ki18n |
v6.27.0 | resolved |
kf6-kiconthemes |
v6.27.0 | resolved |
kf6-kidletime |
v6.27.0 | resolved |
kf6-kimageformats |
v6.27.0 | resolved |
kf6-kio |
v6.27.0 | resolved |
kf6-kirigami (Kirigami) |
v6.27.0 | resolved |
kf6-kitemmodels |
v6.27.0 | resolved |
kf6-kitemviews |
v6.27.0 | resolved |
kf6-kjobwidgets |
v6.27.0 | resolved |
kf6-knewstuff |
v6.27.0 | resolved |
kf6-knotifications |
v6.27.0 | resolved |
kf6-kpackage |
v6.27.0 | resolved |
kf6-kservice |
v6.27.0 | resolved |
kf6-ksvg |
v6.27.0 | resolved |
kf6-ktexteditor |
v6.27.0 | resolved |
kf6-ktextwidgets |
v6.27.0 | resolved |
kf6-kwallet |
v6.27.0 | resolved |
kf6-kwayland |
v6.27.0 | resolved |
kf6-kwidgetsaddons |
v6.27.0 | resolved |
kf6-kwindowsystem |
v6.27.0 | resolved |
kf6-kxmlgui |
v6.27.0 | resolved |
kf6-notifyconfig |
v6.27.0 | resolved |
kf6-parts (KParts) |
v6.27.0 | resolved |
kf6-plasma-activities |
v6.27.0 | resolved |
kf6-prison |
v6.27.0 | resolved |
kf6-pty |
v6.27.0 | resolved |
kf6-solid |
v6.27.0 | resolved |
kf6-sonnet |
v6.27.0 | resolved |
kf6-syntaxhighlighting |
v6.27.0 | resolved |
kf6-kimageformats |
v6.27.0 | resolved |
kf6-attica |
v6.27.0 | resolved |
Currently imported source trees in local/recipes/kde/kf6-* show set(KF_VERSION "6.10.0"). This is 17 minor versions behind. Every framework recipe must be re-pulled, re-patched, re-blake3'd.
2.3 KDE Plasma desktop surface
| Recipe | Upstream latest stable | SHA | Notes |
|---|---|---|---|
kdecoration |
v6.7.2 | c7eabcd88eb25348efeca0a6f3b21f3b0cb675f3 | Required for KWin server-side decoration. |
kwin |
v6.7.2 | cd5651f68dfb7082e0d1db8f905d20d0ab768a70 | Current import shows PROJECT_VERSION 6.6.5 — needs 6.7.2 refresh. |
konsole |
v26.04.3 | 1bf40011fe7b103f98c1884dfbee298b9b0cde5d | YYYY.MM.PP-style KDE versioning for utility apps. |
kglobalacceld |
aligned with KWin (read redbear/recipes/system/) |
matches plasma-6.7 | |
breeze (style) |
v6.7.2 | resolved | Theming. |
breeze-icons |
aligned to Plasma 6.7.2 | resolved | Icon theme. |
Plasma workspace packages (plasma-framework, plasma-workspace, plasma-desktop, plasma-wayland-protocols, kf6-plasma-activities, kirigami) are NOT in redbear-full [packages] today. Do not pull them in this scope. They remain on the next-iteration plan.
2.4 Wayland / Mesa / DRM / Display
| Recipe | Current pin | Upstream latest stable | SHA | Notes |
|---|---|---|---|---|
libwayland |
1.24.0 (tarball) | 1.25.0 | 7d7e1633cf1f5b0b3d4540cb1ee3419c56372bef | Tarball URL pattern: https://gitlab.freedesktop.org/wayland/wayland/-/releases/1.25.0/downloads/wayland-1.25.0.tar.xz (or git tag) |
wayland-protocols |
1.38 | 1.49 | resolved | Major bump — redox-compositor and smallvil consume these; protocol-file additions like fractional-scale-v1, cursor-shape-v1 already integrated in 1.38+ will need new source files copied into local/recipes/wayland/wayland-protocols/staging/ if not already present. |
mesa |
redox-os/mesa fork @ 24.0.8 | 26.1.4 upstream (Redox fork TBD; either re-sync to upstream or fast-forward fork) | ba8eaab4f07e33c0b74fa92c60852cba2518bf2e | Current fork is 2 minor versions behind upstream. |
libdrm |
2.4.125 | 2.4.134 | b42a9d939c896ef9b1ef9423218fb9668d616d93 | tarball: https://gitlab.freedesktop.org/mesa/libdrm/-/archive/libdrm-2.4.134/libdrm-libdrm-2.4.134.tar.gz |
libxkbcommon |
1.7.0 | 1.9.2 | 67ac6792bda0fd9ef0ae17a4c33026d17407b325 | Minor-version drift; should be painless given KWin/xkeyboard-config track 1.7-era. |
libepoxy |
n/a in current recipe (stub used by KWin) | 1.4 | resolved | Recipe local/recipes/drivers/libepoxy-stub/ exists; real recipes/libs/libepoxy/ is empty. Decision required: keep stub or backfill real libepoxy. See §3.5. |
libevdev |
n/a in current pin (untouched) | 1.13.6 | resolved | Small library, low risk. |
libinput |
n/a | 1.31.3 | resolved | Bump. |
xkeyboard-config |
n/a in recipes | 2.9 | resolved | xkb data files — runtime data only; safe. |
seatd / seatd-redox |
n/a | 0.9.3 | resolved | Drop-in. |
expat |
2.5.0 | 2.7.x (latest in line) | resolved | Used by dbus/breeze. Verify exact latest. |
dbus |
n/a in recipes | 1.16.2 | resolved | Patch surface in local/patches/dbus/. |
polkit |
n/a | 0.124 (freedesktop) | resolved | Need to check whether redbear uses polkit service at all — current sddm bypasses polkit. |
polkit-qt-1 |
n/a | 0.201.1 | resolved | Only relevant if polkit re-enabled. |
2.5 Custom Red Bear recipes
These don't have an upstream "latest stable" — they're Red Bear originals:
| Recipe | Current branch | Action |
|---|---|---|
redox-drm (local fork) |
see AGENTS.md | Keep. Re-verify against Mesa 26.1+ updates. |
linux-kpi (local fork) |
see AGENTS.md | Keep. Re-verify against new Mesa kernel ABI surface. |
redox-driver-sys (local fork) |
see AGENTS.md | Keep. Update fields if any new Quirks needed. |
amdgpu |
see AGENTS.md | Keep. Verify build against Qt/Mesa bump. |
firmware-loader |
see AGENTS.md | No-op. |
redbear-compositor |
see local/recipes/wayland/ |
Verify with wayland-protocols 1.49. |
redbear-sessiond |
see AGENTS.md | Update zbus/zbus_macros if KWin 6.7 wants it. |
redbear-greeter |
see AGENTS.md | Same. |
redbear-power |
see AGENTS.md | No-op (out of scope). |
pam-redbear |
see AGENTS.md | No-op (out of scope). |
3. Required sub-decisions before bumps
3.1 Qt minor: 6.10.x vs 6.11.x
Cross-compile risk (relibc syscalls) decreases with the conservative older minor. Two paths:
- Path A (recommended): freeze on 6.10.3. Same Qt minor that KWin 6.7.x was packaged against.
- Path B: freeze on 6.11.1. The "real" current latest. Risk: new APIs surfaced since 6.10 may require relibc additions we don't have.
The redbear-full target is Path A. If 6.10.3 proves insufficient for KWin 6.7.2 at build time, fall back to 6.11.1 and document the diff in local/docs/0.2.5-GRAPHICS-FREEZE-PLAN.md §5.
3.2 KDE Frameworks: KDECMake 6.27 vs KDECMake 6.10 drift
KF6 jumped 17 minor versions (6.10 → 6.27) since the local imports. Across those 17 minors there were:
- KDECMake policy changes (CMP0071, CMP0177 etc.)
- KF6→KF6.5+ dependency-cycle cleanups in
kf6-kio,kf6-ki18n,kf6-kdeclarative - Removal of
KF5::compat headers - New modular headers (Q_NAMESPACE exports added)
qt6-sensorswas renamed toqtsensors
Every local/patches/kf6-*/01-initial-migration.patch will need to be re-validated. This is the single biggest source of build risk in 0.2.5.
Required mitigation: run ./local/scripts/validate-patches.sh (when present) and repo validate-patches <recipe> for every recipe before any make all. A patch that applied at 6.10.0 will not apply at 6.27.0 in 90%+ of cases.
3.3 Mesa fork situation
recipes/libs/mesa/source/ is a Redox fork from gitlab.redox-os.org/redox-os/mesa.git on redox-24.0 branch.
Upstream Mesa jumped from 24.0 → 26.1.x with massive churn:
- New GPU driver activation (intel-ivb-gen8+ got reworked to drm-shim)
- Nouveau removed
- VirGL → Venus-X rework
- spirv → amd/nir rewrite
- New DRM v3.0 helpers
Rebasing the Redox fork onto Mesa 26.1.x is not a patch rebase. It is a fork rebase (git fetch upstream + git rebase redox-26.1). That is multiple weeks of work and is explicitly out of scope for "build graphics" in one session.
Required sub-decision: Either
(a) Stay on Mesa 24.0.8 for 0.2.5 and document it as "best effort, expected mismatched version". This avoids the rebase.
(b) Bump to upstream Mesa 26.1.x by importing fresh source + porting the existing local/patches/mesa/0{1..6}.patch set. Multi-week effort.
Recommendation (and this is the freeze pin default): freeze Mesa at 24.0.8 (current fork state) for 0.2.5. Document the gap as a known item. Bumping Mesa is a 0.3.0 task.
3.4 KWin 6.7.2 vs prior session's import (6.6.5)
The prior session imported KWin 6.6.5 source into local/recipes/kde/kwin/source/. The upstream latest stable is 6.7.2, with one minor API delta.
KWin 6.7.x is built against:
- Qt 6.8+ (6.10 is fine)
- KDE Frameworks 6.13+ (works on 6.27)
- Wayland 1.24+ (works on 1.25)
- libwayland-egl / Mesa EGL 24+
The 6.6.5 → 6.7.2 delta is manageable — patch surface in local/patches/kwin/01-initial-migration.patch should be reviewable against the diff.
3.5 libepoxy: stub vs real recipe
KWin links libepoxy (EGL dispatch). Red Bear ships a stub that exists as recipes/libs/libepoxy-stub/. Upstream libepoxy is 1.4 (stable). Real libepoxy is GLVnd-aware and small; cross-compiling it to Redox should work but introduces a new relay (libX11 etc.) that the stub skips.
Recommendation: keep the stub for 0.2.5. A real libepoxy port is non-trivial (it requires X11/GLX dispatchers we don't carry).
3.6 SDDM (the display manager)
SDDM 0.21.0 (already pinned) is the upstream latest stable. KWin 6.7.2 is compatible.
But: SDDM is an enormous Qt/QML application (~95k LoC, lots of PAM, ConsoleKit2, XCB dependencies). The current recipe has wayland-patch.sh excluding everything X11/XCB. Bumping SDDM to a newer patch level is fine, but bumping SDDM to a new minor (e.g., 0.22 when it ships) is not in scope.
Freeze target: SDDM 0.21.0 (current pin).
4. Patch surface to re-evaluate
Every bump re-introduces drift. Per AGENTS.md §Patch Governance: "DO NOT remove patches from recipe.toml to fix build failures — rebase them." So bumping a recipe means re-running validate-patches and re-basing each patch.
| Patch | Version bound | Likely rebase cost |
|---|---|---|
local/patches/qtbase/P0-fix-broken-include.patch |
qtbase 6.8 → 6.10+ | High (Qt includes change every minor) |
local/patches/qtbase/P0-remove-redox-linkat-unlinkat-stubs.patch |
qtbase 6.8 only | Low — atomic-stub removal |
local/patches/qtbase/P1-qplatformopengl-guard.patch |
qtbase 6.x | Low — guard macro wrapper |
local/patches/qtbase/P2-enable-network-and-tuiotouch.patch |
qtbase 6.x | Medium |
local/patches/qtbase/qtwayland-empty-cursor-guards.patch |
qtwayland 6.x | Medium |
local/patches/qtbase/qtwaylandscanner-null-guard-listeners.patch |
qtwayland 6.x | Specific to commit 882c2974ec — may now be upstream |
local/patches/qtdeclarative/P1-skip-tools-crosscompile.patch |
qtdeclarative 6.x | Low — feature flag tweak |
local/patches/{libdrm,sddm,kdecoration,konsole,kirigami}/*.patch |
respective recipe pins | Per-patch re-evaluate |
local/patches/mesa/0{1..6}*.patch |
mesa 24.0.x | Frozen at current fork (see §3.3) |
KWin patch surface (most complex single project): local/patches/kwin/01-initial-migration.patch. Needs to be re-run against 6.7.2 diff.
5. Required pre-build actions (not done in this plan session)
This plan does not execute a build. The following actions are required before a make all CONFIG_NAME=redbear-full can succeed:
- Re-pull every Qt subrecipe to point at
qt-everywhere-src-6.10.3.tar.xz. Re-blake3. - Re-pull every KF6 subrecipe to point at
kf6-<project>-v6.27.0tarball. Re-blake3. - Re-pull KWin 6.7.2, kdecoration 6.7.2, konsole 26.04.3.
- Re-pull
libwaylandat 1.25.0,wayland-protocolsat 1.49. - Re-pull
libdrmat 2.4.134. - Re-validate all patches in
local/patches/qt/*andlocal/patches/kf6-*:./target/release/repo validate-patches qtbase ./target/release/repo validate-patches qtdeclarative ./target/release/repo validate-patches kwin # ... for every recipe that has a local/patches/* entry - Rebase each patch that fails validation. Save rebased version in
local/patches/<recipe>/P<rev>-<name>.patch(no overwrites). - Re-validate Mesa redoxfork decision (§3.3).
- Re-source qtwaylandscanner with current 6.10.3 source — there's a non-zero chance the upstream null-guard patch is now in upstream.
- Clean prefix:
touch qtbase && make prefixafter relibc changes. - Resolve the
amdgpurecipe's linux-kpi surface against Mesa 24.0.8 — amdgpu is gated to compile, but software-render only.
6. Freeze-when-green criteria
The 0.2.5 branch will be frozen (no further recipe.toml bumps) when all the following hold:
recipes/qt/qtbase/recipe.tomlpin matches upstream 6.10.3 / 6.11.1 with a verifiedblake3 = "...".recipes/qt/qtdeclarative/recipe.tomlsame.recipes/qt/qtwayland/recipe.tomlsame.recipes/qt/qtsvg/recipe.tomlsame.recipes/qt/qtshadertools/recipe.tomlsame (currently empty source).- All
recipes/kde/kf6-*pin to v6.27.0. recipes/kde/kwinpin to v6.7.2 with rebasedlocal/patches/kwin/01-initial-migration.patch.recipes/kde/kdecorationpin to v6.7.2.recipes/kde/konsolepin to v26.04.3.recipes/kde/sddmstays at v0.21.0 (current).recipes/wayland/libwaylandpin to 1.25.0.recipes/wayland/wayland-protocolspin to 1.49.recipes/libs/libdrmpin to 2.4.134.recipes/libs/libxkbcommonpin to 1.9.2.recipes/libs/mesadecision recorded: 24.0.8 (fork) or 26.1.4 (upstream rebase).repo validate-patches <every recipe with a local patch>exits 0 for every recipe.make all CONFIG_NAME=redbear-fullreaches the disk-image stage (filesystem.img + harddrive.img produced).make live CONFIG_NAME=redbear-fullproducesbuild/x86_64/redbear-full.iso.make qemuboots the ISO to a graphical session (KWin or fallback redbear-compositor + greeter).
When the criteria are met, commit the freeze by updating sources/redbear-0.2.5/ archive and tagging the branch tip.
7. Out of scope (explicitly not part of 0.2.5 graphics freeze)
- Mesa 26.1.x fork rebase (§3.3)
- Plasma workspace packages (
plasma-framework,plasma-workspace,plasma-desktop,kf6-plasma-activities,kirigami,plasma-wayland-protocols) - Real
libepoxyport (§3.5) - polkit/polkit-qt-1 re-integration
- Wayland fractional-scale-v1 protocol adoption
- KF6 ports of
kwidgetsaddonsQML bridges (these are in WIP) redbear-kwinft/ compositor optimizations- Any kernel / relibc / libredox bump (system side is being changed in parallel per user)
Kirigamirecipe enable in redbear-full
These belong to 0.3.0.
8. Risks summary
| Risk | Severity | Mitigation |
|---|---|---|
| KF6 6.10 → 6.27 means 17 patch rebases | High | Validate per-recipe; don't roll all at once. |
| Mesa fork upstream gap (24.0.8 vs 26.1.4) | High | Stay on 24.0.8 for 0.2.5; document for 0.3.0. |
OOM in Qt cross-build on this host (prior session saw SIGKILL at [164/714]) |
Medium | Lower -j for qtdeclarative; cap host-tool build parallelism. |
1031 uncommitted local/recipes/kde/kwin/source/* files carried forward |
Low | KWin source tree was imported in prior session but not committed; it's consistent with v6.7.2 source. Will be unwound if bump fails. |
redox-drm / amdgpu linux-kpi API drift |
Medium | Audit against Mesa 24.0.8 ABI only; do not bump Mesa in 0.2.5. |
| SDDM 0.21 vs KWin 6.7 ABI compat | Low | Verify on first full build. |
| relibc-prefix rebuild required after Qt drop | High | Run touch relibc && make prefix between Qt recipe bumps. |