Phase C of the ACPI fork-sync plan. Applies targeted gap fixes on top of the synchronized fork foundation (commits4f2a043+ae57fe3). Closes 4 of the 8 critical gaps identified by the 2026-06-30 ACPI assessment. Gap 5 - SLP_TYPb PM1b write (acpid/src/acpi.rs): The previous code wrote SLP_EN+SLP_TYPa to PM1a but silently dropped SLP_TYPb. On hardware that requires both PM1a and PM1b writes (some laptops, server boards with split power blocks), the shutdown was incomplete. Now writes SLP_EN+SLP_TYPb to PM1b when pm1b_control_block is non-zero. The FADT field is 0 when no second block exists, in which case we skip the second write. Gap 6 - parse_lnk_irc range validation (hwd/src/backend/acpi.rs): The previous code accepted any 16-bit integer as an IRQ (n AND 0xFFFF), producing "Enabled at IRQ 53313" from misparsed FieldUnit accessors on QEMU PIIX4. Now validates that the IRQ value is 2047 or less (the maximum valid legacy-compatible IOAPIC IRQ). Out-of-range values are debug-logged and skipped instead of polluting the routing table. Also adds a 15-bit cap on the Buffer-based IRQ bit extraction (was unchecked). Gap 3 - AML mutex create/acquire/release (acpid/src/aml_physmem.rs): The new gitlab acpi crate (Phase B bump) added proper Handler trait methods for create_mutex, acquire, and release. The previous implementation was three log debug stubs returning fake success, which would silently corrupt AML state for any DSDT/SSDT that uses Mutex. Now implements a real mutex table backed by std::sync.Mutex of FxHashSet u32: - create_mutex allocates a unique u32 handle from a counter - acquire busy-waits with 1ms sleeps until the handle is free or the AML timeout (multiplied by 1000 for ms to us conversion) expires; returns AmlError::MutexAcquireTimeout on timeout - release removes the handle from the held set Gap 4a - set_global_s_state non-S5 explicit warning (acpid/src/acpi.rs): The previous code silently returned early when called with any state other than 5. Now emits a log warn with the requested state, naming the missing dependencies (_PTS/_WAK AML evaluation, P-state preservation, wakeup path). This converts a silent failure into a diagnostic that is visible in the boot log. Also includes drivers/acpid/src/dmi.rs:158 - convert e.errno (private field) to e.errno() (method call). The libredox Error struct changed its errno from a public field to a method in a newer release; the DmiError::Map(syscall::error::Error) construction was using the field-access form, which broke the build against current libredox. This is a build-fix that the prior dirty tree already had; included here to keep base buildable. Verified by: CI=1 ./local/scripts/build-redbear.sh redbear-mini succeeded with exit 0. ISO at build/x86_64/redbear-mini.iso (512 MB) at 2026-06-30 05:28.
Base
Repository containing various system daemons, that are considered fundamental for the OS.
You can see what each component does in the following list:
- audiod : Daemon used to process the sound drivers audio
- bootstrap : First code that the kernel executes, responsible for spawning the init daemon
- daemon : Redox daemon library
- drivers
- init : Daemon used to start most system components and programs
- initfs : Filesystem with the necessary system components to run RedoxFS
- ipcd : Daemon used for inter-process communication
- logd : Daemon used to log system components and daemons
- netstack : Daemon used for networking
- ptyd : Daemon used for pseudo-terminal
- ramfs : RAM filesystem
- randd : Daemon used for random number generation
- zerod : Daemon used to discard all writes and fill read buffers with zero
How To Contribute
To learn how to contribute you need to read the following document:
If you want to contribute to drivers read its README
Development
To learn how to do development with these system components inside the Redox build system you need to read the Build System and Coding and Building pages.
How To Build
It is recommended to build this system component via the Redox build system, you can learn how to do it on the Building Redox page.
To build and test outside the build system, install redoxer then use check.sh script to build or test:
./check.sh- Check build for x86_64./check.sh --arch=ARCH- Check build for specific ARCH (aarch64,i586,riscv64gc)./check.sh --all- Check build for all ARCH./check.sh --test- Check the base system boots up on x86_64
You can also use make install to inspect the content on ./sysroot, or make test-gui to test booting with orbital interactively.