Los sistemas Linux (y algunos otros Unix de código abierto) tratan a los controladores de manera muy diferente a como lo hacen los sistemas operativos Windows.
En los sistemas Windows (especialmente antes de Windows 10), el kernel del sistema operativo proporciona una interfaz de software binario estable contra la cual se puede escribir un controlador, y se garantiza (con excepciones) que la interfaz no cambiará durante el ciclo de soporte de una versión de Windows dada. Esto favorece que los controladores sean escritos y suministrados por terceros, por lo general funcionarán para al menos una versión de Windows en ese ciclo de soporte. Las desventajas son que esta interfaz de controlador es difícil de mejorar o corregir dentro de ese ciclo de vida, y favorece la distribución binaria de controladores que (¡aparte de la política!) A menudo limita el soporte consistente de multiplataforma.
Los núcleos de Linux tienen una interfaz de controlador cambiante que solo se especifica estrictamente a nivel de código fuente y se inclina hacia la mejora y la coherencia multiplataforma. Esto significa que, a menos que se utilice un controlador "traductor" adicional que ofrezca una interfaz binaria estable y específica, un controlador binario es específico para una compilación exacta del núcleo. Uno podría "falsificar" un controlador binario para que sea compatible con un par de docenas de versiones exactas del kernel en una plataforma, pero el esfuerzo para mantenerlo (como una oferta binaria) no sería rentable. Este sesgo también es políticamente deseado en la comunidad del kernel de Linux, ya que pretenden que un controlador binario de código cerrado podría ser mucho peor que el firmware malicioso en un periférico con capacidad de busmasteringconsidere el código fuente cerrado como demasiado poco confiable y demasiado desagradable para que se ejecute con privilegios de kernel. Por lo tanto, los controladores de dispositivo de código abierto para todo el hardware principal se suministran dentro del paquete del kernel, con la segunda opción de que haya un método relativamente fácil de usar para distribuir un controlador externo como un tarball de origen, que se compilará contra el kernel instalado.
Algunos otros controladores de Linux (por ejemplo, controladores gráficos clásicos X11, controladores de escáner, controladores de impresora) no se manejan como partes del núcleo, sino como partes de algún software de espacio de usuario que proporciona la funcionalidad como un servicio de todo el sistema (XOrg, Sane, Ghostscript). ..) - estos también tienden a ser específicos y distribuidos principalmente con una versión determinada del software de espacio de usuario relevante.