Skip to main content

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 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

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:
1

Implement the scheme interface

Create a scheme provider that implements the required operations
2

Register the scheme

Register your driver’s scheme with the kernel
3

Handle requests

Process open, read, write, and other operations
4

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

Build docs developers (and LLMs) love