Phase 2 of the build-system assessment:
Tier 1 (user-facing message fixes):
- mk/podman.mk: 'mk/config.mk' -> '.config' (the actual config location)
- mk/prefix.mk: vague 're-run the build' -> specific 'make prefix' guidance
- mk/virtualbox.mk: 'RedBearOS directory' -> 'Red Bear OS VM directory'
- src/bin/repo.rs: '{:?}' -> '{:#}' anyhow chain format + 'repo: ' prefix
Tier 2 (doc consolidation):
- Archive BUILD-SYSTEM-IMPROVEMENTS.md to local/docs/archived/ (self-labeled
'HISTORICAL POST-MORTEM', no longer current).
- Add local/docs/BUILD-SYSTEM-ASSESSMENT-2026-07-18.md (459-line
comprehensive assessment: architecture, quality, robustness, gaps).
- docs/README.md: refresh status note (2026-05-01 -> 2026-07-18, v4.0 ->
v6.0); fix 'as an full fork' grammar.
- docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md: add status header noting
canonical/secondary split vs CONSOLE-TO-KDE-DESKTOP-PLAN.md; fix grammar.
- HARDWARE.md: remove nonexistent PROFILE-MATRIX.md reference; repoint to
README.md and the canonical desktop plan.
- local/docs/LOCAL-FORK-SUPREMACY-POLICY.md: 'currently 0.1.0' -> 'currently
branch 0.3.1; legacy release archive at sources/redbear-0.1.0/'.
- local/docs/GRUB-INTEGRATION-PLAN.md: 'make all CONFIG_NAME=redbear-grub'
-> canonical './local/scripts/build-redbear.sh redbear-grub'.
- recipes/AGENTS.md, recipes/core/AGENTS.md: replace upstream-Redox-pattern
content with proper redirects to root AGENTS.md reflecting the local
fork / path-fork model actually used by Red Bear.
- CONTRIBUTING.md: full rewrite for local fork workflow (Gitea, single-repo
rule, path-fork model, patch governance, build-redbear.sh as canonical
entry point, no AI attribution policy).
- README.md: add BUILD-SYSTEM-ASSESSMENT-2026-07-18.md to Documentation list.
Verified: cargo check (0 errors), cargo test --lib (35/35 passed),
cargo clippy (0 new warnings vs baseline).
15 KiB
Contributing to Red Bear OS
Authority: This file is a quick orientation for contributors. The canonical contributor runbook lives in
AGENTS.md(root) andlocal/AGENTS.md(local fork model, branch/submodule policy, durability rules, operator runbook). When this file and AGENTS.md disagree, AGENTS.md wins.
Thank you for your interest in contributing to Red Bear OS. This document will get you from "fresh clone" to "first merged change" without tripping over the project's discipline rules.
Please read this document until the end.
Code of Conduct
We follow the Rust Code of Conduct.
License
Contributions to Red Bear OS are governed by the MIT License.
Each repository has a LICENSE file with the exact terms. Review it before contributing.
Contribution Terms
When making a contribution you agree to the following terms:
- I understand these changes in full and will be able to respond to review comments.
- I have read the Developer Certificate of Origin and certify my contribution under its conditions.
AI Policy
Contributions made with the assistance of LLMs and AI tools are welcome. We care about the quality of the result, not how it was produced.
No AI attribution in commit messages or code comments. A commit message like
"feat: add MSR scheme" is correct; "feat: add MSR scheme (Co-Authored-By: Claude)" is not.
Commit content is what matters; authorship tags are noise.
Project model — read this first
Red Bear OS is a full fork of Redox OS. Treat it the way Ubuntu treats Debian:
- Upstream Redox is the base platform.
- Red Bear carries integration, packaging, validation, and a subsystem release fork on top.
- Upstream-owned source trees (
recipes/*/source/) are disposable — they are re-extracted from immutable archives or copied from local forks on every build. - Durable Red Bear state lives in
local/patches/,local/recipes/,local/docs/,local/sources/<component>/, and tracked Red Bear configs. Only changes in these locations survivemake distclean.
If a change exists only inside recipes/*/source/, it is not yet preserved for long-term
Red Bear maintenance. Mirror it to the right durable location in the same session. See
AGENTS.md § "DURABILITY POLICY" for the mapping table.
WIP rule for contributors
If an upstream recipe or subsystem is still marked WIP, Red Bear treats it as a local project until upstream promotes it to first-class status. For contributors:
- Upstream WIP may still be useful as input/reference.
- Fixes intended for Red Bear shipping should normally land in the Red Bear release fork
(
local/sources/<component>/) or as patches inlocal/patches/<component>/. - When upstream later catches up, Red Bear prefers upstream and retires the local patches that are no longer needed.
Where the project lives
Red Bear OS lives on a self-hosted Gitea instance. No GitHub, GitLab, or Codeberg mirror is authoritative.
| Field | Value |
|---|---|
| Host | https://gitea.redbearos.org |
| User | vasilito |
| Web UI | https://gitea.redbearos.org/vasilito |
| Main repo | https://gitea.redbearos.org/vasilito/RedBear-OS |
Single-Repo Rule: there is exactly one repository. All component sources (kernel,
relibc, drivers, system utilities) live here as submodule branches or tracked trees in
local/sources/. Do not create new repositories, new branches, or new submodules. See
local/AGENTS.md § "BRANCH AND SUBMODULE POLICY".
Communication
- Issues — file at
https://gitea.redbearos.org/vasilito/RedBear-OS/issues. Use the label filters (critical,high-priority,easy,good first issue,help wanted) to find work that matches your skill level. - Chat — upstream Redox has Matrix and Discord rooms. Red Bear contributors are welcome there, but issue tracking happens on Gitea, not in chat.
- Merge requests — open MRs on Gitea against the
0.3.1branch. Small MRs review faster than large ones; split big work into reviewable slices.
Quick orientation for new contributors
| You want to… | Read this |
|---|---|
| Build the project | AGENTS.md § "BUILD COMMANDS" — canonical entry point is ./local/scripts/build-redbear.sh |
| Add a new package | recipes/AGENTS.md + AGENTS.md § "STRUCTURE" + § "CONVENTIONS" |
| Fix a kernel bug | Edit local/sources/kernel/ directly (path-fork model — see local/AGENTS.md) |
| Fix a relibc POSIX gap | Edit local/sources/relibc/ directly; rebuild prefix with touch relibc && make prefix |
| Modify an upstream package | Add a patch in local/patches/<component>/, wire it into the recipe's patches = [...] |
| Add a custom Red Bear package | Create under local/recipes/<category>/, symlink recipes/<category>/<name> → local path |
| Bump an upstream version | local/scripts/upgrade-forks.sh --to=<tag> (see local/docs/RELEASE-BUMP-WORKFLOW.md) |
| Sync in-house crate versions | ./local/scripts/sync-versions.sh --check (Cat 0/1/2 categories) |
| Validate your change | make validate runs lint-config, init-service validator, file-ownership validator |
| Understand the build cache | local/docs/BUILD-CACHE-PLAN.md — BLAKE3 dep-hash cache, binary store restore |
| Run a sanity check after fork edits | git -C local/sources/<component> log --oneline -3 + git -C local/sources/<component> status |
Build system
The canonical build entry point is ./local/scripts/build-redbear.sh. It handles .config
parsing, prefix staleness detection, protected-recipe authorization, pre-cooking critical
packages, and source fingerprint tracking. Direct make invocations bypass these gates.
# First-time setup
echo 'PODMAN_BUILD?=0' > .config # native build (no Podman container)
# CRITICAL: .config MUST NOT contain REDBEAR_RELEASE=... in development mode.
# Canonical build
./local/scripts/build-redbear.sh redbear-mini # text-only target (dev/CI)
./local/scripts/build-redbear.sh redbear-full # desktop-capable target
./local/scripts/build-redbear.sh redbear-grub # text-only + GRUB bootloader
# With online fetch for non-protected development recipes
./local/scripts/build-redbear.sh --upstream redbear-mini
# Local fork development (protected recipes)
export REDBEAR_ALLOW_PROTECTED_FETCH=1
./local/scripts/build-redbear.sh --upstream redbear-mini
# Boot in QEMU
make qemu
make qemu QEMUFLAGS="-m 4G"
After editing a local fork (relibc, kernel, base), rebuild the prefix before any recipe
build:
touch relibc && make prefix # rebuild relibc in the cross-toolchain
touch kernel && make prefix # rebuild kernel-related toolchain parts
build-redbear.sh auto-detects stale prefix and rebuilds before any recipe build. A stale
prefix is the #1 cause of "undefined reference" link errors after fork changes.
See AGENTS.md § "BUILD COMMANDS" and docs/06-BUILD-SYSTEM-SETUP.md for the full reference.
Patch governance
Red Bear patches are durable artifacts. Never remove a patch to fix a build failure —
rebase it. Full rules in local/docs/PATCH-GOVERNANCE.md.
Critical rules:
- Recipe.toml is git-tracked — changes to it are durable.
- Source trees are disposable —
repo clean/distcleandestroy them. - All source-tree edits must be patches in
local/patches/<component>/OR direct commits tolocal/sources/<component>/(path-fork model). - Patch chain ordering matters — patches that define types must come before patches that use them; cumulative patches must maintain line-number context.
- Never remove BINS entries to fix build failures — fix the source or use
EXISTING_BINS. - Validate patches with
./target/release/repo validate-patches <recipe>after any patch change. - Orphan-patch governance — every patch must correspond to work present in the matching
fork source tree.
verify-patch-content.shenforces this on every build preflight. When an orphan is detected, apply the decision tree inAGENTS.md§ "Orphan-Patch Supersession Decision Tree" (do NOT blindly reapply).
Style guidelines
Rust
Follow the official Rust standards. Run rustfmt on your changes. Project settings live in
rustfmt.toml (max_width=100, brace_style=SameLineWhere) and clippy.toml
(cognitive-complexity-threshold=100, type-complexity-threshold=1000).
Hard rules (see AGENTS.md § "ANTI-PATTERNS"):
- No
as any/@ts-ignore— use properResulthandling. - No
unwrap()/expect()in library/driver code — pervasive anti-pattern in this repo (~14k instances of technical debt). UseResult<T, E>and?. - No type suppression — no
#[allow(...)]for code you wrote. - No speculative fallbacks — handle errors explicitly.
TOML (recipes and configs)
- Recipe format:
[source]+[build]+ optional[package]. - WIP recipes MUST start with
#TODOdescribing what is missing. - Custom flags MUST be set AFTER
DYNAMIC_INIT(it overwrites CFLAGS/LDFLAGS/CXXFLAGS). - Cross-compilation: disable test suites (
BUILD_TESTING=OFF,--disable-tests). - Configs use
[package_groups.<name>]sections (underscore, not hyphen).
Git
For user-visible work, keep the root CHANGELOG.md current and update the
README "Current Status" section with the latest highlights so repository visitors can
immediately see what changed.
When a commit changes the visible system surface, supported hardware, build flow, shipped configs, or key docs, add a short user-facing changelog note in the same change.
Commit message style (lowercase prefix + colon + short summary):
feat: <what changed>
fix: <what was broken>
docs: <what was documented>
chore: <housekeeping>
refactor: <what was restructured>
Development recommendations
- Build incrementally.
repo cook <recipe>builds a single recipe;make r.<recipe>is the shorthand. Use--force-rebuildto bypass the content-hash cache when debugging. - Log everything when debugging.
your-command 2>&1 | tee file-name.log— capture full output for later analysis. - Test different QEMU settings when something fails. Pop!_OS, Ubuntu, Debian, and Fedora are the recommended host distributions.
- Check for missing POSIX/Linux functionality in relibc when a port fails to build or
crashes at runtime. The fork lives at
local/sources/relibc/. - Comment out configuration while testing rather than removing it — preserves the record of what you tried. (Production commits should not contain commented-out code.)
- Small MRs review faster. If a big MR stalls, split it into reviewable slices that each leave the tree building cleanly.
- Verify your change.
make validaterunslint-config, init-service validator, and file-ownership validator. For Rust changes:cargo check,cargo clippy --all-targets,cargo test --lib.
What to work on
By skill level
Non-programmers:
- Build the current branch (
./local/scripts/build-redbear.sh redbear-miniorredbear-full) and boot it in QEMU (make qemu) or on bare metal. Add a row toHARDWARE.mddescribing what worked and what didn't. - File bugs at the Gitea issue tracker (check for duplicates first).
- Fix typos in configuration (
config/,recipes/*/recipe.toml) and documentation. - Improve documentation under
docs/orlocal/docs/.
Know other languages, not Rust:
- Write unit tests (minimal Rust knowledge required).
- Port C/C++ programs to Redox via
recipes/(treat upstream WIPTODOs as inputs, not as the durable Red Bear shipping source of truth). - Web development on the website (minimal JavaScript only, for performance).
Know Rust, not OS development:
- See
easyissues. - See
good first issueissues. - See
help wantedissues. - Improve build tooling (
installer,repocookbook binary,redbear-*utilities). - Improve the Ion shell or other mid-level projects.
- Port Rust programs (look for the
portlabel). - Improve relibc POSIX/Linux compatibility.
Know Rust + systems/OS development:
- Read
AGENTS.md,local/AGENTS.md, and the relevant subsystem plan underlocal/docs/. - Search for
TODO,FIXME,BUG,UNOPTIMIZED,REWRITEME,DOCMEand fix what you find. - Look for issues labeled
critical,help wanted,feature,enhancement,bug, orport. - Improve internal libraries (
libredox,redox-scheme,redox-event). - Improve device drivers (GPU, USB, Wi‑Fi, Bluetooth — all first-class subsystems).
- Improve profiling and optimization in kernel, filesystem, or network stack.
Current priorities (see README "Current Status" table)
The most impactful contributions right now:
- Qt6 Wayland
null+8crash — the #1 blocker for the graphical desktop. Seelocal/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md. - AMD/Intel GPU hardware validation on bare metal. See
local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md. - USB controller maturity. See
local/docs/USB-IMPLEMENTATION-PLAN.md. - Wi‑Fi native control plane. See
local/docs/WIFI-IMPLEMENTATION-PLAN.md. - cub AUR pipeline hardening. See
local/docs/CUB-PACKAGE-MANAGER.md. - tlc VFS remote backends and archive support. See
local/recipes/tui/tlc/README.md. - Package maintainers for the growing recipe catalog.
Labels
| Label | Meaning |
|---|---|
critical |
Blocks release or core functionality |
high-priority |
Important, near-term work |
medium-priority |
Should get done |
low-priority |
Nice to have |
tracking issue |
Roadmap tracking |
Other ways to contribute
Design
Logos, UI design, app icons, desktop backgrounds, and themes are all welcome. Submit via the main repository or open an issue with attached assets.
Donations
To donate to upstream Redox OS (the base platform), see https://www.redox-os.org/donate/. Red Bear OS itself does not accept donations — contribute code, testing, or documentation instead.