Системы Linux (и некоторые другие Unix-системы с открытым исходным кодом) относятся к драйверам совершенно иначе, чем ОС Windows.
В системах Windows (особенно до Windows 10) ядро ОС предоставляет стабильный двоичный программный интерфейс, для которого может быть записан драйвер, и этот интерфейс (за исключением) гарантированно будет неизменным в течение цикла поддержки данной версии Windows. Это способствует тому, что драйверы пишутся и поставляются третьими сторонами, они обычно работают как минимум для одной версии Windows в течение этого цикла поддержки. Недостатком является то, что этот интерфейс драйвера трудно улучшить или исправить в течение этого жизненного цикла, и он поддерживает двоичное распределение драйверов, что (помимо политики!) Часто ограничивает согласованную многоплатформенную поддержку.
Ядра Linux имеют изменяемый интерфейс драйвера, который строго определен только на уровне исходного кода и смещен в сторону улучшения и многоплатформенности. Это означает, что, если не используется дополнительный драйвер «переводчика», предлагающий конкретный, стабильный двоичный интерфейс, двоичный файл драйвера является специфическим для конкретной сборки ядра. Можно было бы «выдумать» двоичный файл драйвера, чтобы быть совместимым с парой дюжин точных версий ядра на одной платформе, но усилия по его поддержке (в виде двоичного предложения) были бы неэкономичными. Это смещение также политически необходимо в сообществе ядра Linux, так как они делают вид, что двоичный драйвер с закрытым исходным кодом может работать намного хуже, чем вредоносная прошивка на периферийном устройстве с поддержкой busmastering.рассматривайте закрытый исходный код как слишком ненадежный и слишком неприятный, чтобы он работал с привилегиями ядра. Таким образом, драйверы устройств с открытым исходным кодом для всех основных аппаратных средств поставляются в самом пакете ядра, причем второй вариант заключается в том, что существует относительно простой в использовании метод распространения внешнего драйвера в качестве исходного архива, который должен быть скомпилирован с установленным ядром.
Некоторые другие драйверы Linux (например, классические графические драйверы X11, драйверы сканеров, драйверы принтеров) обрабатываются не как части ядра, а как части некоторого программного обеспечения пользовательского пространства, которое обеспечивает функциональность как общесистемный сервис (XOrg, Sane, Ghostscript). ..) - они также, как правило, специфичны и в основном распространяются с данной версией соответствующего программного обеспечения пользовательского пространства.