Открыть сервис

DriverKit

DriverKit — это программный фреймворк, разработанный компанией Apple Inc., предназначенный для создания драйверов устройств, работающих в пользовательском пространстве (user-space) операционной системы. В отличие от традиционных драйверов, которые выполняются в ядре операционной системы, драйверы на базе DriverKit функционируют в изолированной среде, что повышает стабильность и безопасность системы.

История

Предпосылки создания

До появления DriverKit разработка драйверов для macOS велась с использованием фреймворка I/O Kit, который требовал выполнения кода в пространстве ядра. Такой подход, хотя и обеспечивал высокую производительность, был сопряжён с рисками: ошибка в драйвере могла привести к краху всей операционной системы. Кроме того, для разработки драйверов требовалась глубокая квалификация в программировании ядра, а сам процесс был сложен и требователен к ресурсам.

Анонс и внедрение

DriverKit был анонсирован на Всемирной конференции разработчиков Apple (WWDC) в 2019 году в рамках презентации macOS 10.15 Catalina. Основной целью было упрощение разработки драйверов и повышение безопасности системы за счёт выноса драйверов из ядра. Первоначально фреймворк поддерживал ограниченный набор типов устройств: USB, Serial (последовательные порты) и Networking (сетевые устройства). В последующих версиях macOS, включая macOS 11 Big Sur, macOS 12 Monterey и macOS 13 Ventura, функциональность DriverKit была расширена, добавив поддержку PCI, Audio и HID (Human Interface Devices — устройства ввода, такие как клавиатуры и мыши).

Архитектура и принципы работы

User-space драйверы

DriverKit позволяет драйверам выполняться в пользовательском пространстве, что означает их изоляцию от ядра операционной системы. Каждый драйвер запускается в отдельном процессе (де-факто — в отдельном XPC-сервисе), который имеет ограниченные права доступа к системным ресурсам. Взаимодействие с ядром осуществляется через специальные системные вызовы и механизмы межпроцессного взаимодействия (IPC), предоставляемые фреймворком.

Изоляция и безопасность

Основное преимущество архитектуры DriverKit — повышенная безопасность. Если драйвер, работающий в пользовательском пространстве, даёт сбой или содержит уязвимость, это не приводит к краху ядра. Операционная система может перезапустить проблемный драйвер или изолировать его влияние. Кроме того, драйверы на DriverKit подписываются цифровой подписью разработчика и проверяются системой на соответствие политикам безопасности, что снижает риск установки вредоносного кода.

Производительность

Несмотря на дополнительный уровень абстракции, производительность драйверов DriverKit сопоставима с традиционными kernel-драйверами для большинства задач. Это достигается за счёт оптимизированного IPC и прямого доступа к аппаратным ресурсам через механизмы, предоставляемые ядром. Однако для устройств, требующих минимальных задержек (например, высокоскоростных сетевых адаптеров или аудиоинтерфейсов реального времени), разработчики могут выбирать гибридные подходы, сочетая DriverKit с элементами kernel-расширений.

Классификация и типы драйверов

DriverKit поддерживает несколько категорий драйверов, каждая из которых предназначена для определённого класса устройств:

  • USB Driver — для устройств, подключаемых через шину USB (принтеры, сканеры, внешние накопители, MIDI-контроллеры и т.д.).
  • Serial Driver — для последовательных портов (RS-232, UART), используемых в промышленном оборудовании, научных приборах и старых периферийных устройствах.
  • Networking Driver — для сетевых адаптеров (Ethernet, Wi-Fi, Bluetooth), включая виртуальные сетевые интерфейсы.
  • PCI Driver — для устройств, подключаемых через шину PCI/PCIe (видеокарты, звуковые карты, контроллеры хранения данных). Поддержка добавлена в macOS 11 Big Sur.
  • Audio Driver — для аудиоустройств (внешние звуковые карты, микрофоны, наушники). Поддержка добавлена в macOS 12 Monterey.
  • HID Driver — для устройств ввода (клавиатуры, мыши, джойстики, сенсорные панели). Поддержка добавлена в macOS 13 Ventura.

Разработка драйверов

Инструментарий

Для разработки драйверов на DriverKit используется среда Xcode, включающая специальные шаблоны проектов. Код пишется на языке Swift или Objective-C, с использованием фреймворка DriverKit, который предоставляет API для взаимодействия с устройствами. Разработка ведётся в контексте расширения (DriverKit extension), которое устанавливается в систему как отдельный пакет.

Процесс создания

  1. Определение типа устройства — выбор соответствующего подфреймворка (например, USBDriverKit, PCIDriverKit).
  2. Реализация драйвера — создание класса, наследующего от базового класса IOService, и переопределение методов для инициализации, настройки и передачи данных.
  3. Подпись и упаковка — драйвер подписывается сертификатом разработчика Apple и упаковывается в .driverkit-расширение.
  4. Тестирование — драйвер тестируется на совместимость с целевыми устройствами и версиями macOS.
  5. Распространение — драйвер может распространяться через App Store (в составе приложения) или напрямую через установочный пакет.

Ограничения

DriverKit не поддерживает драйверы для устройств, требующих прямого доступа к физической памяти или обработки прерываний на уровне ядра. Также фреймворк не предназначен для разработки драйверов для систем хранения данных (дисковых контроллеров) и графических процессоров — эти задачи остаются в компетенции kernel-расширений.

Применение

Периферийные устройства

DriverKit широко используется для создания драйверов для внешних устройств, подключаемых через USB или последовательный порт. Примеры: драйверы для лабораторного оборудования, медицинских приборов, промышленных контроллеров, а также для аудиоинтерфейсов профессионального уровня.

Сетевые адаптеры

Фреймворк позволяет создавать драйверы для сетевых устройств, включая виртуальные сетевые интерфейсы (например, VPN-адаптеры или эмуляторы сетевых карт). Это упрощает интеграцию стороннего сетевого оборудования в macOS.

Игровые контроллеры и HID-устройства

С поддержкой HID DriverKit разработчики могут создавать драйверы для игровых контроллеров, джойстиков и специализированных устройств ввода, не прибегая к kernel-расширениям.

Критика и ограничения

Совместимость

На момент выхода DriverKit поддерживал только ограниченный набор устройств, что вызывало критику со стороны разработчиков, работающих с нестандартным оборудованием. Расширение поддержки до PCI и Audio заняло несколько лет, и некоторые типы устройств (например, графические ускорители) по-прежнему требуют kernel-расширений.

Производительность

Для высоконагруженных устройств (например, высокоскоростных NVMe-накопителей) драйверы на DriverKit могут уступать в производительности kernel-драйверам из-за накладных расходов на IPC. Однако для большинства потребительских устройств разница незаметна.

Сложность миграции

Разработчики, ранее использовавшие I/O Kit, столкнулись с необходимостью переписывать код под новую архитектуру. Это потребовало времени и ресурсов, особенно для сложных драйверов с глубокой интеграцией в ядро.

Сравнение с альтернативами

DriverKit vs I/O Kit

  • Безопасность: DriverKit обеспечивает изоляцию от ядра, I/O Kit — нет.
  • Производительность: I/O Kit быстрее для задач с низкими задержками.
  • Сложность: DriverKit проще в разработке и отладке.
  • Поддержка: I/O Kit поддерживает больше типов устройств, но постепенно вытесняется DriverKit.

DriverKit vs Linux UIO/VFIO

В Linux аналогичные концепции реализованы через UIO (Userspace I/O) и VFIO (Virtual Function I/O). DriverKit предоставляет более интегрированное решение в экосистеме Apple, но менее гибкое для нестандартных сценариев.

Будущее развития

Apple продолжает расширять функциональность DriverKit, добавляя поддержку новых типов устройств и улучшая производительность. Ожидается, что в будущих версиях macOS фреймворк полностью заменит I/O Kit для большинства категорий драйверов, за исключением критически важных для системы. Разработчикам рекомендуется переходить на DriverKit для новых проектов, чтобы обеспечить совместимость с актуальными версиями macOS.

Источники

  • Документация Apple Developer: DriverKit Framework Reference
  • Сессия WWDC 2019: «Introducing DriverKit»
  • Сессия WWDC 2020: «What's New in DriverKit»
  • Статья «Building a Driver with DriverKit» на сайте Apple Developer
  • Техническая документация macOS Kernel Programming Guide

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →