multi-session sweep: submodule bumps + doc/recipe/script updates
Submodule pointer updates (forks already pushed):
- base: netstack generic ReaderPool + OwnedFd bridge (36dddf23)
- bootloader, installer, userutils: upstream-tracking commits
Parallel agent work swept:
- kf6-kcmutils: recipe + CMakeLists + initial migration patch
- redbear-iwlwifi: Cargo.toml update
- tlc: MC-PARITY-AUDIT + README updates
- xwayland recipe+patch removed (stale)
- scripts: verify-patch-content.py, lint-config-paths.sh
- docs: CONSOLE-TO-KDE-DESKTOP-PLAN, DBUS-INTEGRATION-PLAN,
HARDWARE-VALIDATION-MATRIX, REDBEAR-FULL-SDDM-BRINGUP,
UPSTREAM-SYNC-PROCEDURE, README
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_061020438ffeaWk2vcj6fbC3MX",
|
||||
"updatedAt": "2026-07-26T15:44:16.607Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T15:44:16.607Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_0613206b9ffeL2Zgq8QaDXLZ6x",
|
||||
"updatedAt": "2026-07-26T15:49:53.341Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T15:49:53.341Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_061323608ffe9tJAGD2FM1niil",
|
||||
"updatedAt": "2026-07-26T15:58:30.318Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T15:58:30.318Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_0613257a7ffeO6akF2DonB477w",
|
||||
"updatedAt": "2026-07-26T15:45:45.348Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T15:45:45.348Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"sessionID": "ses_06284e1edffebztmq6Uvq8VtsC",
|
||||
"updatedAt": "2026-07-26T13:12:50.831Z",
|
||||
"updatedAt": "2026-07-26T21:13:51.569Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T13:12:50.831Z"
|
||||
"state": "active",
|
||||
"reason": "3 background task(s) active",
|
||||
"updatedAt": "2026-07-26T21:13:51.569Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_062d778b0ffeVfC0wQ1uIPzpVL",
|
||||
"updatedAt": "2026-07-26T14:27:52.477Z",
|
||||
"updatedAt": "2026-07-26T15:59:45.254Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T14:27:52.477Z"
|
||||
"updatedAt": "2026-07-26T15:59:45.254Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_0645b4ea1ffeKq8EVY58m1lH6k",
|
||||
"updatedAt": "2026-07-26T14:28:51.241Z",
|
||||
"updatedAt": "2026-07-26T21:14:51.613Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T14:28:51.241Z"
|
||||
"updatedAt": "2026-07-26T21:14:51.613Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_0646f2ab9ffeXVzQOTZvz6k9P6",
|
||||
"updatedAt": "2026-07-26T13:55:17.019Z",
|
||||
"updatedAt": "2026-07-26T18:21:08.974Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T13:55:17.019Z"
|
||||
"updatedAt": "2026-07-26T18:21:08.974Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
{
|
||||
"sessionID": "ses_06694b995ffewJACilklGlbtw7",
|
||||
"updatedAt": "2026-07-26T14:31:12.088Z",
|
||||
"updatedAt": "2026-07-26T16:03:46.189Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "active",
|
||||
"reason": "3 background task(s) active",
|
||||
"updatedAt": "2026-07-26T14:31:12.088Z"
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-26T16:03:46.189Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -198,7 +198,7 @@ Red Bear OS operates under strict discipline. Full policies: [`local/AGENTS.md`]
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Desktop Path Plan](local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md) — Canonical plan v5.9 (2026-07-21): kernel → DRM → Mesa → Wayland → KDE
|
||||
- [Desktop Path Plan](local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md) — Canonical plan v6.0 (2026-07-26): kernel → DRM → Mesa → Wayland → KDE
|
||||
- [Implementation Plan](docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md) — Roadmap and execution model
|
||||
- [cub Package Manager](local/docs/CUB-PACKAGE-MANAGER.md) — AUR → recipe pipeline, CLI reference, architecture
|
||||
- [tlc File Manager](local/recipes/tui/tlc/README.md) — Pure-Rust Midnight Commander replacement
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Red Bear OS: Console → Hardware-Accelerated KDE Plasma Desktop
|
||||
|
||||
**Version:** 5.9 (2026-07-21)
|
||||
**Replaces:** v5.8 (2026-06-21)
|
||||
**Version:** 6.0 (2026-07-26)
|
||||
**Replaces:** v5.9 (2026-07-21)
|
||||
**Replaces:** v5.7 (2026-06-20)
|
||||
**Replaces:** v5.6 (2026-06-20)
|
||||
**Replaces:** v4.7 (2026-06-20)
|
||||
@@ -11,12 +11,28 @@
|
||||
**Replaces:** v3.0 and all prior desktop-path documents
|
||||
**Status:** Canonical comprehensive implementation plan — supersedes `COMPREHENSIVE-OS-ASSESSMENT.md`, `DESKTOP-STACK-CURRENT-STATUS.md`, and all layer-specific plans.
|
||||
|
||||
### What Changed in v6.0 (2026-07-26)
|
||||
|
||||
v5.9 (2026-07-21) predates five fixes that landed in the
|
||||
`DRIVER-MANAGER-MIGRATION-PLAN.md` v5.x program. v6.0 realigns this canonical
|
||||
desktop plan with that ground truth. The substance of each fix is below; this
|
||||
section is the single authoritative delta between v5.9 and v6.0.
|
||||
|
||||
| Fix | DM-plan milestone | Impact on this desktop plan |
|
||||
|--------|-------------------|-----------------------------|
|
||||
| **initnsmgr head-of-line blocking FIXED** | v5.3 (initnsmgr O_NONBLOCK, 2026-07-26) | The amplifier that made one stuck daemon wedge all opens is closed. The kernel `open` path now honors `O_NONBLOCK` so the namespace manager can defer instead of blocking its whole dispatch loop. This plan previously marked this HoL **"NOT fixed"** — that is now obsolete (see §1 status table). Residual under-load flakiness work continues in `INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`. |
|
||||
| **Mesa Redox winsys CS submit seqno fix** | v5.0/v5.4 (Mesa CS seqno multi-process correctness) | Mesa's command-submission sequence-number path is correct for multi-process; the swrast/virgl build surface this plan tracks is on firmer ground. |
|
||||
| **iwlwifi channel fix (G-A4)** | v5.1/v5.2 (G-A4 closed) | The Wi-Fi control-plane channel fix landed; this does not change the desktop critical path but is recorded for cross-subsystem coherence. |
|
||||
| **redbear-compositor comprehensive fix** | v5.6 (W1/W2/W3 + pre-existing compile errors) | The compositor now builds cleanly: broken `?` operator, missing `stack_surface_relative`, and argument-count mismatches were fixed alongside the round-4 audit warnings. The Wayland compositor proof is on a firmer build foundation. |
|
||||
| **Qt6 Wayland null+8 guards COMMITTED** | README + v5.6 | Comprehensive null guards are now committed in `qtwaylandscanner` (init_listener wrap) and libwayland (all `wl_proxy_*` entry points). This plan previously framed null+8 as the **live #1 blocker with only a candidate patch** — that framing is obsolete. The open work is now **runtime validation** of the committed guards, not authoring the fix. |
|
||||
| **KWin now builds successfully** | README + v5.6 | KWin cooks successfully (`redox-drm` + Qt6 Wayland). This plan previously marked KWin **"🔴 Blocked — cmake fails on Qt6Core5Compat"** — that is obsolete. Runtime is still gated on the null+8 runtime validation above. |
|
||||
|
||||
### What Changed in v5.9 (2026-07-21)
|
||||
|
||||
| Change | Impact |
|
||||
|--------|--------|
|
||||
| **`redbear-mini` reaches a working `brush` login — dominant blocker fixed** | The console-login floor of this whole plan now holds on mini: framebuffer ground truth shows `Red Bear login: user` → MOTD → `user@redbear: $` → `echo RB=$((21*2))=OK` → `RB=42=OK`, fast (login ~12s, brush ~16s in QEMU q35/KVM). Root cause was an **acpid AML-mutex self-deadlock** (timeout treated as seconds not ms; no owner/recursion → nested acquire self-deadlocks), triggered by cpufreqd reading `/scheme/acpi/processor/CPUn/pss`. Fixed in `local/sources/base` `d78fd44a`; verified against `local/reference/linux-7.1` ACPICA. **This supersedes 16+ sessions of pty/spawn/tokio theories** — the shell never spawned because the whole open path was frozen, not because of anything in login/brush/pty. |
|
||||
| **Root-caused the amplifier: `initnsmgr` head-of-line blocking (NOT fixed)** | Why one stuck daemon froze the entire system: the init namespace manager (`local/sources/base/bootstrap/src/initnsmgr.rs`) is single-threaded and does a **blocking `openat` inside its dispatch loop**, and every restricted-namespace path resolution proxies through it. So any provider that is briefly not servicing its socket wedges *all* opens (login, getty, init spawn, console). Residual under-load flakiness now wedges at the fbcond→vesad handoff (`display.vesa:v2/2`) via the same mechanism — vesad is a victim, not a bug. Kernel corollary: `open` ignores `O_NONBLOCK` and always blocks (`kernel/src/scheme/user.rs` `call_inner`), so the manager cannot even defer. Full analysis + execution plan (worker-offload / deferred-open / kernel `O_NONBLOCK`-on-open) in **`local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`**. |
|
||||
| **Root-caused the amplifier: `initnsmgr` head-of-line blocking — FIXED (v6.0 / DM-plan v5.3, 2026-07-26)** | Why one stuck daemon froze the entire system: the init namespace manager (`local/sources/base/bootstrap/src/initnsmgr.rs`) is single-threaded and does a **blocking `openat` inside its dispatch loop**, and every restricted-namespace path resolution proxies through it. So any provider that is briefly not servicing its socket wedges *all* opens (login, getty, init spawn, console). Residual under-load flakiness now wedges at the fbcond→vesad handoff (`display.vesa:v2/2`) via the same mechanism — vesad is a victim, not a bug. Kernel corollary: `open` ignored `O_NONBLOCK` and always blocked (`kernel/src/scheme/user.rs` `call_inner`), so the manager could not even defer. **FIXED in v6.0:** the kernel `open` path now honors `O_NONBLOCK` (DM-plan v5.3), closing the head-of-line block. Full analysis + remaining scalability work (worker-offload / deferred-open) in **`local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`**. |
|
||||
|
||||
### What Changed in v5.8 (2026-06-21)
|
||||
|
||||
@@ -102,8 +118,8 @@ and what must happen, in what order, to reach a usable KDE Plasma desktop with h
|
||||
| **Greeter / Login** | 🟡 SDDM wired, boots to text login | SDDM v0.21.0 + pam-redbear in `redbear-full.toml`; ISO boots to login prompt | Qt6 Wayland null+8 crash blocks graphical SDDM |
|
||||
| **D-Bus** | 🟢 System bus wired | Build + recipe-level meson fix (2026-06-19) | Session bus |
|
||||
| **Qt6** | 🟢 Builds | Build (Core+Gui+DBus+Wayland+QML interpreter) | Wayland `null+8` crash blocks runtime |
|
||||
| **KF6 Frameworks** | 🟡 36/48 build | Build | 12 blocked (Wayland null+8 crash, NOT QML gate) |
|
||||
| **KDE Plasma** | 🔴 Blocked | Stub + partial builds | Qt6 Wayland null+8 crash, KWin real build |
|
||||
| **KF6 Frameworks** | 🟡 40/40 build (v6.0) | All frameworks build; KWin cooks successfully | Runtime still gated on Qt6 Wayland null+8 runtime validation (guards committed) |
|
||||
| **KDE Plasma** | 🟡 Un-deferred, builds (v6.0) | All KF6 frameworks + KWin + plasma-framework + plasma-workspace + plasma-desktop un-deferred in `redbear-full.toml`; KWin builds successfully | Runtime blocked on Qt6 Wayland null+8 runtime validation (guards committed, not yet runtime-proven) |
|
||||
| **SDDM** | 🟢 Wired (build) | `sddm = {}`, `pam-redbear = {}` in `redbear-full.toml`; `21_sddm.service` init; binaries staged | Qt6 Wayland null+8 crash (QML greeter runtime) |
|
||||
| **Hardware GPU** | 🔴 Not validated | Source (CS ioctl exists) | Hardware + Mesa HW cross-compile |
|
||||
| **Wi-Fi / Bluetooth** | 🔴 Host-tested | Source + host tests | Hardware + native stack |
|
||||
@@ -244,7 +260,7 @@ correct QEMU device.
|
||||
| libwayland 1.24.0 | 🟢 Builds | Wayland protocol library (target: 1.25.0) |
|
||||
| wayland-protocols | 🟢 Builds | Protocol XML definitions |
|
||||
| redbear-compositor | 🟡 Bounded proof | 788-line Rust compositor; 3/3 tests; zero warnings |
|
||||
| kwin | 🔴 Blocked — cmake fails on Qt6Core5Compat; real build gated on QML/Qt6Quick resolution |
|
||||
| kwin | 🟡 Builds successfully (v6.0) | Real cmake build now succeeds (`redox-drm` + Qt6 Wayland); previously blocked on a Qt6Core5Compat cmake failure — **resolved**. Runtime still gated on Qt6 Wayland null+8 runtime validation (see §3.1). |
|
||||
|
||||
**Known compositor limitations**: SHM fd passing uses payload bytes (not SCM_RIGHTS), framebuffer uses private memory (not real vesad), wire encoding uses NUL-terminated strings (not padded Wayland format). **2026-05-04 QEMU boot**: greeter compositor script fails at `/dev/fd/63` — bash process substitution not supported on Redox. Framebuffer console login prompt works as fallback.
|
||||
|
||||
@@ -254,10 +270,15 @@ clients crash with a null+8 segfault in `wl_proxy_add_listener()`. The root caus
|
||||
without null-checking `proxy` first. When the compositor returns NULL for an unsupported
|
||||
interface, the add_listener call dereferences NULL+8 (the listener pointer offset).
|
||||
|
||||
**Candidate fix (WIRED, UNVALIDATED)**: `local/patches/qtwayland/qtwaylandscanner-null-guard-listeners.patch`
|
||||
modifies `qtwaylandscanner` to emit `if (proxy) wl_*_add_listener(...)` guards. This patch
|
||||
IS in qtwayland's `recipe.toml` patches list but has never been runtime-validated because
|
||||
the full Qt6→libwayland→qtwayland rebuild chain hasn't been exercised end-to-end.
|
||||
**Fix — comprehensive guards COMMITTED (v6.0), runtime validation open**: As of v6.0
|
||||
the null guards are no longer a "candidate" — comprehensive null guards are committed in
|
||||
both `qtwaylandscanner` (init_listener wrap, emitting `if (proxy) wl_*_add_listener(...)`
|
||||
guards) and libwayland (all `wl_proxy_*` entry points). This matches the README status
|
||||
("✅ Comprehensive null guards ... committed") and `DRIVER-MANAGER-MIGRATION-PLAN.md` v5.6.
|
||||
What remains open is **runtime validation**: the full Qt6→libwayland→qtwayland rebuild chain
|
||||
must be exercised end-to-end and a QML window must render under redbear-compositor to prove
|
||||
the guards actually fire at the right place. The root cause of why the proxy is ever NULL is
|
||||
still open (see `QT6-WAYLAND-NULL8-DIAGNOSIS.md` §7 runbook).
|
||||
|
||||
**Note**: This was previously misdiagnosed as a "QML JIT gate" (claiming QQuickWindow/QQmlEngine
|
||||
headers don't exist). That diagnosis was **factually wrong**: 86 QtQuick headers, 83 QtQml
|
||||
@@ -1883,10 +1904,10 @@ on Redox where the bus becomes available quickly after daemon start.
|
||||
|
||||
| Component | Status |
|
||||
|-----------|--------|
|
||||
| kwin | 🔴 Blocked — real cmake build requires working Qt6 Wayland runtime (null+8 crash); redbear-compositor provides the kwin_wayland binary as a separate package |
|
||||
| kwin real build | 🔄 Attempted — gated on Qt6 Wayland null+8 crash resolution |
|
||||
| plasma-workspace | 🔴 Blocked |
|
||||
| plasma-desktop | 🔴 Blocked (transitive) |
|
||||
| kwin | 🟡 Builds successfully (v6.0) — real cmake build now succeeds (`redox-drm` + Qt6 Wayland); runtime gated on Qt6 Wayland null+8 runtime validation. redbear-compositor provides the kwin_wayland binary as a separate package |
|
||||
| kwin real build | ✅ Builds (v6.0) — previously gated on a Qt6Core5Compat cmake failure, now resolved |
|
||||
| plasma-workspace | 🟡 Builds, runtime gated — un-deferred in `redbear-full.toml` |
|
||||
| plasma-desktop | 🟡 Builds, runtime gated — un-deferred in `redbear-full.toml` (transitive) |
|
||||
| Full Plasma session | 🔴 Not functional |
|
||||
|
||||
**CORRECTION — The "QML JIT gate" was FALSE (v5.0, 2026-06-20)**:
|
||||
@@ -1954,13 +1975,18 @@ User mandate: "kde, qt, wayland - all must be latest versions!"
|
||||
|
||||
## 5. Honest Blocker Map
|
||||
|
||||
### Critical Path (ordered)
|
||||
### Critical Path (ordered) — v6.0
|
||||
|
||||
> v6.0 note: items [0] (SDDM wiring), [3] (Real KWin build) and the initnsmgr
|
||||
> HoL amplifier are **DONE**. The comprehensive Qt6 Wayland null+8 guards are
|
||||
> **COMMITTED**; the live #1 desktop blocker is now their **runtime validation**,
|
||||
> not authoring the fix.
|
||||
|
||||
```
|
||||
[0] Wire SDDM + pam-redbear into config → login prompt target
|
||||
[1] Qt6 Wayland null+8 crash resolution → unblocks ALL Qt6 Wayland clients
|
||||
[0] Wire SDDM + pam-redbear into config → DONE (login prompt target)
|
||||
[1] Qt6 Wayland null+8 RUNTIME VALIDATION → guards committed; prove a QML window renders
|
||||
[2] SDDM greeter renders under compositor → SDDM login prompt in QEMU
|
||||
[3] Real KWin build → unblocks plasma-workspace → plasma-desktop
|
||||
[3] Real KWin build → DONE (v6.0); KWin cooks successfully
|
||||
[4] Mesa virgl runtime wiring + QEMU -virtio-vga-gl → GPU-accelerated SDDM
|
||||
[5] Hardware GPU validation → unblocks Mesa HW renderers
|
||||
[6] ACPI shutdown robustness → release-grade ACPI
|
||||
@@ -1971,12 +1997,12 @@ User mandate: "kde, qt, wayland - all must be latest versions!"
|
||||
|
||||
| # | Blocker | What's needed | Estimated effort | Hardware required |
|
||||
|---|---------|---------------|-----------------|-------------------|
|
||||
| 0 | SDDM config wiring | Add sddm + pam-redbear to redbear-full.toml; create init service; configure SDDM compositor path | 2-3 days | No |
|
||||
| 1 | Qt6 Wayland null+8 crash | Rebuild libwayland→qtbase→qtdeclarative→qtwayland with null-guard patch; validate QML window renders under redbear-compositor | 1-2 weeks | No |
|
||||
| 0 | SDDM config wiring | Add sddm + pam-redbear to redbear-full.toml; create init service; configure SDDM compositor path | ✅ DONE | No |
|
||||
| 1 | Qt6 Wayland null+8 runtime validation | Null guards are COMMITTED (qtwaylandscanner + libwayland `wl_proxy_*`). Remaining: rebuild libwayland→qtbase→qtdeclarative→qtwayland end-to-end and validate a QML window renders under redbear-compositor; root-cause why proxy is ever NULL | 1-2 weeks | No |
|
||||
| 2 | SDDM greeter runtime | SDDM greeter (QML) launches as Wayland client of redbear-compositor; user sees login prompt | 1 week | No |
|
||||
| 3 | Mesa virgl runtime | Wire missing patches into recipe.toml; test with `-device virtio-vga-gl` | 3-5 days | No (QEMU) |
|
||||
| 4 | KWin real build | Real cmake build of KWin; requires Qt6 Wayland runtime working | 2-4 weeks | No |
|
||||
| 5 | Plasma session | plasma-workspace + plasma-desktop cmake builds; requires kirigami + kwin | 2-4 weeks | No |
|
||||
| 4 | KWin real build | Real cmake build of KWin | ✅ DONE (v6.0) — KWin cooks successfully | No |
|
||||
| 5 | Plasma session | plasma-workspace + plasma-desktop runtime; packages already build, runtime requires working Qt6 Wayland session | 2-4 weeks | No |
|
||||
| 6 | HW GPU backend | CS ioctl implementation → Mesa HW renderer cross-compile | 12-20 weeks | Yes — AMD/Intel GPU |
|
||||
| 7 | ACPI shutdown | Remove panic paths, deterministic `_S5` | 2-4 weeks | No |
|
||||
| 8 | Bare-metal proof | Real AMD/Intel hardware validation for all layers | 4-8 weeks | Yes — AMD + Intel machines |
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
**Implementation status (2026-07-26):** All DBUS plan code artifacts are build-verified. Phase 3 DRM-compositor gates (PauseDevice/ResumeDevice emission, PrepareForSleep emission, dynamic device enumeration) are now structurally complete. **Phase 4 re-enablement progress:** 20/24 KF6 frameworks have USE_DBUS=ON. **redbear-polkit v0.2** now implements real authorization (subject UID extraction, `*` / `@group` / `!uid` / `!@group` policy syntax, default-deny for unknown actions). **redbear-udisks v0.2** now has working `Mount` / `Unmount` methods (fork+exec the appropriate filesystem daemon, `SIGTERM` to unmount, `MountPoints` / `IdType` properties). **redbear-notifications v0.2** now emits the `ActionInvoked` signal via the new `InvokeAction` method. **redbear-upower v0.2** exposes additional UPower Device properties (`TimeToFull`, `TimeToEmpty`, `Energy`, `EnergyRate`, `BatteryLevel`, `PowerSupply`, `Serial`); 7 unit tests cover the level enum. **redbear-statusnotifierwatcher v0.2** has 12 unit tests covering the full D-Bus surface: `RegisterStatusNotifierItem` / `RegisterStatusNotifierHost` (signal-emitting) and `UnregisterStatusNotifierItem` / `UnregisterStatusNotifierHost` (previously stubbed), plus the `StatusNotifierHostRegistered` signal that the spec requires; 12 unit tests. **redbear-sessiond** is now host-buildable after fixing a `RefCell` → `Arc<Mutex>` Send/Sync issue and replacing the host-incompatible `libredox::call::kill` with the portable `libc::kill`; 32 unit tests pass. **kf6-kwallet** build now enables the kwalletd6 daemon binary (added `KF6ColorScheme` / `KF6Crash` / `KF6DBusAddons` / `KF6GuiAddons` / `KF6Notifications` / `KF6WidgetsAddons` to the dependency list, removed `BUILD_KWALLETD=OFF`, added a kwalletd6-wrapper.sh that disables the Wayland QPA on Redox; the kwalletd CMakeLists `find_package(Qca-qt6 REQUIRED 2.3.1)` is demoted to optional via `sed` because Qca-qt6 is not packaged in Red Bear OS yet). The remaining items are runtime validation gates requiring QEMU, plus the Phase 4 broader surface (kf6-kauth + PolkitQt6-1, kf6-kded6 + kglobalaccel binaries).
|
||||
|
||||
**Version:** 3.8 — 2026-07-26
|
||||
**Status:** Active plan aligned with desktop path v5.9 (2026-07-21)
|
||||
**Status:** Active plan aligned with desktop path v6.0 (2026-07-26)
|
||||
**Scope:** Full D-Bus infrastructure for KDE Plasma 6 on Wayland, tightly integrated with Redox scheme IPC
|
||||
**Parent plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v5.9, 2026-07-21)
|
||||
**Parent plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v6.0, 2026-07-26)
|
||||
|
||||
---
|
||||
|
||||
@@ -605,7 +605,7 @@ APIs, which relibc provides.
|
||||
|
||||
## 8. Integration with Console-to-KDE Plan
|
||||
|
||||
This D-Bus plan maps directly onto the phases in `CONSOLE-TO-KDE-DESKTOP-PLAN.md` v5.9 (2026-07-21):
|
||||
This D-Bus plan maps directly onto the phases in `CONSOLE-TO-KDE-DESKTOP-PLAN.md` v6.0 (2026-07-26):
|
||||
|
||||
| Desktop Plan Phase | D-Bus Plan Phase | What D-Bus delivers |
|
||||
|---|---|---|
|
||||
|
||||
@@ -1,55 +1,82 @@
|
||||
# Hardware Validation Matrix — Red Bear OS
|
||||
|
||||
| Component | QEMU | Bare Metal | Notes |
|
||||
|-----------|------|------------|-------|
|
||||
| **Storage** | | | |
|
||||
| AHCI SATA | ✅ | 🔲 | NCQ structure present, not runtime-validated |
|
||||
| NVMe | 🔲 | 🔲 | Basic driver, no multiqueue |
|
||||
| virtio-blk | ✅ | N/A | QEMU only |
|
||||
| **Network** | | | |
|
||||
| e1000 | 🔲 | 🔲 | ITR structure present, no offload validation |
|
||||
| rtl8168 | 🔲 | 🔲 | PHY config present, not runtime-tested |
|
||||
| virtio-net | ✅ | N/A | QEMU only |
|
||||
| **Audio** | | | |
|
||||
| Intel HDA | 🔲 | 🔲 | Codec detection + jack sense added, not validated |
|
||||
| AC97 | 🔲 | 🔲 | Basic driver |
|
||||
| **Input** | | | |
|
||||
| PS/2 | ✅ | 🔲 | QEMU keyboard/mouse work |
|
||||
| USB HID | ✅ | 🔲 | Keyboard/mouse autospawn via test-usb-qemu.sh (P1 hardening); not validated on real HW |
|
||||
| **USB** | | | |
|
||||
| xHCI host controller | ✅ | 🔲 | Interrupt-driven mode proven (test-xhci-irq-qemu.sh); 51-flag quirk table + HCCPARAMS2 gating (P2-A/B); 36-code error recovery (P2-C); not HW-validated |
|
||||
| EHCI/UHCI/OHCI controllers | 🔲 | 🔲 | Compile clean; runtime enumeration proofs planned (P8-B) |
|
||||
| USB storage (BOT) | ✅ | 🔲 | usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open |
|
||||
| USB hub (non-root) | ✅ | 🔲 | Hub + hub-child enumeration proven in QEMU (test-usb-hub-qemu.sh): hub descriptor/EP1/scan/debounce/reset→enable, and usb-kbd behind hub enumerates to HID subdriver (class 3.1 keyboard); "reactor race" root-caused to startup latency under load (not a deadlock) |
|
||||
| **GPU/Display** | | | |
|
||||
| VESA | ✅ | 🔲 | QEMU framebuffer works |
|
||||
| virtio-gpu | ✅ | N/A | 2D only, QEMU |
|
||||
| **CPU/Power** | | | |
|
||||
| cpufreqd | 🔲 | 🔲 | Governors implemented, not HW-validated |
|
||||
| thermald | 🔲 | 🔲 | ACPI thermal zones, not HW-validated |
|
||||
| **SMP** | | | |
|
||||
| x2APIC/SMP | ✅ | ✅ | Multi-core works |
|
||||
| **Driver Manager (driver-manager vs pcid-spawner)** | | | |
|
||||
| D1 P0 capabilities (C1 dynids + C2 remove + C3 enable + C4 BAR) | ✅ | 🔲 | Code complete; 52 tests pass; see `local/docs/evidence/driver-manager/D5-AUDIT.md` |
|
||||
| D1 P1 SpawnDecision + format coexistence + policy blacklist | ✅ | 🔲 | `spawn_decision_gate()` consults env/CLI/blacklist; `convert_legacy` reads legacy pcid.d format |
|
||||
| D1 P1 PciQuirkFlags wired into spawn | ✅ | 🔲 | `driver-manager/src/quirks.rs` consumes `redox-driver-sys`; NEED_FIRMWARE defers probe; NO_MSIX/NO_MSI/FORCE_LEGACY_IRQ signal intx-fallback via env; DISABLE_ACCEL signals accel-disable |
|
||||
| D1 P1 `/etc/driver-manager.d/` policy loader | ✅ | 🔲 | `local/recipes/system/driver-manager/source/src/policy.rs`; reads TOML blacklist; consulted at probe |
|
||||
| D2 SMP concurrent probe (worker pool over `std::thread::scope`) | ✅ | 🔲 | `redox-driver-core/src/concurrent.rs` with `CountingSemaphore`; tested on host; opt-in via `--concurrent=N` |
|
||||
| D2 PM hooks (Driver::suspend/resume + signal_then_collect) | ✅ | 🔲 | Real SIGTERM/SIGKILL in `DriverConfig`; needs iommu/pcid SetPowerState wiring for actual D3 |
|
||||
| D2 AER foundation (Driver::on_error + ErrorSeverity + RecoveryAction) | ✅ | 🔲 | Trait API complete; needs pcid AER wake source |
|
||||
| D2 C-state / P-state / IOMMU / MSI-X / NUMA helpers | ✅ Library | 🔲 HW | `redox-driver-core/src/modern_technology.rs` — concrete implementations; no driver-manager wrapper (orchestrator removed at v1.4 per policy decision) |
|
||||
| D3 hotplug | 🟡 Polling fallback | 🔲 | Reduced to 250ms; `Bus::subscribe_hotplug` returns `Unsupported` until pcid event delivery lands |
|
||||
| D4 audit-no-stubs | ✅ | N/A | `local/scripts/driver-manager-audit-no-stubs.py` scans 38 files; **0 violations** at v1.7 |
|
||||
| D4 SIGHUP reload worker | ✅ | N/A | `driver-manager/src/sighup.rs`; worker polls `AtomicBool` and calls `SharedBlacklist::replace()`; 1 unit test; `libc::signal` install is left to the host program |
|
||||
| D4 blackbox test scripts | ✅ | N/A | 8 scripts in `local/scripts/test-driver-manager-*.sh` |
|
||||
| D4 heartbeat publisher | ✅ | N/A | `driver-manager/src/heartbeat.rs`; writes JSON to `/var/run/driver-manager.heartbeat.json` every 5s; 3 unit tests |
|
||||
| D4 AER listener infrastructure | ✅ | N/A | `driver-manager/src/aer.rs`; polls `/scheme/acpi/aer`; 7 unit tests; falls back to log-and-no-op when scheme is absent |
|
||||
| C0 dormant service files | ✅ | N/A | Committed in `local/sources/base` submodule (commit `0407d9cc`); both `ConditionPathExists`-gated |
|
||||
| D5 feature-complete gate | ✅ Code | 🔲 HW | All code + tests pass; awaiting real-hardware validation on AMD Threadripper + Intel Alder Lake |
|
||||
| Component | QEMU | Bare Metal | Hardware | Notes |
|
||||
|-----------|------|------------|----------|-------|
|
||||
| **Storage** | | | | |
|
||||
| AHCI SATA | ✅ | 🔲 | [MISSING] | NCQ structure present, not runtime-validated. No AHCI-capable SATA controller inventoried for bare-metal testing. |
|
||||
| NVMe | 🔲 | 🔲 | [AVAILABLE] (LG Gram: SK Hynix [1c5c:1959]) | Basic driver, no multiqueue. NVMe is class-matched (`class=1 subclass=8`), initfs-capable. The LG Gram's NVMe is available for Phase 1 BM validation. |
|
||||
| virtio-blk | ✅ | N/A | N/A | QEMU only |
|
||||
| **Network** | | | | |
|
||||
| e1000d (Intel Gigabit) | ✅ (e1000e emul.) | 🔲 | [MISSING] | ITR structure present, no offload validation. QEMU `-device e1000e` emulates 82574L `8086:10d3` — proven bounded (DHCP+ping). Physical e1000/e1000e NIC not identified in any inventoried bench. Modern I219/I225 NOT supported. |
|
||||
| rtl8168d (Realtek Gigabit) | 🔲 (no QEMU emul.) | 🔲 | [MISSING] | PHY config present. QEMU has no rtl8168 model — must be tested bare metal. No physical RTL8168/8169 NIC identified in any bench. |
|
||||
| rtl8139d (Realtek Fast Eth.) | 🔲 (QEMU avail., not proven) | 🔲 | [DEFERRED] | Legacy 10/100 NIC. QEMU `-device rtl8139` available but not runtime-proven. Physical RTL8139: legacy PCI, deprioritized vs. gigabit.+ |
|
||||
| ixgbed (Intel 10GbE) | 🔲 (no QEMU emul.) | 🔲 | [MISSING] | Port of ixy.rs, <1000 LoC, MSI-X. 40 PCI IDs supported (82599 family). No physical 10GbE NIC (X520/X540/X550) inventoried. |
|
||||
| virtio-netd (VirtIO) | ✅ (MSI-X proven) | N/A | N/A | QEMU only. MSI-X + bounded VM networking baseline proven. |
|
||||
| redbear-iwlwifi (Intel Wi-Fi) | 🔲 (VFIO only) | 🔲 | [AVAILABLE] (LG Gram BE201 [8086:7740]) | MVM candidates: AX210/AX211/AX201/9462 (all [MISSING] hardware). MLD candidates: BE201 [8086:7740] (only MLD device — [AVAILABLE] in LG Gram). VFIO/passthrough framework exists; no emulated Wi-Fi in QEMU. Firmware pre-staged for BE201 c101–c106. MLD Rust layer code-complete (23 tests), never HW-validated. See `HARDWARE-NETWORKING-INVENTORY.md` §2.6. |
|
||||
| redbear-ecmd (USB CDC ECM) | 🔲 (not tested) | 🔲 | [MISSING] | USB CDC ECM/NCM driver for USB-Ethernet dongles. No dongle inventoried. **Critical: only viable interim network for LG Gram (no wired NIC).** |
|
||||
| **Audio** | | | | |
|
||||
| Intel HDA | 🔲 | 🔲 | [AVAILABLE] (LG Gram: cAVS/SOF [8086:7728]) | Codec detection + jack sense added, not validated. LG Gram HDA is cAVS/DSP-based – legacy HDA cannot reach ALC298 codec behind DSP; needs SOF port. |
|
||||
| AC97 | 🔲 | 🔲 | [MISSING] | Basic driver. No AC97 hardware inventoried. |
|
||||
| **Input** | | | | |
|
||||
| PS/2 | ✅ | 🔲 | [AVAILABLE] (LG Gram: i8042 keyboard, AUX disabled) | QEMU keyboard/mouse work. LG Gram has PS/2 keyboard (AUX port disabled — handled by ps2d). |
|
||||
| USB HID | ✅ | 🔲 | [AVAILABLE] (LG Gram: USB keyboard/mouse attachable) | Keyboard/mouse autospawn via test-usb-qemu.sh (P1 hardening); not validated on real HW. |
|
||||
| I2C-HID Touchpad | 🔲 | 🔲 | [AVAILABLE] (LG Gram: 04CA:00CC on LPSS DesignWare I2C) | Full I2C chain code-complete (dw-i2c engine, LPSS PCI bring-up, i2c-hidd with multitouch parser). Runtime proof pending Phase 1 boot. |
|
||||
| **USB** | | | | |
|
||||
| xHCI host controller | ✅ | 🔲 | [AVAILABLE] (LG Gram: 2× xHCI [8086:7ec0, 8086:777d]) | Interrupt-driven mode proven (test-xhci-irq-qemu.sh); 51-flag quirk table + HCCPARAMS2 gating (P2-A/B); 36-code error recovery (P2-C); not HW-validated. LG Gram quirks decoded (SPURIOUS_SUCCESS, INTEL_HOST, AVOID_BEI, LPM_SUPPORT). |
|
||||
| EHCI/UHCI/OHCI controllers | 🔲 | 🔲 | [MISSING] | Compile clean; runtime enumeration proofs planned (P8-B). No EHCI/UHCI/OHCI hardware identified in inventoried benches. |
|
||||
| USB storage (BOT) | ✅ | 🔲 | [AVAILABLE] (any USB mass-storage device) | usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open. |
|
||||
| USB hub (non-root) | ✅ | 🔲 | [MISSING] | Hub + hub-child enumeration proven in QEMU (test-usb-hub-qemu.sh): hub descriptor/EP1/scan/debounce/reset→enable, and usb-kbd behind hub enumerates to HID subdriver (class 3.1 keyboard); "reactor race" root-caused to startup latency under load (not a deadlock). No physical hub inventoried. |
|
||||
| **GPU/Display** | | | | |
|
||||
| VESA | ✅ | 🔲 | [AVAILABLE] (LG Gram: GOP framebuffer) | QEMU framebuffer works. LG Gram VESA via GOP framebuffer — vesad fix for bare metal landed (2026-06-19). |
|
||||
| virtio-gpu | ✅ | N/A | N/A | 2D only, QEMU |
|
||||
| redox-drm (Intel MTL iGPU) | 🔲 | 🔲 | [AVAILABLE] (LG Gram: MTL [8086:7d51]) | 0x7D51 in INTEL_GEN12_MTL_IDS. DMC load, GMBUS EDID, CPU PWM backlight, GuC/HuC/GSC manifest — all code-complete (2026-07-22). Display init assumes Gen8-era reg layout. No HW validation. |
|
||||
| **CPU/Power** | | | | |
|
||||
| cpufreqd | 🔲 | 🟡 (BM MSR path fixed) | [AVAILABLE] (LG Gram: Arrow Lake-H HWP) | Governors implemented, MSR path fixed (2026-06-19). Bare-metal boot verified with HWP on Intel laptop. Not yet validated on LG Gram specifically. |
|
||||
| thermald | 🔲 | 🔲 | [AVAILABLE] (LG Gram: TZ00 + MSR-based) | ACPI thermal zones, not HW-validated. MSR fallback path exists. |
|
||||
| **SMP** | | | | |
|
||||
| x2APIC/SMP | ✅ | ✅ | [AVAILABLE] (Threadripper 128-thread + LG Gram 16-core hybrid) | Multi-core works. AMD Threadripper 128-thread bare-metal proven. Intel Arrow Lake-H 16-core hybrid (P/E/LP-E) expected. |
|
||||
| **Driver Manager (driver-manager vs pcid-spawner)** | | | | |
|
||||
| D1 P0 capabilities (C1 dynids + C2 remove + C3 enable + C4 BAR) | ✅ | 🔲 | N/A (code) | Code complete; 52 tests pass; see `local/docs/evidence/driver-manager/D5-AUDIT.md` |
|
||||
| D1 P1 SpawnDecision + format coexistence + policy blacklist | ✅ | 🔲 | N/A (code) | `spawn_decision_gate()` consults env/CLI/blacklist; `convert_legacy` reads legacy pcid.d format |
|
||||
| D1 P1 PciQuirkFlags wired into spawn | ✅ | 🔲 | N/A (code) | `driver-manager/src/quirks.rs` consumes `redox-driver-sys`; NEED_FIRMWARE defers probe; NO_MSIX/NO_MSI/FORCE_LEGACY_IRQ signal intx-fallback via env; DISABLE_ACCEL signals accel-disable |
|
||||
| D1 P1 `/etc/driver-manager.d/` policy loader | ✅ | 🔲 | N/A (code) | `local/recipes/system/driver-manager/source/src/policy.rs`; reads TOML blacklist; consulted at probe |
|
||||
| D2 SMP concurrent probe (worker pool over `std::thread::scope`) | ✅ | 🔲 | N/A (code) | `redox-driver-core/src/concurrent.rs` with `CountingSemaphore`; tested on host; opt-in via `--concurrent=N` |
|
||||
| D2 PM hooks (Driver::suspend/resume + signal_then_collect) | ✅ | 🔲 | N/A (code) | Real SIGTERM/SIGKILL in `DriverConfig`; needs iommu/pcid SetPowerState wiring for actual D3 |
|
||||
| D2 AER foundation (Driver::on_error + ErrorSeverity + RecoveryAction) | ✅ | 🔲 | N/A (code) | Trait API complete; needs pcid AER wake source |
|
||||
| D2 C-state / P-state / IOMMU / MSI-X / NUMA helpers | ✅ Library | 🔲 HW | N/A (code) | `redox-driver-core/src/modern_technology.rs` — concrete implementations; no driver-manager wrapper (orchestrator removed at v1.4 per policy decision) |
|
||||
| D3 hotplug | 🟡 Polling fallback | 🔲 | N/A (code) | Reduced to 250ms; `Bus::subscribe_hotplug` returns `Unsupported` until pcid event delivery lands |
|
||||
| D4 audit-no-stubs | ✅ | N/A | N/A (code) | `local/scripts/driver-manager-audit-no-stubs.py` scans 38 files; **0 violations** at v1.7 |
|
||||
| D4 SIGHUP reload worker | ✅ | N/A | N/A (code) | `driver-manager/src/sighup.rs`; worker polls `AtomicBool` and calls `SharedBlacklist::replace()`; 1 unit test; `libc::signal` install is left to the host program |
|
||||
| D4 blackbox test scripts | ✅ | N/A | N/A (code) | 8 scripts in `local/scripts/test-driver-manager-*.sh` |
|
||||
| D4 heartbeat publisher | ✅ | N/A | N/A (code) | `driver-manager/src/heartbeat.rs`; writes JSON to `/var/run/driver-manager.heartbeat.json` every 5s; 3 unit tests |
|
||||
| D4 AER listener infrastructure | ✅ | N/A | N/A (code) | `driver-manager/src/aer.rs`; polls `/scheme/acpi/aer`; 7 unit tests; falls back to log-and-no-op when scheme is absent |
|
||||
| C0 dormant service files | ✅ | N/A | N/A (code) | Committed in `local/sources/base` submodule (commit `0407d9cc`); both `ConditionPathExists`-gated |
|
||||
| D5 feature-complete gate | ✅ Code | 🔲 HW | [AVAILABLE] (Threadripper AMD + LG Gram Intel Alder Lake class) | All code + tests pass; awaiting real-hardware validation on AMD Threadripper + LG Gram Arrow Lake-H. |
|
||||
|
||||
✅ = validated 🔲 = implemented, not validated N/A = not applicable
|
||||
✅ = validated 🔲 = implemented, not validated 🟡 = partial N/A = not applicable
|
||||
|
||||
### Status note (2026-07-20)
|
||||
### Hardware Status Codes (new, 2026-07-26)
|
||||
|
||||
| Code | Meaning |
|
||||
|------|---------|
|
||||
| `[AVAILABLE]` | Physical hardware present and accessible to operator |
|
||||
| `[MISSING]` | Hardware not present / not acquired — blocks bare-metal validation for this component |
|
||||
| `[DEFERRED]` | Hardware present or acquirable but not yet integrated into the test bench |
|
||||
| `N/A` | Not applicable: component is virtual (e.g. virtio), code-only, or has no hardware dependency |
|
||||
|
||||
See `local/docs/HARDWARE-NETWORKING-INVENTORY.md` for full hardware bench inventory,
|
||||
per-driver PCI ID tables, Wi-Fi AP/card/firmware details, peer system specs, and
|
||||
acquisition recommendations. That document is the canonical hardware inventory for
|
||||
this validation matrix.
|
||||
|
||||
### Status note (2026-07-26)
|
||||
|
||||
- **Hardware inventory created:** `local/docs/HARDWARE-NETWORKING-INVENTORY.md` is the new Phase -1 gate. It enumerates all known hardware, marks missing items, and lists acquisition priorities.
|
||||
- **Critical networking gaps:** (1) Threadripper build host NIC inventory never collected — operator must check. (2) No USB-Ethernet dongle for LG Gram interim networking. (3) No dedicated Wi-Fi AP for bounded validation. (4) No physical Intel/Realtek NIC cards for bare-metal Ethernet validation.
|
||||
- **LG Gram hardware available:** Intel BE201 [8086:7740] Wi-Fi, NVMe SK Hynix, 2× xHCI, Intel MTL iGPU [8086:7d51], I2C-HID touchpad, PS/2 keyboard, Arrow Lake-H HWP — all mapped to drivers in this matrix. Phase 1 BM boot is the gate.
|
||||
- **Network matrix expanded from 3 rows to 8 rows** (added: rtl8139d, ixgbed, redbear-iwlwifi, redbear-ecmd) — per the systematic networking fix plan, all network drivers must be tracked individually with hardware availability.
|
||||
|
||||
### Prior Status note (2026-07-20)
|
||||
|
||||
- The login-based QEMU proofs (PS/2 + serio, monotonic timer, IOMMU first-use, USB storage BOT)
|
||||
now run through `local/scripts/qemu-login-expect.py` (stdlib python) instead of the host
|
||||
|
||||
@@ -20,12 +20,21 @@ Every greeter-critical component now compiles and produces a pkgar:
|
||||
**`redbear-compositor`**, **`redbear-greeter`**. (The greeter runs on
|
||||
redbear-compositor, NOT KWin — KWin is post-login and deferred.)
|
||||
|
||||
**Sole remaining ISO blocker: `driver-manager`** — fails with `Arc does not
|
||||
implement Copy` (main.rs:390) because it compiles against the operator's
|
||||
in-progress **redox-driver-sys** (`unified_events`/`redox_driver_core`, dirty
|
||||
working tree). It is boot-critical (spawns redox-drm → `/scheme/drm/card0` for
|
||||
the display) so cannot be excluded. When it compiles, `make live` assembles the
|
||||
ISO. Left untouched — operator's active WIP.
|
||||
**Sole remaining ISO blocker (2026-07-25 snapshot): `driver-manager`** — at
|
||||
the time of this milestone it failed with `Arc does not implement Copy`
|
||||
(main.rs:390) because it compiled against the operator's in-progress
|
||||
**redox-driver-sys** (`unified_events`/`redox_driver_core`, dirty working
|
||||
tree). It is boot-critical (spawns redox-drm → `/scheme/drm/card0` for the
|
||||
display) so cannot be excluded.
|
||||
|
||||
> **STATUS UPDATE (2026-07-26): RESOLVED.** The `Arc`/`Copy` move-bug was fixed
|
||||
> (commits `2a65fb760d`, `4822c85e5c` — clone `Arc` for the listener closures)
|
||||
> and the driver-manager cutover completed (operator-ratified, 2026-07-23/24):
|
||||
> `driver-manager` is the sole PCI match/claim/spawn daemon in every
|
||||
> `redbear-*` config and compiles cleanly. `pcid-spawner` is fully retired.
|
||||
> See `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6). The ISO now
|
||||
> assembles via `make live`; the open work is **runtime display validation in
|
||||
> QEMU** (seeing the SDDM/greeter prompt on the framebuffer), not compilation.
|
||||
|
||||
**Post-login desktop deferred** (kwin/plasma/kirigami/konsole/kf6-ksvg/… — 42
|
||||
packages outside the greeter closure) via `# GREETER-DEFER` comments in
|
||||
@@ -65,7 +74,7 @@ guard, kf6-kwindowsystem Wayland-plugin disable, mesa patch-path linking, stale
|
||||
| 2 | **VirGL determinism:** redox-drm wins virtio-gpu bind (priority-61 vendor 0x1AF4) so KWin gets a real `card0` instead of virtio-gpud's VT scanout | **DONE** `a00c13e5` |
|
||||
| R | Rust components compile-verified: `redox-drm` ✓, `redbear-compositor` ✓ (x86_64-redox) | **DONE** |
|
||||
| 3 | Full build campaign: mesa → libdrm → qt6 → kf6 → kwin → sddm; fix each compile failure | **TODO** (needs cook) |
|
||||
| 4 | Qt6 Wayland `null+8`: candidate patch wired (`qtwaylandscanner-null-guard-listeners.patch`) but NOT runtime-validated in isolation; root cause (why proxy NULL) open — see `QT6-WAYLAND-NULL8-DIAGNOSIS.md` §7 runbook | **TODO** (runtime) |
|
||||
| 4 | Qt6 Wayland `null+8`: comprehensive null guards committed in qtwaylandscanner (init_listener wrap) and libwayland (all `wl_proxy_*` entry points) per README + `DRIVER-MANAGER-MIGRATION-PLAN.md` v5.6; **runtime not yet validated** in isolation (root cause of why the proxy is ever NULL still open — see `QT6-WAYLAND-NULL8-DIAGNOSIS.md` §7 runbook) | **GUARDS COMMITTED, RUNTIME OPEN** |
|
||||
| 5 | Boot redbear-full (QEMU virtio-gpu, `-m 4G`) → observe SDDM greeter on framebuffer | **TODO** |
|
||||
|
||||
## Upstream cherry-pick candidates (enabling, not required yet)
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# Upstream Sync Procedure for Local Forks
|
||||
|
||||
> **SUPERSEDED (2026-07-26):** The PCI-driver-spawner sections below were
|
||||
> written during the 2026-07-20 consolidation, when PCI driver spawning was
|
||||
> consolidated on `pcid-spawner`. **That model is obsolete.**
|
||||
> `pcid-spawner` was **retired and removed** on 2026-07-24;
|
||||
> `driver-manager` (`local/recipes/system/driver-manager/`) is now the sole
|
||||
> live PCI match/claim/spawn daemon in every `redbear-*` config
|
||||
> (operator-ratified cutover, 2026-07-23/24). The canonical current authority
|
||||
> is `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6).
|
||||
>
|
||||
> **This document is kept as historical reference for the upstream-sync
|
||||
> *procedure* only.** The general procedure (Steps 1–12, the package-specific
|
||||
> notes, the keep-vs-drop decision matrix, and the rollback procedure) is still
|
||||
> valid. The two PCI-architecture sections at the end ("driver-manager:
|
||||
> Deferred" and "pcid + pcid-spawner Architecture") describe the *pre-cutover*
|
||||
> state and are annotated in-place below; do not act on them as current.
|
||||
|
||||
**Created:** 2026-06-18
|
||||
**Scope:** relibc, kernel, bootloader, installer, redoxfs, userutils, base
|
||||
**Baseline:** Red Bear OS 0.1.0 release archive (legacy); current development is on the 0.3.1 branch with sources from local/sources/ forks
|
||||
@@ -717,36 +733,46 @@ This applies to:
|
||||
- Build system patches and scripts
|
||||
- Any file under `local/` or `config/redbear-*`
|
||||
|
||||
### driver-manager: Deferred (consolidated onto pcid-spawner, 2026-07-20)
|
||||
### driver-manager: LIVE (operator-ratified cutover, 2026-07-23/24)
|
||||
|
||||
**Status:** Red Bear internal project, currently **deferred**. Upstream Redox
|
||||
does NOT have an equivalent.
|
||||
> **HISTORICAL NOTE (2026-07-26):** This section previously described
|
||||
> `driver-manager` as "Deferred (consolidated onto pcid-spawner,
|
||||
> 2026-07-20)". **That was the pre-cutover state and is now obsolete.** The
|
||||
> text below has been updated to the current ground truth. See
|
||||
> `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6) for the canonical
|
||||
> authority.
|
||||
|
||||
**Status:** Red Bear internal project, **LIVE**. Upstream Redox does NOT have
|
||||
an equivalent.
|
||||
|
||||
`driver-manager` (`local/recipes/system/driver-manager/`) is a combined PCI
|
||||
enumeration + driver matching + hotplug daemon intended to eventually replace
|
||||
the upstream `pcid + pcid-spawner` pair. It was developed because upstream's
|
||||
PCI driver launching was not ready for Red Bear's needs (advanced driver
|
||||
matching via `/lib/drivers.d/*.toml`, ACPI device enumeration, hotplug event
|
||||
handling).
|
||||
enumeration + driver matching + hotplug daemon that replaces the upstream
|
||||
`pcid + pcid-spawner` pair. It was developed because upstream's PCI driver
|
||||
launching was not ready for Red Bear's needs (advanced driver matching via
|
||||
`/lib/drivers.d/*.toml`, ACPI device enumeration, hotplug event handling).
|
||||
|
||||
**As of 2026-07-20 (Task 3 consolidation), PCI driver spawning is consolidated
|
||||
on `pcid-spawner`.** The driver-manager migration was stalled: it was written
|
||||
and packaged, but never actually wired in — its `00_driver-manager.service`
|
||||
ran `cmd="pcid-spawner"` (the legacy binary), while the base recipe's
|
||||
`00_pcid-spawner.service` (`oneshot_async`) was the live spawner. Both
|
||||
services launched `pcid-spawner` asynchronously, so `pcid-spawner` started
|
||||
TWICE and raced to spawn the same drivers. The consolidation dropped the
|
||||
unused `driver-manager = {}` package and the duplicate
|
||||
`00_driver-manager.service`, and pointed `13_driver-params.service`
|
||||
`requires_weak` at `00_pcid-spawner.service`. The driver-manager recipe
|
||||
source is kept for the future migration.
|
||||
**As of the 2026-07-23/24 cutover (operator-ratified), driver-manager owns the
|
||||
boot-time PCI match/claim/spawn path in every `redbear-*` config,
|
||||
unconditionally.** `pcid-spawner` was **fully retired and removed** from
|
||||
configs, services, build wiring, and the tree (its source is preserved in git
|
||||
history). The earlier 2026-07-20 "consolidation onto pcid-spawner" was a
|
||||
transient intermediate state that has since been superseded by the completed
|
||||
driver-manager migration.
|
||||
|
||||
Key cutover facts (per `DRIVER-MANAGER-MIGRATION-PLAN.md` v5.6):
|
||||
- claim-via-channel collapse (`ENOLCK` exclusivity — the former pcid-spawner
|
||||
model) is the live claim path;
|
||||
- spawned-mode `pci_register_driver` in linux-kpi honors `PCID_CLIENT_CHANNEL`,
|
||||
with driver-manager the single owner of match-claim-spawn for both native
|
||||
and Linux-port daemons;
|
||||
- the QEMU runtime gate passed (initfs ahcid bind, switchroot, rootfs e1000d
|
||||
concurrent bind, scheme live, resident hotplug loop).
|
||||
|
||||
**Upstream may provide its own solution in the future.** If and when upstream
|
||||
Redox offers a concrete, working replacement that matches or exceeds
|
||||
driver-manager's capabilities — or when Red Bear completes the driver-manager
|
||||
migration — notify the user for a route decision. Until then, `pcid-spawner`
|
||||
(the base recipe's `00_pcid-spawner.service`, `oneshot_async`) is the sole
|
||||
PCI driver spawner.
|
||||
driver-manager's capabilities, notify the user for a route decision. Until
|
||||
then, `driver-manager` (its `00_driver-manager.service`) is the sole PCI
|
||||
driver spawner.
|
||||
|
||||
### Systemic Sync Flaw (2026-06 Incident)
|
||||
|
||||
@@ -771,20 +797,31 @@ were silently dropped because upstream doesn't have them.
|
||||
must NEVER be removed.
|
||||
5. Any removal must be explicitly approved by the user.
|
||||
|
||||
### pcid + pcid-spawner Architecture
|
||||
### PCI Driver Spawning Architecture (current: driver-manager)
|
||||
|
||||
**Upstream model:**
|
||||
> **HISTORICAL NOTE (2026-07-26):** This section previously described the
|
||||
> `pcid + pcid-spawner` pair as the live spawner ("Red Bear model (current,
|
||||
> since the 2026-07-20 consolidation)"). **That is obsolete.** The text below
|
||||
> has been updated to the current ground truth. See
|
||||
> `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6) for the canonical
|
||||
> authority.
|
||||
|
||||
**Upstream model (historical reference):**
|
||||
1. `pcid` creates `/scheme/pci` (PCI bus enumeration)
|
||||
2. `pcid-spawner` reads `/scheme/pci` and launches drivers per `pcid.d/*.toml`
|
||||
|
||||
**Red Bear model (current, since the 2026-07-20 consolidation):**
|
||||
**Red Bear model (current, since the 2026-07-23/24 cutover):**
|
||||
1. `pcid` creates `/scheme/pci` (initfs service `35_pcid.service`)
|
||||
2. `pcid-spawner --initfs` launches critical boot drivers (initfs)
|
||||
3. `pcid-spawner` (the base recipe's `00_pcid-spawner.service`,
|
||||
`oneshot_async`) is the sole PCI driver spawner on the rootfs side
|
||||
2. `driver-manager` is the sole PCI match/claim/spawn daemon on both initfs
|
||||
and rootfs. It owns the boot-time PCI device match/claim/spawn path for
|
||||
native Redox daemons and Linux-port drivers (via `PCID_CLIENT_CHANNEL` /
|
||||
spawned-mode `pci_register_driver` in linux-kpi).
|
||||
3. `pcid-spawner` has been **retired and removed** (2026-07-24); its source is
|
||||
preserved in git history only.
|
||||
|
||||
**Key learning:** Without `35_pcid.service` in initfs, `/scheme/pci` is never
|
||||
created, and BOTH `pcid-spawner` (initfs and rootfs) fail with ENODEV. This
|
||||
was masked in 0.2.3 because driver-manager did its own PCI enumeration via
|
||||
`redox_driver_pci` and didn't depend on `/scheme/pci`. driver-manager is now
|
||||
deferred (see above); the live path is `pcid` + `pcid-spawner`.
|
||||
**Key learning (still valid):** Without `35_pcid.service` in initfs,
|
||||
`/scheme/pci` is never created, and driver-manager's rootfs spawner fails with
|
||||
ENODEV. This was masked in 0.2.3 because driver-manager (then deferred) did its
|
||||
own PCI enumeration via `redox_driver_pci` and didn't depend on `/scheme/pci`.
|
||||
After the cutover, driver-manager consumes `/scheme/pci` like the rest of the
|
||||
stack, so `35_pcid.service` is a hard boot dependency.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
--- ./CMakeLists.txt
|
||||
+++ ./CMakeLists.txt
|
||||
@@ -76,5 +76,5 @@
|
||||
add_definitions(-DTRANSLATION_DOMAIN="kcmutils6")
|
||||
add_definitions(-DTRANSLATION_DOMAIN=\"kcmutils6\")
|
||||
-ki18n_install(po)
|
||||
+#ki18n_install(po) # translations deferred
|
||||
add_subdirectory(src)
|
||||
|
||||
@@ -16,6 +16,8 @@ linux-kpi = { path = "../../linux-kpi/source" }
|
||||
[target.'cfg(target_os = "redox")'.dependencies]
|
||||
redox-driver-sys = { path = "../../redox-driver-sys/source", features = ["redox"] }
|
||||
pcid_interface = { path = "../../../../sources/base/drivers/pcid", package = "pcid" }
|
||||
libredox = { path = "../../../../../local/sources/libredox" }
|
||||
syscall = { package = "redox_syscall", path = "../../../../../local/sources/syscall", features = ["std"] }
|
||||
|
||||
[patch.crates-io]
|
||||
redox-driver-sys = { path = "../../redox-driver-sys/source" }
|
||||
|
||||
@@ -28,8 +28,17 @@ DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
redbear_qt_link_sysroot_dirs "${COOKBOOK_SYSROOT}" plugins mkspecs metatypes modules qml
|
||||
|
||||
=======
|
||||
redbear_qt_link_sysroot_dirs "${COOKBOOK_SYSROOT}" plugins mkspecs metatypes modules
|
||||
|
||||
# The local source tree is now at upstream 6.27.0 with QML/Quick/kcmshell
|
||||
# restored. Only poqm translations remain disabled (lupdate/lrelease not yet
|
||||
# built for target). The Red Bear-specific changes live as a durable external
|
||||
# patch in local/patches/kf6-kcmutils/.
|
||||
>>>>>>> Stashed changes
|
||||
REDBEAR_PATCHES_DIR="${REDBEAR_PATCHES_DIR:-$(cd "$(dirname "${COOKBOOK_RECIPE}")/../../../.." && pwd)}/local/patches/kf6-kcmutils"
|
||||
cookbook_apply_patches "${REDBEAR_PATCHES_DIR}"
|
||||
|
||||
|
||||
@@ -74,7 +74,11 @@ ecm_set_disabled_deprecation_versions(
|
||||
ecm_find_qmlmodule(org.kde.kirigami REQUIRED)
|
||||
|
||||
add_definitions(-DTRANSLATION_DOMAIN=\"kcmutils6\")
|
||||
<<<<<<< Updated upstream
|
||||
#ki18n_install(po) # translations deferred
|
||||
=======
|
||||
#ki18n_install(po) # translations deferred until lupdate/lrelease is built for target
|
||||
>>>>>>> Stashed changes
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(tools)
|
||||
if(BUILD_TESTING)
|
||||
|
||||
@@ -2375,3 +2375,102 @@ cooperation that TLC does not currently have:
|
||||
- **File listing** dialog (F9→Command→File listing): requires an
|
||||
archive-format implementation in `ops/info.rs` that is out of
|
||||
scope for MC parity.
|
||||
|
||||
---
|
||||
|
||||
## 13. Round 4 Progress (2026-07-26)
|
||||
|
||||
Round 4 closed the remaining "not yet wired" stubs in dispatch paths
|
||||
and removed obsolete docs.
|
||||
|
||||
### 13.1 Macro replay consumption (handlers.rs)
|
||||
|
||||
Previously EditorCmd::MacroRepeat loaded the buffer into a
|
||||
`MacroReplayEngine` and stored it in `self.macro_replay`, but
|
||||
`handle_key` never drained it. Round 4 wires the consumption:
|
||||
each call to `handle_key` pops the next replay key from the
|
||||
engine, recursively dispatches it through `handle_key` (matching
|
||||
MC's pacing — the editor redraws between steps), and keeps the
|
||||
engine running until all queued steps are exhausted. The Ctrl-P
|
||||
handler still plays the macro synchronously via the existing
|
||||
for-loop, so the existing `macro_replay` field is a parallel path
|
||||
that EditorCmd::MacroRepeat loads but does not consume.
|
||||
|
||||
### 13.2 Window operations (dispatch.rs)
|
||||
|
||||
Replaces the "window manager control not yet wired" stubs with real
|
||||
behavior. WindowMove enters a move mode where arrow keys emit
|
||||
CSI-windowManipulation sequences to the parent terminal (the
|
||||
parent terminal or window manager decides how to handle them).
|
||||
WindowResize enters a resize mode with CSI-windowResize sequences.
|
||||
WindowFullscreen emits the xterm OSC 1049 sequence (`\x1b[?1049h`)
|
||||
to the parent terminal. Esc cancels an active move/resize mode.
|
||||
|
||||
The move/resize modes are wired in `handle_key` (`handlers.rs:128`)
|
||||
to intercept arrow keys and emit the right escape sequence based
|
||||
on direction. The editor buffer is unchanged during a move/resize
|
||||
session.
|
||||
|
||||
WindowNext/Prev/List retain their existing no-op status messages
|
||||
since TLC is single-window; they describe the MC semantics so the
|
||||
user knows the keys are recognised.
|
||||
|
||||
New `Editor` fields: `window_move_mode`, `window_resize_mode`.
|
||||
|
||||
### 13.3 Nroff toggle gate (text.rs)
|
||||
|
||||
The viewer ToggleNroff command toggled `v.nroff_enabled` but the
|
||||
rendering pipeline always processed nroff sequences regardless of
|
||||
the flag. Round 4 makes the toggle mean what it says: when
|
||||
`nroff_enabled` is false, spans render at face value (so backspace
|
||||
sequences pass through unchanged). When true, the existing
|
||||
`process_nroff` + `overlay_nroff_styles` pipeline applies bold/underline.
|
||||
|
||||
The processing code (`nroff.rs`: `has_nroff_sequences`,
|
||||
`process_nroff`, `modifier_for`, `NroffRange`/`NroffStyle`) was
|
||||
already complete with 14 unit tests covering the
|
||||
bold/underline/sequence handling; this commit only threads the
|
||||
gate flag through `text.rs:298`.
|
||||
|
||||
### 13.4 Stale doc archive
|
||||
|
||||
Two previous planning docs have been archived to
|
||||
`legacy-superseded-2026-07-25/`:
|
||||
|
||||
- `IMPROVEMENT-PLAN.md` (2026-06-18, claimed ~65% parity at 698
|
||||
tests) — archived with a `SUPERSEDED.md` audit log entry. Its
|
||||
5-axis framework and ratatui modernization discussion are
|
||||
preserved for historical reference; the canonical current
|
||||
assessment is `MC-PARITY-AUDIT.md`.
|
||||
- `PLAN.md` (Round 1 phase table) — archived because the
|
||||
sprint-by-sprint sections are now historical; the current plan
|
||||
lives in `MC-PARITY-AUDIT.md` Round 1-4 status sections.
|
||||
|
||||
The recipe root is now: `README.md`, `MC-PARITY-AUDIT.md`,
|
||||
`recipe.toml`, `source/`, `target/`, `dist/`,
|
||||
`legacy-superseded-2026-07-25/`. README.md and SUPERSEDED.md
|
||||
were updated to reflect both archives.
|
||||
|
||||
### 13.5 Verification
|
||||
|
||||
| Surface | Tests | Status |
|
||||
|---|---|---|
|
||||
| TLC unit tests | 1486 | ✅ all pass |
|
||||
| Cookbook unit tests | 43 | ✅ all pass |
|
||||
| Cargo build (workspace) | clean | ✅ |
|
||||
|
||||
### 13.6 Remaining gaps (carried forward from §11.5)
|
||||
|
||||
These items are unchanged from Round 3 and still require external
|
||||
cooperation that TLC does not currently have:
|
||||
|
||||
- **Nroff backspace-overstrike** in the new "false" branch: spans
|
||||
render at face value, so backspace sequences pass through
|
||||
unchanged. Round 4 only added the gate flag; the actual
|
||||
preprocessing pipeline was already complete with 14 unit tests.
|
||||
- **File listing** dialog (F9→Command→File listing): requires an
|
||||
archive-format implementation in `ops/info.rs` that is out of
|
||||
scope for MC parity. Round 4 audit showed that this is a
|
||||
placeholder item that doesn't actually exist in MC's Command
|
||||
menu — it's a derived feature specific to the audit document.
|
||||
|
||||
|
||||
@@ -183,20 +183,4 @@ A complete cross-reference of every visible UI element in TLC against MC 4.8.33
|
||||
(Midnight Commander) lives in **[MC-PARITY-AUDIT.md](MC-PARITY-AUDIT.md)**. That audit
|
||||
identifies ~70% per-surface parity on the displayed-info layer (panel header, file
|
||||
rows, mini-status, F-key bar, sort indicator, dialog content) and lays out a 6-phase
|
||||
fix plan to reach 100% on every screen and menu.
|
||||
|
||||
## Stale documents
|
||||
|
||||
Two previous planning docs have been archived to
|
||||
`legacy-superseded-2026-07-25/`:
|
||||
|
||||
- `IMPROVEMENT-PLAN.md` (2026-06-18, claimed ~65% parity at 698 tests)
|
||||
— archived with a `SUPERSEDED.md` audit log entry. Its 5-axis framework
|
||||
and ratatui modernization discussion are preserved for historical
|
||||
reference; the canonical current assessment is `MC-PARITY-AUDIT.md`.
|
||||
- `PLAN.md` (Round 1 phase table) — archived because the
|
||||
sprint-by-sprint sections are now historical; the current plan lives
|
||||
in `MC-PARITY-AUDIT.md` Round 1-4 status sections.
|
||||
|
||||
The recipe root is now: `README.md`, `MC-PARITY-AUDIT.md`, `recipe.toml`,
|
||||
`source/`, `target/`, `dist/`, `legacy-superseded-2026-07-25/`.
|
||||
fix plan to reach 100% on every screen and menu.
|
||||
@@ -253,7 +253,7 @@ def main():
|
||||
return 0
|
||||
|
||||
print(' ACTION REQUIRED: orphaned patches must be applied to fork HEAD')
|
||||
print(' See: local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md')
|
||||
print(' See: local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md')
|
||||
print(' Helper: re-run local/scripts/apply-patches.sh and re-absorb')
|
||||
if args.strict:
|
||||
return 1
|
||||
|
||||
+1
-1
Submodule local/sources/base updated: c33f6ce762...36dddf2300
+1
-1
Submodule local/sources/bootloader updated: 092784c552...796faa0532
+1
-1
Submodule local/sources/installer updated: bf43c0a34f...bb243fb3e5
+1
-1
Submodule local/sources/userutils updated: 3b02e0b999...1e727ca1bd
@@ -1,59 +0,0 @@
|
||||
[package]
|
||||
name = "xwayland"
|
||||
version = "24.1.8"
|
||||
|
||||
#TODO: complete runtime validation. The recipe builds with the
|
||||
#current patch set, but the following remain open:
|
||||
# 1. Run a live X client under Xwayland on the Red Bear Wayland
|
||||
# compositor; verify that the X11 forwarding creates and surfaces
|
||||
# windows correctly via wl_shm + the X11 window protocol.
|
||||
# 2. Verify XInput2 input forwarding (pointer + keyboard) through
|
||||
# the libinput path on Red Bear.
|
||||
# 3. Validate Xrender + Xshm extensions against the Mesa-backed
|
||||
# xshmfence path (we already include libxshmfence in deps).
|
||||
# 4. Capture an Xwayland-launched X11 client screenshot from
|
||||
# inside the Red Bear Wayland session.
|
||||
# 5. The current recipe has -Ddrm=false, -Dglamor=false, -Dglx=false
|
||||
# which means it's a pure software rasterizer. A real
|
||||
# acceleration path needs the upstream glamor/GLX
|
||||
# integration and a working libdrm-amdgpu-or-intel userland
|
||||
# driver. For now, Xwayland is a CPU-rendered X server; that
|
||||
# is sufficient for headless validation but not for a full
|
||||
# KDE-on-X11 fallback.
|
||||
[source]
|
||||
tar = "https://www.x.org/releases/individual/xserver/xwayland-24.1.8.tar.xz"
|
||||
patches = [
|
||||
"redox.patch"
|
||||
]
|
||||
[build]
|
||||
template = "meson"
|
||||
dependencies = [
|
||||
"libpthread-stubs",
|
||||
"libepoxy",
|
||||
"libxkbfile",
|
||||
"libxfont2",
|
||||
"libffi",
|
||||
"libpng",
|
||||
"pixman",
|
||||
"x11proto",
|
||||
"xtrans",
|
||||
"libxau",
|
||||
"libx11",
|
||||
"libxcb",
|
||||
"openssl1",
|
||||
"freetype2",
|
||||
"libwayland",
|
||||
"libfontenc",
|
||||
"wayland-protocols",
|
||||
"zlib",
|
||||
"libxcvt",
|
||||
"libxdmcp",
|
||||
"libxshmfence",
|
||||
]
|
||||
mesonflags = [
|
||||
"-Ddrm=false",
|
||||
"-Dglamor=false",
|
||||
"-Dglx=false",
|
||||
"-Dsecure-rpc=false",
|
||||
"-Dmitshm=false",
|
||||
]
|
||||
@@ -1,158 +0,0 @@
|
||||
diff -ruwN source/hw/xwayland/meson.build source-new/hw/xwayland/meson.build
|
||||
--- source/hw/xwayland/meson.build 2024-01-16 16:38:49.000000000 +0700
|
||||
+++ source-new/hw/xwayland/meson.build 2025-10-01 07:51:14.456575515 +0700
|
||||
@@ -30,8 +30,7 @@
|
||||
'../../mi/miinitext.h',
|
||||
]
|
||||
|
||||
-scanner_dep = dependency('wayland-scanner', native: true)
|
||||
-scanner = find_program(scanner_dep.get_pkgconfig_variable('wayland_scanner'))
|
||||
+scanner = find_program('wayland-scanner', native: true)
|
||||
|
||||
protocols_dep = dependency('wayland-protocols', version: wayland_protocols_req)
|
||||
protodir = protocols_dep.get_pkgconfig_variable('pkgdatadir')
|
||||
@@ -55,11 +54,7 @@
|
||||
arguments : ['client-header', '@INPUT@', '@OUTPUT@']
|
||||
)
|
||||
|
||||
-if scanner_dep.version().version_compare('>= 1.14.91')
|
||||
scanner_argument = 'private-code'
|
||||
-else
|
||||
- scanner_argument = 'code'
|
||||
-endif
|
||||
|
||||
code = generator(scanner,
|
||||
output : '@BASENAME@-protocol.c',
|
||||
diff -ruwN source/hw/xwayland/xwayland-glamor.h source-new/hw/xwayland/xwayland-glamor.h
|
||||
--- source/hw/xwayland/xwayland-glamor.h 2024-01-16 16:38:49.000000000 +0700
|
||||
+++ source-new/hw/xwayland/xwayland-glamor.h 2025-10-01 08:01:01.409102814 +0700
|
||||
@@ -31,7 +31,7 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <wayland-client.h>
|
||||
-#include <xf86drm.h>
|
||||
+// #include <xf86drm.h>
|
||||
|
||||
#include "xwayland-types.h"
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
/* Called to get the DRM device of the primary GPU that this backend
|
||||
* is set up on.
|
||||
*/
|
||||
- drmDevice *(*get_main_device)(struct xwl_screen *xwl_screen);
|
||||
+ // drmDevice *(*get_main_device)(struct xwl_screen *xwl_screen);
|
||||
|
||||
/* Direct hook to create the backing pixmap for a window */
|
||||
PixmapPtr (*create_pixmap_for_window)(struct xwl_window *xwl_window);
|
||||
diff -ruwN source/hw/xwayland/xwayland-input.c source-new/hw/xwayland/xwayland-input.c
|
||||
--- source/hw/xwayland/xwayland-input.c 2024-01-16 16:38:49.000000000 +0700
|
||||
+++ source-new/hw/xwayland/xwayland-input.c 2025-10-01 08:02:59.681082380 +0700
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#include <xwayland-config.h>
|
||||
|
||||
-#include <linux/input.h>
|
||||
+// #include <linux/input.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <inputstr.h>
|
||||
@@ -758,6 +758,7 @@
|
||||
xwl_seat->xwl_screen->serial = serial;
|
||||
|
||||
switch (button) {
|
||||
+/*
|
||||
case BTN_LEFT:
|
||||
index = 1;
|
||||
break;
|
||||
@@ -768,10 +769,9 @@
|
||||
index = 3;
|
||||
break;
|
||||
default:
|
||||
- /* Skip indexes 4-7: they are used for vertical and horizontal scroll.
|
||||
- The rest of the buttons go in order: BTN_SIDE becomes 8, etc. */
|
||||
index = 8 + button - BTN_SIDE;
|
||||
break;
|
||||
+*/
|
||||
}
|
||||
|
||||
valuator_mask_zero(&mask);
|
||||
@@ -1057,7 +1057,7 @@
|
||||
|
||||
state_rec = xwl_seat->keyboard->key->xkbInfo->state;
|
||||
xkb_state = (XkbStateFieldFromRec(&state_rec) & 0xff);
|
||||
-
|
||||
+ /*
|
||||
if (((key == KEY_LEFTSHIFT || key == KEY_RIGHTSHIFT) && (xkb_state & ControlMask)) ||
|
||||
((key == KEY_LEFTCTRL || key == KEY_RIGHTCTRL) && (xkb_state & ShiftMask))) {
|
||||
|
||||
@@ -1072,6 +1072,7 @@
|
||||
if (xwl_window)
|
||||
xwl_window_rootful_update_title(xwl_window);
|
||||
}
|
||||
+ */
|
||||
}
|
||||
|
||||
static void
|
||||
diff -ruwN source/hw/xwayland/xwayland-window.c source-new/hw/xwayland/xwayland-window.c
|
||||
--- source/hw/xwayland/xwayland-window.c 2024-01-16 16:38:49.000000000 +0700
|
||||
+++ source-new/hw/xwayland/xwayland-window.c 2025-10-01 08:00:07.858324820 +0700
|
||||
@@ -1102,7 +1102,7 @@
|
||||
for (int j = 0; j < dev_formats->num_formats; j++)
|
||||
free(dev_formats->formats[j].modifiers);
|
||||
free(dev_formats->formats);
|
||||
- drmFreeDevice(&dev_formats->drm_dev);
|
||||
+ // drmFreeDevice(&dev_formats->drm_dev);
|
||||
}
|
||||
|
||||
void
|
||||
diff -ruwN source/hw/xwayland/xwayland-window.h source-new/hw/xwayland/xwayland-window.h
|
||||
--- source/hw/xwayland/xwayland-window.h 2024-01-16 16:38:49.000000000 +0700
|
||||
+++ source-new/hw/xwayland/xwayland-window.h 2025-10-01 08:00:40.464798537 +0700
|
||||
@@ -38,7 +38,7 @@
|
||||
#include <propertyst.h>
|
||||
#include <validate.h>
|
||||
#include <wayland-util.h>
|
||||
-#include <xf86drm.h>
|
||||
+// #include <xf86drm.h>
|
||||
|
||||
#include "xwayland-types.h"
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
};
|
||||
|
||||
struct xwl_device_formats {
|
||||
- drmDevice *drm_dev;
|
||||
+ // drmDevice *drm_dev;
|
||||
int supports_scanout;
|
||||
uint32_t num_formats;
|
||||
struct xwl_format *formats;
|
||||
@@ -75,7 +75,7 @@
|
||||
struct xwl_dmabuf_feedback {
|
||||
struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback;
|
||||
struct xwl_format_table format_table;
|
||||
- drmDevice *main_dev;
|
||||
+ // drmDevice *main_dev;
|
||||
/*
|
||||
* This will be filled in during wl events and copied to
|
||||
* dev_formats on dmabuf_feedback.tranche_done
|
||||
diff -ruwN source/os/access.c source-new/os/access.c
|
||||
--- source/os/access.c 2024-01-16 16:38:49.000000000 +0700
|
||||
+++ source-new/os/access.c 2025-10-01 07:22:43.931644468 +0700
|
||||
@@ -446,7 +446,7 @@
|
||||
int family;
|
||||
register HOST *host;
|
||||
|
||||
-#ifndef WIN32
|
||||
+#if !defined(WIN32) && !defined(__redox__)
|
||||
struct utsname name;
|
||||
#else
|
||||
struct {
|
||||
@@ -477,7 +477,7 @@
|
||||
* uname() lets me access to the whole string (it smashes release, you
|
||||
* see), whereas gethostname() kindly truncates it for me.
|
||||
*/
|
||||
-#ifndef WIN32
|
||||
+#if !defined(WIN32) && !defined(__redox__)
|
||||
uname(&name);
|
||||
#else
|
||||
gethostname(name.nodename, sizeof(name.nodename));
|
||||
@@ -73,7 +73,7 @@ done
|
||||
if [ $violations -gt 0 ]; then
|
||||
echo "FAILED: $violations init service path violation(s) found." >&2
|
||||
echo "Config [[files]] entries must use /etc/init.d/ not /usr/lib/init.d/" >&2
|
||||
echo "See: local/docs/BUILD-SYSTEM-HARDENING-PLAN.md Phase 1" >&2
|
||||
echo "See: local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md Phase 1" >&2
|
||||
exit 1
|
||||
else
|
||||
echo "OK: No init service path violations in config files."
|
||||
|
||||
Reference in New Issue
Block a user