The recent CORE-C12 worker-pool work landed in commits that no longer
compile against current Rust 2024 edition and the relibc fork's
exposed-libc surface. This commit fixes the four blockers that
prevent base from linking at all:
1. netcfg/mod.rs:195 — 'eth0' undefined. The DEFAULT_IFACE
centralization commit (9d8ad861) replaced all literal 'eth0'
paths except this one in the 'summary' ro handler. Replace with
so the route now uses the canonical
constant.
2. scheme_pool.rs:125 — E0507 .
JoinHandle::join takes self by value, but Drop impl was calling
&self.handle.join(). Wrap handle in Option<JoinHandle<()>> and
use Option::take() in Drop so we get an owned handle to join.
3. scheme_pool.rs:185 — E0521 . SchemeWork::new required &'static str but submit
takes &str. Change scheme_name field to Cow<'static, str> and
accept impl Into<Cow<'static, str>> for the constructor so both
static and borrowed strings work.
4. scheme_pool_init.rs — DELETE. The 'register_all' helper was
dead code (never called from production). Its closures captured
Arc<Mutex<Smolnetd>> but Smolnetd contains Rc<RefCell<...>>,
raw pointers (*const [TimeSpec]), and dyn NodeWriter — none of
which are Send. The Smolnetd struct is intentionally
single-threaded; the worker-pool code that would justify
moving it across threads was never completed (CORE-C12 fix
remains half-done). Remove the file and the mod declaration
in main.rs to drop all 17 Send-violation errors that originated
from this single file.
5. scheme/tcp.rs:66 — libc::MSG_NOSIGNAL is not exposed by
relibc on Redox. Define a local MSG_NOSIGNAL: u16 = 0x4000
(POSIX value) with a docstring explaining the rationale.
Remaining errors after this commit:
- E0425: cannot find type CallerCtx (scheme/tcp.rs:52) — needs
- E0425: cannot find type SocketCall — needs an import
- E0599/E0369: Result<usize, SendError> not handled correctly in
send path
- E0308: a few mismatched-type sites
These will be addressed in a follow-up commit.
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.