Overview
Redox OS uses a userspace driver model where device drivers run as separate processes outside the kernel. This microkernel approach provides better isolation, stability, and security compared to traditional monolithic kernels.
Base Repository View essential system components and drivers on GitLab
Key Features
Userspace Drivers Drivers run as isolated userspace processes
Scheme-based Accessed through Redox’s URL-like scheme system
Hot-pluggable Dynamic driver loading and unloading
Fault Isolation Driver crashes don’t bring down the system
Driver Architecture
The Redox driver model follows the microkernel philosophy:
┌─────────────────────────────┐
│ Application │
├─────────────────────────────┤
│ Device Scheme (driver) │
├─────────────────────────────┤
│ Microkernel │
├─────────────────────────────┤
│ Hardware │
└─────────────────────────────┘
Driver Initialization
Drivers are initialized through the init system:
# Driver initialization script
requires_weak 00_base
pcid-spawner # PCI device driver spawner
The PCI daemon (pcid-spawner) automatically loads drivers for detected hardware.
Driver Categories
Storage
Network
Graphics
Input
System
Storage Drivers Drivers for disk and storage devices:
NVMe : NVMe SSD support
AHCI : SATA controller support
IDE : Legacy IDE controller support
USB Storage : USB mass storage devices
# Storage devices appear as schemes
ls /scheme/disk/
ls /scheme/nvme0
Network Drivers Network interface drivers:
Intel : Intel network adapters
Realtek : Realtek network cards
Virtio : Virtual network devices
# Network initialization
notify smolnetd
nowait dhcpd
Network schemes available: schemes = [
"ip" , # IP networking
"icmp" , # ICMP protocol
"tcp" , # TCP protocol
"udp" , # UDP protocol
]
Display Drivers Graphics and display drivers:
VESA : VESA BIOS Extensions
Intel HD : Intel integrated graphics
Virtio GPU : Virtual GPU support
schemes = [
"display.vesa" , # VESA display
"display*" , # All displays
]
Keyboard, mouse, and other input devices:
PS/2 : PS/2 keyboard and mouse
USB HID : USB keyboards and mice
Serial : Serial port input
schemes = [
"event" , # Event handling
"serio" , # Serial I/O
"pty" , # Pseudo-terminals
]
System Drivers Essential system device drivers:
RTC : Real-time clock
Random : Random number generation
Null/Zero : Null and zero devices
# System device files
/dev/null - > /scheme/null
/dev/random - > /scheme/rand
/dev/zero - > /scheme/zero
Base System Drivers
Essential drivers are included in the base package:
[ packages ]
base = {} # Essential system components and drivers
base-initfs = {} # Initial ramdisk drivers
The base package includes core drivers needed for system boot and operation.
Driver Schemes
Drivers expose functionality through schemes:
Base Schemes
schemes = [
"rand" , # Random number generator
"null" , # Null device
"zero" , # Zero device
"log" , # System logging
]
Network Schemes
schemes = [
"ip" , # IP protocol
"icmp" , # ICMP protocol
"tcp" , # TCP protocol
"udp" , # UDP protocol
]
IPC Schemes
schemes = [
"shm" , # Shared memory
"chan" , # Channels
"uds_stream" , # Unix domain sockets (stream)
"uds_dgram" , # Unix domain sockets (datagram)
]
PCI Driver Management
The PCI daemon manages PCI device drivers:
# PCI device enumeration
pcid-spawner
# Automatically loads drivers for:
# - Network cards
# - Storage controllers
# - Graphics cards
# - USB controllers
Network Configuration
Network drivers are configured through the init system:
# Network initialization
notify smolnetd # Network daemon
nowait dhcpd # DHCP client
Network configuration files:
# DNS server
[[ files ]]
path = "/etc/net/dns"
data = "9.9.9.9"
# IP address (QEMU default)
[[ files ]]
path = "/etc/net/ip"
data = "10.0.2.15"
# Router
[[ files ]]
path = "/etc/net/ip_router"
data = "10.0.2.2"
# Subnet mask
[[ files ]]
path = "/etc/net/ip_subnet"
data = "255.255.255.0"
Audio Drivers
Audio device support:
schemes = [
"audio" , # Audio device access
]
USB Support
USB drivers provide support for:
USB storage devices
USB input devices (keyboard, mouse)
USB network adapters
USB serial ports
Driver Development
Developing drivers for Redox:
Implement the scheme interface
Create a scheme provider that implements the required operations
Register the scheme
Register your driver’s scheme with the kernel
Handle requests
Process open, read, write, and other operations
Test in isolation
Test the driver in userspace before deployment
Driver bugs only affect the driver process, not the entire system. This makes development and testing safer.
Hardware Compatibility
For detailed hardware compatibility information, see:
Hardware Support Complete list of supported hardware
Advantages of Userspace Drivers
Stability Driver crashes don’t crash the kernel
Security Drivers run with limited privileges
Development Easier to develop and debug
Updates Drivers can be updated without rebooting
Resources
Base Repository Essential drivers and components
Hardware Support Supported hardware list
Redox Book Driver development guide
Developer FAQ Common driver questions
Maintainer
Jeremy Soller (@jackpot51) Primary maintainer of base drivers