660 lines
32 KiB
Markdown
660 lines
32 KiB
Markdown
# Red Bear OS relibc Completeness and Enhancement Plan
|
||
|
||
## Purpose
|
||
|
||
This document assesses relibc in Red Bear OS for **strengths**, **deficiencies**, **subsystem-facing
|
||
gaps**, and **overall quality**, then defines a practical plan for improving it.
|
||
|
||
The goal is not to treat relibc as a generic libc project. The goal is to describe:
|
||
|
||
- what is already strong,
|
||
- what still depends on active local overlay state rather than upstream relibc itself,
|
||
- what is still incomplete or weak,
|
||
- what downstream subsystems still depend on relibc improvement,
|
||
- and what order of work best improves real system capability.
|
||
|
||
This is a Red Bear-specific document. It is grounded in the current repo state rather than older,
|
||
pre-correction roadmap assumptions.
|
||
|
||
## Evidence Model
|
||
|
||
This plan uses four evidence buckets and does **not** treat them as equivalent:
|
||
|
||
- **source-visible** — behavior visible directly in the current relibc source tree
|
||
- **patch-carried** — behavior carried in the active `local/patches/relibc/*.patch` recipe inputs rather than upstream relibc itself
|
||
- **build-visible downstream** — downstream packages now compile because the libc surface exists
|
||
- **runtime-validated** — behavior has been exercised successfully in real downstream/runtime paths
|
||
|
||
This distinction matters because relibc’s current problem is often **not** “API absent,” but the gap
|
||
between **implemented**, **patch-carried**, **build-proven**, and **runtime-trusted**.
|
||
|
||
## Upstream vs Red Bear ownership
|
||
|
||
For relibc, the ownership boundary must stay explicit:
|
||
|
||
- `recipes/core/relibc/source/` is the live upstream-owned working tree used for actual build and
|
||
validation
|
||
- the active Red Bear-owned durable relibc compatibility carrier is the recipe-replayed
|
||
`local/patches/relibc/*.patch` set; in the current tree that active replay has narrowed to
|
||
`local/patches/relibc/redox.patch`
|
||
- older `local/patches/relibc/P3-*.patch` files are historical bring-up references unless a current
|
||
recipe still replays them
|
||
- `local/docs/...` is the durable explanation of what those changes mean and how to reapply them
|
||
|
||
That means a relibc change is not truly preserved until its ownership is explicit in the right
|
||
place:
|
||
|
||
1. if upstream now owns the behavior, the live relibc source tree is the canonical implementation
|
||
2. if Red Bear still owns a unique delta, it must also exist in the active
|
||
`local/patches/relibc/` recipe input set so the same result can be recreated after an upstream
|
||
refresh
|
||
|
||
The repo standard for success is not merely “the current source tree builds.” The standard is:
|
||
|
||
> we can fetch fresh upstream relibc sources, reapply the active Red Bear relibc patch carriers, and still
|
||
> rebuild the same working result.
|
||
|
||
Any relibc work that exists only under `recipes/core/relibc/source/` should therefore be treated as
|
||
validated-but-not-yet-preserved.
|
||
|
||
Because relibc is also one of the fastest-moving upstream areas, Red Bear should apply one more
|
||
rule here:
|
||
|
||
> if a Red Bear relibc patch solves a problem that upstream has already solved, prefer the upstream
|
||
> solution and retire or reduce the local patch.
|
||
|
||
The goal is durable compatibility, not a permanent relibc fork.
|
||
|
||
## Current Repo State
|
||
|
||
> **Implementation note (current Red Bear tree):** this repo pass moved several relibc items from
|
||
> patch-carried-only or downstream-workaround status into source-visible libc behavior. The current
|
||
> tree now contains source-visible and strict Redox-target runtime-tested `signalfd`, `timerfd`, `eventfd`, `open_memstream`,
|
||
> `F_DUPFD_CLOEXEC`, `MSG_NOSIGNAL`, a bounded `waitid()` path, bounded `RLIMIT_NOFILE` /
|
||
> `RLIMIT_MEMLOCK` behavior, a bounded `eth0`-backed `net/if.h` / `ifaddrs.h` view, a source-visible
|
||
> `resolv.h` plus bounded `res_query()` / `res_search()` compatibility paths with receive/send
|
||
> timeout hardening, a first named-semaphore implementation on top of the existing shm path, and
|
||
> bounded `sys/ipc.h` / `sys/shm.h` surfaces for the `IPC_PRIVATE` / `shmget` / `shmat` /
|
||
> `shmdt` / `shmctl(IPC_RMID)` workflow.
|
||
|
||
> **Downstream validation note (current Red Bear tree):** `libwayland` now cooks successfully
|
||
> against the updated relibc, and qtbase now configures, builds, and stages with
|
||
> `FEATURE_process=ON`, `FEATURE_sharedmemory=ON`, and `FEATURE_systemsemaphore=ON` in the current
|
||
> tree. The relibc `tests/` harness also now builds focused Redox-target binaries for `eventfd`,
|
||
> `waitid`, `res_init`, `res_query`, `sem_open`, and `shmget`, and the host-target variants of those same
|
||
> focused tests now execute successfully under the relibc-built host sysroot. That does not mean
|
||
> relibc is complete, but it does mean the implementation has crossed real downstream build/stage
|
||
> gates and direct execution-level proof rather than remaining an isolated libc-only pass. The
|
||
> current host-side `res_query` proof is still bounded: it compiles, runs, and fails fast under the
|
||
> relibc sysroot instead of hanging, but it is not yet a runtime-trusted downstream DNS proof.
|
||
>
|
||
> **Additional downstream proof (current Red Bear tree):** the in-tree `openssh` recipe now cooks
|
||
> successfully against the relibc resolver surface after switching the recipe to the rebuilt relibc
|
||
> headers/libraries and removing stale Redox-specific resolver fallbacks from the OpenSSH patch.
|
||
> That is still build/stage proof rather than runtime SSH validation, but it demonstrates that real
|
||
> consumers can now compile and link `res_init`, `res_query`, and `dn_expand` from relibc.
|
||
>
|
||
> **Fresh revalidation pass (current Red Bear tree):** the focused host-side relibc proofs were
|
||
> rerun for `eventfd`, `waitid`, `res_init`, `res_query`, `sem_open`, and `shmget`; the binaries all
|
||
> built, and the executions succeeded for `eventfd`, `waitid`, `res_init`, `sem_open`, and `shmget`
|
||
> with the bounded `res_query` test still failing fast rather than hanging. The main downstream
|
||
> consumers previously used as evidence were also rerun successfully: `CI=1 ./target/release/repo cook libwayland`,
|
||
> `CI=1 ./target/release/repo cook qtbase`, and `CI=1 ./target/release/repo cook openssh` now all
|
||
> succeed in the current tree.
|
||
>
|
||
> **Additional focused coverage (current Red Bear tree):** integrated relibc tests were also added
|
||
> for `open_memstream`, SysV semaphores via `semget`/`semop`/`semctl`, `timerfd`, `signalfd`, and
|
||
> `eventfd`. On the host-side relibc sysroot, `open_memstream`, `semget`, and the bounded SysV shm
|
||
> path execute successfully. On the Redox-target runtime path, the repaired `cookbook_redoxer`
|
||
> `write-exec` flow now executes the targeted `eventfd`, `signalfd`, and `timerfd` binaries
|
||
> successfully against the staged relibc test tree, and those tests now fail hard if the APIs are
|
||
> unavailable. That moves the fd-event APIs from source-visible/build-visible status into explicit
|
||
> runtime-tested status for the bounded relibc harness.
|
||
>
|
||
> **Fresh-upstream reapply proof (current Red Bear tree):** a fresh `repo unfetch relibc` →
|
||
> `repo fetch relibc` cycle was used to reconstruct the relibc source tree from upstream-owned
|
||
> sources, the durable `local/patches/relibc/` carrier set was reapplied to that fresh tree, and the
|
||
> resulting rebuild again supported successful downstream `libwayland` and `qtbase` cooks. That is
|
||
> the current proof that Red Bear’s relibc work is not only buildable in-place, but also recoverable
|
||
> after a fresh upstream source refresh.
|
||
|
||
> **Current reconstructed-state proof set:** with the refreshed source tree rebuilt from the local
|
||
> relibc overlay set, the repo now has successful cookbook evidence for all three layers in order:
|
||
> `CI=1 ./target/release/repo cook relibc`, then `CI=1 ./target/release/repo cook libwayland`, then
|
||
> `CI=1 ./target/release/repo cook qtbase`. This is the strongest current proof that the relibc
|
||
> compatibility work is preserved in the right place for long-term maintenance.
|
||
>
|
||
> **Current patch-carrier note:** the bounded `ifaddrs` / `net_if` work and the bounded
|
||
> `arpa/nameser.h` / `resolv.h` compatibility work are now preserved in the tracked
|
||
> `local/patches/relibc/redox.patch` carrier instead of separate transient patch files. The durable
|
||
> relibc recipe patch chain therefore consists only of tracked local patch files plus
|
||
> `recipes/core/relibc/recipe.toml` wiring.
|
||
|
||
### Summary
|
||
|
||
relibc is one of Red Bear’s strongest foundational subsystems, but it is not complete.
|
||
|
||
The current repo shows a relibc that is already strong in:
|
||
|
||
- broad header/libc surface coverage
|
||
- real Redox-native platform integration
|
||
- source-visible implementations of the historical Wayland-facing P3 APIs, with patch carriers still retained as sync/upstream artifacts
|
||
- enough maturity to unlock major build-side progress in Wayland, Qt, and KDE
|
||
- a substantial generic upstream-style test tree
|
||
|
||
The current repo also shows relibc is still weak in:
|
||
|
||
- shared memory / SysV IPC completeness
|
||
- named semaphores
|
||
- process/runtime quality for some downstreams
|
||
- networking/resolver/interface completeness
|
||
- Redox-target and downstream-runtime validation depth
|
||
|
||
### Status Matrix
|
||
|
||
| Area | State | Notes |
|
||
|---|---|---|
|
||
| Core POSIX/header breadth | **strong / partial** | Large header surface exists, but many TODO headers and feature gaps remain |
|
||
| Wayland-facing P3 APIs | **implemented / runtime-tested / bounded** | `signalfd`, `timerfd`, `eventfd`, `open_memstream`, socket flags, and `F_DUPFD_CLOEXEC` now exist in the relibc source tree; strict targeted relibc runtime tests now execute on Redox, but broader consumer semantics still need careful documentation |
|
||
| Networking/libc socket surface | **usable / partial** | AF_INET/AF_UNIX paths exist, but interface/reporting/resolver behavior remains narrow |
|
||
| Qt/KDE downstream unblockers | **build-side improved / multiple gates crossed** | `QProcess`, `QSharedMemory`, and `QSystemSemaphore` now configure, build, and stage on in-tree qtbase; broader runtime validation is still needed |
|
||
| Shared memory / semaphore completeness | **partial** | `shm_open` exists through the Redox shm path, but SysV IPC/shared-memory and named semaphore completeness remain open |
|
||
| Process/runtime completeness | **partial** | Some process-facing functionality still uses stubs or downstream workarounds |
|
||
| Dedicated test surface | **present / Redox-specific coverage still thin** | relibc has a substantial `source/tests/` tree, but the Red Bear-visible Redox/P3/runtime validation story is still weaker than the generic libc test surface |
|
||
| Runtime validation against real consumers | **improved / still bounded** | relibc fd-event runtime tests now execute on Redox; broader desktop consumer semantics still need continued confirmation |
|
||
|
||
## Strong Points
|
||
|
||
### 1. relibc already exposes a broad libc/header surface
|
||
|
||
`recipes/core/relibc/source/src/header/mod.rs` shows a broad libc/header tree with networking,
|
||
threading, polling, stdio, locale, signal, socket, time, and many Unix-facing modules already
|
||
present.
|
||
|
||
That means Red Bear should treat relibc work as **quality and completeness hardening**, not as a
|
||
greenfield libc effort.
|
||
|
||
### 2. The historical P3 Wayland-facing API bridge is now source-visible
|
||
|
||
The local relibc patch carriers documented the APIs that historically blocked Wayland and downstream
|
||
consumers. In the current preserved tree, those fd-event and adjacent IPC surfaces are now present
|
||
in the active upstream relibc source itself, and the relibc-facing recipes no longer replay the old
|
||
standalone P3 carrier set for `eventfd`, `signalfd`, `timerfd`, `waitid`, SysV IPC, or their focused
|
||
test files. The active Red Bear relibc recipe replay has narrowed back to the shared
|
||
`local/patches/relibc/redox.patch` compatibility delta, while the historical P3 patch files remain
|
||
useful as prior bring-up evidence rather than current recipe inputs.
|
||
|
||
### 3. Focused fd-event proof record
|
||
|
||
The bounded fd-event runtime proof now has a small tracked record here so it does not depend only on
|
||
session history.
|
||
|
||
Preserved command shape:
|
||
|
||
- rebuild relibc from tracked carriers: `repo unfetch relibc && repo fetch relibc && repo cook relibc`
|
||
- rebuild targeted test package: `TESTBIN=sys_eventfd/eventfd CI=1 ./target/release/repo cook relibc-tests-bins`
|
||
- execute inside staged Redox target via `cookbook_redbear_redoxer write-exec`
|
||
|
||
Recorded bounded runtime markers from the current pass:
|
||
|
||
- `eventfd_runtime_finalfinal_ok`
|
||
- `signalfd_runtime_finalfinal_ok`
|
||
- `timerfd_runtime_finalfinal_ok`
|
||
- `eventfd_runtime_kernelreplay_ok`
|
||
|
||
These markers should be read as proof of the bounded relibc fd-event harness only. They do not by
|
||
themselves claim full Linux-equivalent semantics for every downstream desktop consumer.
|
||
|
||
The upstream-first policy still applies here, but the durable patch-carrier set should be trimmed
|
||
only when a fresh upstream refetch plus reapply plus downstream rebuild actually proves the upstream
|
||
coverage is sufficient. In the current Red Bear tree, `open_memstream`, `F_DUPFD_CLOEXEC`, and the
|
||
socket flag work still need to remain in the relibc overlay set because the clean reconstructed
|
||
consumer path still depends on them.
|
||
|
||
This is one of relibc’s strongest current points: Red Bear already has the exact P3 compatibility
|
||
surface that older docs used to describe as absent.
|
||
|
||
The local patches still matter as provenance and sync-upstream carriers for the gaps upstream does
|
||
not yet solve, but they should be retired as soon as upstream makes them redundant.
|
||
|
||
### 3. Downstream build progress proves relibc is materially useful
|
||
|
||
The current docs consistently show that relibc has already enabled substantial downstream progress:
|
||
|
||
- `docs/02-GAP-ANALYSIS.md` now marks the P3 bridge as implemented in-tree with strict Redox-target runtime proof for the fd-event slice
|
||
- `local/docs/WAYLAND-IMPLEMENTATION-PLAN.md` says the build-side relibc/libwayland bridge is restored and that the remaining blocker is runtime validation, not basic POSIX availability
|
||
- `local/docs/QT6-PORT-STATUS.md` treats many earlier relibc blockers as moved from “missing” to “present but still needs downstream validation”
|
||
|
||
This is a major quality signal: relibc is already strong enough to unlock real build-side subsystem work.
|
||
|
||
### 4. relibc already has a substantial generic test surface
|
||
|
||
`recipes/core/relibc/source/tests/` is real and large. It already covers many libc-facing areas such
|
||
as:
|
||
|
||
- `fcntl/`
|
||
- `net/` and `netdb/`
|
||
- `pthread/`
|
||
- `stdio/`
|
||
- `sys_mman/`
|
||
- `sys_socket/`
|
||
- `sys_resource/`
|
||
- `time/`
|
||
- `unistd/`
|
||
|
||
That is a genuine strength and should be documented as one.
|
||
|
||
The remaining weakness is narrower: Red Bear still lacks a strong **Redox-target / P3 API /
|
||
downstream-runtime** validation story that is as visible and deliberate as this generic relibc test
|
||
tree.
|
||
|
||
### 5. The current relibc problem is no longer one single blocker
|
||
|
||
The downstream evidence shows that relibc now has **multiple completeness fronts**:
|
||
|
||
- Wayland-facing POSIX/event APIs
|
||
- Qt/KDE shared memory and semaphore support
|
||
- process-facing behavior such as `waitid()`
|
||
- networking/resolver completeness
|
||
- legacy but still-consumed items such as `sigjmp_buf` and locale/runtime edges
|
||
|
||
That means the right enhancement plan is no longer “finish one missing API and unblock everything.”
|
||
The work has to be triaged by downstream impact.
|
||
|
||
### 6. The Redox networking model is reflected in relibc
|
||
|
||
`recipes/core/relibc/source/src/platform/redox/socket.rs` shows a real Redox-native socket/path
|
||
model instead of a pure stub implementation. That is another strong point: relibc already knows
|
||
about Redox-native runtime behavior.
|
||
|
||
## Deficiencies and Gaps
|
||
|
||
### 1. Header coverage is still incomplete in visible source
|
||
|
||
`recipes/core/relibc/source/src/header/mod.rs` still contains a meaningful backlog of TODO or absent
|
||
header surfaces, including examples such as:
|
||
|
||
- `iconv.h`
|
||
- `mqueue.h`
|
||
- `spawn.h`
|
||
- `sys/msg.h`
|
||
- `threads.h`
|
||
- `wordexp.h`
|
||
|
||
Some of these are lower-value than others, but they still show that relibc has real completeness work left.
|
||
|
||
### 2. Named semaphores are now source-visible, but still incomplete
|
||
|
||
`recipes/core/relibc/source/src/header/semaphore/mod.rs` is still a clear example of partial completeness.
|
||
|
||
Basic unnamed semaphore paths exist (`sem_init`, `sem_post`, `sem_wait`, `sem_timedwait`, etc.),
|
||
and the named semaphore path is now source-visible too:
|
||
|
||
- `sem_open`
|
||
- `sem_close`
|
||
- `sem_unlink`
|
||
|
||
These are now implemented on top of the existing shm path instead of left as raw `todo!()` stubs.
|
||
|
||
The remaining weakness is semantic and validation depth, not pure absence:
|
||
|
||
- broader POSIX semaphore semantics are still not strongly runtime-validated
|
||
- downstream configure/runtime behavior still needs continued confirmation
|
||
- the SysV semaphore surface remains thinner than a full Unix implementation
|
||
|
||
This directly affects downstream consumers such as `QSystemSemaphore`.
|
||
|
||
### 3. Shared memory is present, but not complete enough for downstream GUI/runtime work
|
||
|
||
The current relibc source already exposes one meaningful shared-memory path:
|
||
|
||
- `recipes/core/relibc/source/src/header/sys_mman/mod.rs` provides `shm_open()` and `shm_unlink()`
|
||
- on Redox, that path resolves to `/scheme/shm/`
|
||
- `recipes/core/base/source/ipcd/src/shm.rs` implements the backing shared-memory scheme
|
||
|
||
That is a real strength and should not be described as “shared memory absent.”
|
||
|
||
The real gap is that shared-memory completeness is still insufficient for broader downstream use:
|
||
|
||
- the source tree now has visible `sys/shm.h` / `sys/ipc.h` / `sys/sem.h` modules, but they remain bounded rather than comprehensive
|
||
- Qt/KDE-facing docs still treat `shm_open()` / `shmget()`-class behavior as unresolved enough to block full `QSharedMemory` confidence
|
||
- the current repo still lacks a strong end-to-end validation story for these paths in desktop consumers
|
||
|
||
### 4. Resolver and interface-networking completeness are still uneven
|
||
|
||
The downstream scan shows that networking-facing userland still hits relibc gaps beyond raw socket
|
||
basics.
|
||
|
||
Examples from downstream recipes and docs:
|
||
|
||
- `recipes/wip/qt/qtbase/recipe.toml` still leaves QtNetwork disabled because of broader networking/runtime concerns such as `in6_pktinfo` and richer interface semantics, even though minimal `resolv.h` and `arpa/nameser.h` surfaces now exist
|
||
- `recipes/net/openssh/recipe.toml` and its patch history still call out `resolv.h`
|
||
- `recipes/wip/terminal/tmux/redox.patch` comments out `resolv.h`
|
||
- `recipes/libs/glib/redox.patch` still touches resolver-facing includes
|
||
|
||
### 5. The networking surface is narrower than generic Unix software expects
|
||
|
||
The current source still shows important limits that should be named directly:
|
||
|
||
- `recipes/core/relibc/source/src/platform/redox/socket.rs` has AF_INET / AF_UNIX socket handling
|
||
- `recipes/core/relibc/source/src/header/net_if/mod.rs` now exposes a bounded `eth0`-backed interface view instead of a permanent `stub`
|
||
- `recipes/core/relibc/source/src/header/ifaddrs/mod.rs` now provides a bounded `eth0`-backed `getifaddrs()` path instead of pure `ENOSYS`
|
||
- source-visible `resolv.h` / `arpa/nameser.h` plus bounded `res_query()` / `res_search()` compatibility are now present, and at least one real downstream (`openssh`) now builds against them, but broader resolver compatibility is still incomplete
|
||
|
||
That is enough to support the current Red Bear native network path in a bounded sense, but it is not
|
||
yet strong enough to claim broad interface-aware compatibility for higher-level consumers. Resolver/
|
||
header gaps and interface-model assumptions still show up in ports such as QtNetwork, OpenSSH,
|
||
tmux, glib, curl, and libuv.
|
||
|
||
### 6. Process/runtime completeness is still uneven
|
||
|
||
The repo still has process/runtime unevenness, but one meaningful consumer-facing gap has now moved:
|
||
|
||
- relibc now provides a bounded `waitid()` implementation over the existing `waitpid` path
|
||
- the old Qt-side injected `waitid()` stub has been retired from the Qt recipe layer
|
||
|
||
The source state needs to be classified carefully:
|
||
|
||
- `sigjmp_buf` exists in `recipes/core/relibc/source/include/setjmp.h`, so older downstream comments treating it as absent are better read as compatibility/staleness signals rather than primary source truth
|
||
- `getgroups()` has a Redox implementation path in `platform/redox/mod.rs`
|
||
- `getrlimit()` is no longer a pure placeholder for all consumers: Red Bear now has bounded `RLIMIT_NOFILE` and `RLIMIT_MEMLOCK` behavior, but broader resource-limit completeness is still weak
|
||
|
||
So process/runtime completeness should be treated as a real subsystem-quality track, but the plan
|
||
must distinguish **missing**, **implemented but weak**, and **stale downstream complaint**.
|
||
|
||
### 7. Source quality still contains many TODO / unimplemented branches
|
||
|
||
The current source has a large amount of unfinished or explicitly deferred behavior across:
|
||
|
||
- `pthread`
|
||
- `time`
|
||
- `unistd`
|
||
- `platform/redox`
|
||
- `epoll`
|
||
- `ptrace`
|
||
- locale and stdio internals
|
||
|
||
This does not mean relibc is unusable. It means completeness and quality work now needs a stronger
|
||
triage model instead of treating all missing items as equally important.
|
||
|
||
### 8. Redox-target and downstream validation remain thin relative to subsystem importance
|
||
|
||
The current repo already contains a substantial generic relibc test tree, but the Red Bear-visible
|
||
validation story is still thin in the areas that matter most for current subsystem unblockers.
|
||
|
||
Right now much of relibc’s confidence in the Red Bear docs still comes from:
|
||
|
||
- source inspection
|
||
- patch carriers
|
||
- build-side downstream success
|
||
- limited runtime validation via downstream stacks
|
||
|
||
That is not enough for a component as central as libc, especially for the Redox-target and
|
||
downstream-consumer paths Red Bear depends on.
|
||
|
||
## Downstream-Blocking Gaps by Subsystem
|
||
|
||
### Wayland
|
||
|
||
The old “basic POSIX APIs are missing” story is no longer the main one.
|
||
|
||
Current state:
|
||
|
||
- `signalfd`, `timerfd`, `eventfd`, `open_memstream`, bounded `waitid()`, key socket flags, and the adjacent SysV IPC surfaces are now source-visible in the active relibc tree without needing the old standalone P3 replay set
|
||
- the active Red Bear relibc replay has narrowed to the shared `redox.patch` compatibility delta while those older P3 files remain historical references
|
||
- `libwayland` now rebuilds with a much smaller Redox patch
|
||
|
||
Remaining blocker:
|
||
|
||
- runtime validation of the full relibc -> libwayland -> compositor path
|
||
|
||
So the current relibc task for Wayland is primarily **runtime proof and patch reduction**, not just
|
||
adding obvious libc symbols.
|
||
|
||
Current Red Bear evidence is stronger than before: `libwayland` now cooks successfully against the
|
||
rebuilt relibc image produced from the current upstream-backed relibc tree plus the active shared
|
||
Red Bear compatibility delta, which means the `signalfd`, `timerfd`, `eventfd`, `stdio.h`, and
|
||
`sys/socket.h` surfaces are sufficient for at least one major downstream consumer in the current
|
||
rebuild model.
|
||
|
||
### Qt / KDE
|
||
|
||
The Qt/KDE-facing relibc backlog is still substantial.
|
||
|
||
The biggest libc-facing gaps are:
|
||
|
||
- shared memory (`shm_open` / `shmget`) for `QSharedMemory`
|
||
- named/system semaphores (`sem_open` / `semget`) for `QSystemSemaphore`
|
||
- stronger process/runtime behavior for `QProcess`
|
||
- runtime validation of QtNetwork against the current relibc networking surface
|
||
- resolver/header completeness (`resolv.h`) and network-interface semantics for QtNetwork
|
||
- broader process/runtime validation after the new bounded `waitid()` path
|
||
|
||
This makes Qt/KDE the clearest downstream consumer pushing relibc from “build-capable” toward
|
||
“desktop-capable”.
|
||
|
||
Current Red Bear evidence is stronger than before here too: qtbase now configures, builds, and
|
||
stages with
|
||
`FEATURE_process=ON`, `FEATURE_sharedmemory=ON`, and `FEATURE_systemsemaphore=ON` in the current
|
||
tree. The remaining work is therefore less about “make the feature visible at all” and more about
|
||
runtime semantics, broader compatibility, and downstream cleanup.
|
||
|
||
### Networking and interface-aware software
|
||
|
||
The current relibc networking model is usable, but still narrow enough that higher-level consumers
|
||
keep carrying workarounds or disabled features.
|
||
|
||
The newer bounded `eth0`-backed `net_if` / `ifaddrs` work improves the source-visible story, but it
|
||
is still only a first Red Bear-shaped interface view, not a full generic Unix interface model.
|
||
|
||
This is why the plan should treat networking as **usable but still validation-heavy**, not “done”.
|
||
|
||
### General userland / server software
|
||
|
||
The downstream scan also shows relibc gaps outside graphics:
|
||
|
||
- PostgreSQL and some libraries still carry `sigjmp_buf`-related downstream notes that need revalidation against current headers
|
||
- SQLite still notes `getrlimit()` / `getgroups()` gaps, even though the current source state now splits those two differently
|
||
- Apache and other ports still touch semaphore or IPC assumptions
|
||
|
||
That is important because it means relibc completeness is not only about desktop bring-up. It also
|
||
affects core application/server breadth.
|
||
|
||
### Desktop/session path
|
||
|
||
Session and desktop work depends less on one dramatic relibc gap than on overall libc quality:
|
||
|
||
- process semantics
|
||
- IPC completeness
|
||
- synchronization primitives
|
||
- runtime interaction with D-Bus/Qt/Wayland consumers
|
||
|
||
This is why relibc should be treated as a cross-cutting runtime-quality subsystem, not just a POSIX checklist.
|
||
|
||
## Quality Assessment
|
||
|
||
### What relibc is good at now
|
||
|
||
- broad visible libc/header coverage
|
||
- practical Redox-native integration rather than fake stubs everywhere
|
||
- concrete P3 compatibility work for real downstreams
|
||
- enough maturity to unlock major subsystem builds
|
||
- a substantial generic test tree
|
||
|
||
### What relibc is bad at now
|
||
|
||
- uneven implementation depth
|
||
- too many TODO/unimplemented branches for a component this central
|
||
- patch-carried functionality that is still not strongly reflected in visible source snapshots
|
||
- too little Redox-target and downstream-runtime validation relative to the generic test tree
|
||
- too much downstream confidence still derived from “compiles” instead of “runtime-proven”
|
||
|
||
## Enhancement Plan
|
||
|
||
### Phase R0 — Evidence and Ownership Cleanup
|
||
|
||
**Goal**: Make relibc status honest before widening scope.
|
||
|
||
**What to do**:
|
||
|
||
- explicitly track relibc claims as `source-visible`, `patch-carried`, `build-proven`, or `runtime-validated`
|
||
- keep the P3 patch carriers discoverable and documented as canonical until upstreamed
|
||
- stop describing relibc gaps with outdated “missing basics” language where the code already exists
|
||
|
||
**Exit criteria**:
|
||
|
||
- subsystem docs consistently distinguish between missing, patch-carried, and runtime-proven relibc behavior
|
||
|
||
---
|
||
|
||
### Phase R1 — Stabilize the newly source-visible P3 APIs
|
||
|
||
**Goal**: Keep the newly source-visible P3 APIs aligned with their patch-carrier and downstream expectations.
|
||
|
||
**What to do**:
|
||
|
||
- keep `signalfd`, `timerfd`, `eventfd`, `open_memstream`, socket flags, and `F_DUPFD_CLOEXEC` visible and maintained as canonical relibc behavior
|
||
- reduce downstream assumptions that these APIs are still absent
|
||
- ensure generated/exported headers stay aligned with the source-visible implementation set
|
||
|
||
**Exit criteria**:
|
||
|
||
- the repo consistently treats these P3 APIs as source-visible functionality that now needs validation and downstream cleanup rather than invention
|
||
|
||
---
|
||
|
||
### Phase R2 — Close the shared-memory and semaphore completeness gap
|
||
|
||
**Goal**: Unlock the next meaningful Qt/KDE-facing libc surface.
|
||
|
||
**What to do**:
|
||
|
||
- keep the existing `shm_open` / `/scheme/shm/` path explicit and documented
|
||
- implement the missing SysV IPC/shared-memory side or document a deliberate non-goal if Red Bear does not want full SysV compatibility
|
||
- harden and validate the now source-visible named semaphore support (`sem_open`, `sem_close`, `sem_unlink`)
|
||
- close the specific `QSharedMemory` and `QSystemSemaphore` blockers identified in the Qt docs
|
||
|
||
**Exit criteria**:
|
||
|
||
- the Qt/KDE docs no longer list shared memory and named semaphores as unresolved relibc blockers
|
||
|
||
---
|
||
|
||
### Phase R3 — Process/runtime correctness for desktop consumers
|
||
|
||
**Goal**: Reduce downstream process workarounds.
|
||
|
||
**What to do**:
|
||
|
||
- strengthen process-facing libc/runtime behavior enough to remove targeted workarounds such as the Qt `waitid()` shim path
|
||
- close or intentionally document the remaining `sigjmp_buf` / `getrlimit()` / `getgroups()` quality gaps that still force downstream patches
|
||
- validate process semantics against real downstream consumers, not only isolated libc expectations
|
||
|
||
**Current implementation note:** the bounded `waitid()` path is now source-visible, the old Qt-side
|
||
`waitid()` shim is gone, and qtbase now configures/builds/stages with process support enabled. The
|
||
remaining work is broader process/runtime validation and cleanup, not the old total absence of `waitid()`.
|
||
|
||
**Exit criteria**:
|
||
|
||
- downstream process workarounds are reduced or eliminated for the current desktop stack
|
||
|
||
---
|
||
|
||
### Phase R4 — Networking/runtime validation
|
||
|
||
**Goal**: Turn the current networking surface from “present” into “trusted”.
|
||
|
||
**What to do**:
|
||
|
||
- validate QtNetwork and similar consumers against the current relibc socket/ioctl/interface model
|
||
- close the highest-value resolver/header gaps such as `resolv.h` where they are still forcing downstream stubs or disabled modules
|
||
- evolve the new bounded `eth0`-backed interface-reporting path into a better general Redox interface model where needed
|
||
- document which current networking semantics are intentionally Redox-specific and which are intended to mimic broader Unix behavior
|
||
|
||
**Exit criteria**:
|
||
|
||
- at least one meaningful higher-level network consumer is validated against the current relibc networking surface
|
||
|
||
---
|
||
|
||
### Phase R5 — Dedicated relibc validation expansion
|
||
|
||
**Goal**: Improve libc confidence without waiting for whole desktop stacks.
|
||
|
||
**What to do**:
|
||
|
||
- build a stronger dedicated Redox-target and P3/downstream validation layer on top of the existing generic relibc test tree
|
||
- ensure new APIs and bugfixes come with focused libc-level tests where practical
|
||
- keep downstream consumer tests, but stop relying on them as the only quality signal
|
||
|
||
**Exit criteria**:
|
||
|
||
- relibc has explicit Redox-target and downstream-runtime validation beyond the generic upstream-style test tree
|
||
|
||
---
|
||
|
||
### Phase R6 — General completeness triage
|
||
|
||
**Goal**: Attack the remaining TODO/unimplemented backlog by priority rather than by random header count.
|
||
|
||
**What to do**:
|
||
|
||
- rank remaining TODO/unimplemented items by downstream subsystem impact
|
||
- prioritize IPC, synchronization, process, time, and networking correctness over obscure or deprecated headers
|
||
- keep deprecated/low-value gaps documented, but do not let them drive the roadmap ahead of higher-value runtime work
|
||
|
||
**Exit criteria**:
|
||
|
||
- relibc backlog is organized by real system impact instead of undifferentiated TODO volume
|
||
|
||
## Recommended Order of Work
|
||
|
||
The current best order is:
|
||
|
||
1. evidence cleanup and canonicalization of what already exists
|
||
2. shared memory and named semaphores
|
||
3. process/runtime correctness
|
||
4. networking/runtime validation
|
||
5. Redox-target and downstream validation expansion
|
||
6. broader backlog triage and cleanup
|
||
|
||
That order matches the current downstream blocker chain better than a generic “finish all missing headers” strategy.
|
||
|
||
## Support-Language Guidance
|
||
|
||
Until the runtime-validation phases are materially complete, Red Bear should avoid saying:
|
||
|
||
- “relibc POSIX gaps are solved”
|
||
- “Qt/Wayland blockers are fully gone”
|
||
- “network/process/shared-memory support is complete”
|
||
|
||
Prefer language such as:
|
||
|
||
- “consumer-visible P3 APIs are now present, with runtime validation still needed”
|
||
- “relibc is materially stronger, but desktop-facing completeness work remains”
|
||
- “the remaining relibc problem is now quality and downstream proof, not just symbol absence”
|
||
|
||
## Summary
|
||
|
||
relibc is one of Red Bear’s strongest foundational subsystems, but it is not complete.
|
||
|
||
Its strongest current qualities are:
|
||
|
||
- broad libc/header coverage
|
||
- real Redox-native platform integration
|
||
- concrete source-visible and patch-backed solutions to the historical P3 Wayland-facing blockers
|
||
- clear downstream build progress because of those fixes
|
||
- a substantial generic test surface
|
||
|
||
Its largest remaining weaknesses are:
|
||
|
||
- incomplete shared memory and named semaphore support
|
||
- process/runtime unevenness
|
||
- networking/resolver/interface completeness gaps
|
||
- too many TODO/unimplemented branches in central paths
|
||
- too little Redox-target and downstream-runtime validation relative to the generic test tree
|
||
|
||
The correct relibc roadmap is therefore **not** “hunt random missing symbols.” It is to turn the
|
||
current build-capable libc into a runtime-trusted subsystem by closing the high-value desktop/runtime
|
||
gaps, strengthening validation, and reducing patch-carried ambiguity.
|