Until now, I thought that linux drivers are at kernel level. That means, drivers are packed inside the kernel, so different distributions should support the same hardware as long as they run the same version of kernel. Of course there are dkms drivers, which are installed after installing the kernel, but I am not talking about those.

Today I read an article and it said: "Different distros package different drivers in their installers, which means that, depending on which distro you use, you'll find that different pieces of hardware may or may not work out of the box."

What am I missing? How do different distros package different drivers? How is it possible if drivers are packed inside the kernel?


While the availability of drivers in the Linux community is indeed rather uniform, several factors contribute to make this general picture less than perfect.

The uniformity in driver availability you are referring to certainly applies to those which enter the kernel tree. Once this is decided, support for the development of drivers under evolving kernel structure lies squarely with the Linux kernel group, and you may rest assured of the availability of said drivers from some initial kernel version onward.

However, there is also a large group of proprietary drivers which may not, for obvious reasons, find their way into the kernel tree. Or there are drivers which require proprietary firmware, which are not necessarily installed automatically, depending upon how strictly the distro developers adhere to the principles of FOSS (Free Open Source Software). For both of these types of drivers the degree of support (to say nothing of their technical adequacy) by their rightful owners is not constant with time, as in the case of the Broadcom wifi drivers; hence the need for the development of FOSS alternatives. A famous case, apart from the Broadcom, is that of the OpenSource NVidia drivers. When an open source alternative does not exist, you may find that some drives are compatible with older kernel versions, but not with newer ones; in some cases compilation with up-to-date Linux headers is not an option, simply because they may refer to system calls which do not exist any more.

Also, new hardware is normally introduced between different kernel versions, which may be (trivially or not) accommodated by existing drivers. This is the case for instance of many wifi adapters, which producers present as brand new as some point in time, but which are instead based on pre-existing chipsets for which a Linux driver already exists. In some cases, a trivial code modification plus re-compilation solves the problem permanently. Other times, more complex modifications to the driver are needed, or even the introduction of an altogether new driver. Luckily for us, in this case the generous folks at Linux Backports provide us with versions of new or modified drivers which are compatible with older kernels. So, even if you feel left behind, downloading backports from this site will allow you to sport the newest drivers around.

In other words, a little bit of work is needed (download and compilation of the Linux backports) to restore the near uniformity you were referring to.


Well, quite a lot of drivers are in the form of loadable kernel modules - which while in the kernel tree, may not be compiled in. You can always compile these modules later, install and reboot. Generally, unless you're compiling from scratch, gentoo style you will probably using these on top of a sane set of defaults. This allows a kernel to have modules added without needing a reboot (using insmod), and not load modules at all if not needed.

DKMS just adds some lovely things like automatically recompiling modules on a kernel update.


Try to download kernel sources and run make menuconfig. You'll see a huge number of options many of which are kernel modules you can either compile in (they become part of the generated kernel image), compile as modules (they can be loaded from the disk when the kernel has already booted) or not compile at all.

Also, distributions may use different versions of kernels and different sets of patches over the official (vanilla) kernel release. Some distribution installers even let you use closed source drivers/firmware that cannot cannot be part of the official sources.

But overall you get roughly the same hardware support with general-purpose distributions using roughly the same kernel version.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.