Files
RedBear-OS/recipes/core/AGENTS.md
T
vasilito 50b731f1b7 Red Bear OS — microkernel OS in Rust, based on Redox
Derivative of Redox OS (https://www.redox-os.org) adding:
- AMD GPU driver (amdgpu) via LinuxKPI compat layer
- ext4 filesystem support (ext4d scheme daemon)
- ACPI fixes for AMD bare metal (x2APIC, DMAR, IVRS, MCFG)
- Custom branding (hostname, os-release, boot identity)

Build system is full upstream Redox with RBOS overlay in local/.
Patches for kernel, base, and relibc are symlinked from local/patches/
and protected from make clean/distclean. Custom recipes live in
local/recipes/ with symlinks into the recipes/ search path.

Build:  make all CONFIG_NAME=redbear-full
Sync:   ./local/scripts/sync-upstream.sh
2026-04-12 19:05:00 +01:00

3.8 KiB

RECIPES/CORE — ESSENTIAL SYSTEM COMPONENTS

Kernel, bootloader, C library, init system, and base drivers. Everything needed to boot Redox.

STRUCTURE

recipes/core/
├── kernel/          # Redox microkernel (~20-40k LoC Rust)
│   └── source/      # Kernel source (fetched from gitlab.redox-os.org)
├── bootloader/      # UEFI bootloader (x86_64-uefi, aarch64-uefi)
│   └── source/mk/   # Per-arch bootloader build rules
├── relibc/          # POSIX C library written in Rust
│   └── source/      # relibc source (headers, platform, syscalls)
├── base/            # Core userland + all drivers
│   └── source/      # Base repo (audiod, ipcd, ptyd, drivers, netstack, ramfs)
│       └── drivers/ # ALL drivers (userspace daemons)
│           ├── graphics/  # vesad, virtio-gpud, ihdgd (Intel experimental)
│           ├── net/       # e1000d, rtl8168d, rtl8139d, ixgbed
│           ├── storage/   # ided, ahcid, nvmed, usbscsid
│           ├── audio/     # ac97d, ihdad, sb16d
│           ├── usb/       # usbhidd (USB HID)
│           ├── virtio/    # virtio-blkd, virtio-netd, virtio-gpud
│           └── pci/       # pcid, pcid-spawner (PCI enumeration)
├── installer/       # redox_installer (creates filesystem images)
├── redoxfs/         # RedoxFS (default filesystem)
├── init/            # Init system (TOML-based service manager)
├── ion/             # Ion shell (default)
├── userutils/       # Core user management
├── uutils/          # Coreutils (Rust port)
└── netutils/        # Basic network utilities

WHERE TO LOOK

Task Location
Fix kernel crash kernel/source/src/ — syscall handling, context switching, memory mgmt
Add a syscall kernel/source/src/scheme/ — scheme registration, then libredox binding
Fix a driver base/source/drivers/<driver>/src/
Fix POSIX compat relibc/source/src/header/ — add missing POSIX headers/functions
Add bootloader support bootloader/source/mk/<arch>-unknown-uefi.mk
Fix PCI enumeration base/source/drivers/pci/pcid-spawner/
Fix display output base/source/drivers/graphics/ — vesad, virtio-gpud
Fix networking base/source/drivers/net/ + base/source/netstack/

KERNEL SCHEME ARCHITECTURE

Kernel provides minimal schemes: debug, event, memory, pipe, irq, time, sys, proc, serio. All other schemes are userspace daemons registering via File::create(":myscheme").

Driver access pattern:
  1. iopl() syscall → port I/O privilege
  2. Open /scheme/memory/physical → mmap hardware registers
  3. Open /scheme/irq/{num} → receive interrupts as messages
  4. Register scheme → handle requests from user programs

DRIVER MODEL

  • ALL drivers are userspace daemons (except serio for PS/2)
  • Access hardware via: scheme:memory, scheme:irq, iopl syscall
  • Register as scheme: daemon name becomes /scheme/<name>
  • PCI devices discovered via pcid daemon → spawns drivers

POSIX GAPS IN RELIBC (blocking Wayland)

Missing API Location to implement
signalfd/signalfd4 relibc/source/src/header/signal/
timerfd_create/settime/gettime relibc/source/src/header/sys_timerfd/ (NEW)
eventfd relibc/source/src/header/sys_eventfd/ (NEW)
F_DUPFD_CLOEXEC relibc/source/src/header/fcntl/
MSG_CMSG_CLOEXEC, MSG_NOSIGNAL relibc/source/src/header/sys_socket/
open_memstream relibc/source/src/header/stdio/

ANTI-PATTERNS

  • DO NOT add drivers to kernel — all drivers must be userspace
  • DO NOT modify syscall ABI — use libredox/relibc wrappers
  • DO NOT use unwrap() in drivers — handle errors properly with Result