DriverKit is a device driver development framework for Apple's macOS and iPadOS operating systems, introduced with macOS 10.15 "Catalina" and later added to iPadOS in version 16.
General information
DriverKit is a device driver development framework for Apple's macOS operating system, introduced with macOS 10.15 "Catalina." It was later also added to iPadOS in version 16.
The DriverKit SDK is contained in Apple's Xcode IDE distribution (from version 11 onwards), and is used to build so-called "driver extensions" or "dext" which run in special privileged user space processes. These extensions are installed by apps using the system extensions mechanism.
The DriverKit SDK interfaces with the wider IOKit infrastructure, both in kernel and general user space.
Features
As of macOS 10.15, the following types of driver can be implemented using DriverKit:
- Driving USB devices
- Making a serial port available to the system, with special support for USB based serial port adapters.
- Making a network adapter available to the system
- Driving HID devices and making them available to the system.
As of macOS 10.15.4, the following types of driver can additionally be implemented:
macOS 11.3 added support for:
- Implementing drivers for SCSI Controllers
macOS 12 added APIs for:
- Drivers for Audio devices (Although the user space Core Audio Server Plugin API remains valid and often preferable.)
- Block storage device drivers
iPadOS 16 supports:
- USBDriverKit
- PCIDriverKit (Thunderbolt)
- AudioDriverKit
Relevant question topics
- Questions about which driver technology is the correct one to for implementing a driver for a particular device. In addition to DriverKit, drivers on macOS may also be implemented using a kext (kernel extension) or as a regular user space process, depending on the underlying device technology (USB, PCI, Firewire, etc.), the type of device (storage, network, audio, display, etc.), and the macOS version(s) targeted.
- Questions related to the process of building, code signing, and packaging dexts. There is some overlap with
macos-system-extension
tag, using both can be appropriate when talking about the installation/activation process and APIs. - Code-level questions for implementing DriverKit based drivers. Co-tag with
hid
,usb
,pci
, etc. as appropriate when discussing specific types of device. - Questions about interaction of DriverKit drivers with the rest of the system, be it kexts or user space (app) clients. This will typically overlap with the
iokit
tag.