I'm looking at a rather old Linux (v2.4) that has custom device drivers built into the kernel. Now I wonder since when that was done. I suppose it most be an old technique, was this the way device drivers were added to Linux already in version 1?

  • 3
    I'm voting to close because this doesn't seem to be about retro computing. This seems better suited for unix.stackexchange.com
    – cbmeeks
    Jul 26 '17 at 19:59
  • 1
    @cbmeeks modules date from 1995 - if Windows 95 is considered retro, then this question should be appropriate. Note that the question seems to be the other way round, compared to the actual history - kernel was monolithic at first, modules were introduced later, and then gradually more and more drivers were compiled as modules (especially since initram/initrd became popular in distributions). Jul 27 '17 at 13:18
  • @RadovanGarabík I see your point. However, if you were to drop the original question onto unix.se would they say it belongs over here?
    – cbmeeks
    Jul 27 '17 at 13:22
  • @cbmeeks Question about the time of 2.4 kernel? It's an old history, most certainly (that is not to say some supported systems are not running even older kernels). Jul 27 '17 at 13:24
  • 2
    This kind of historical question would be welcome on Unix.SE too, but I think it is valid here as well. Jul 27 '17 at 15:03

Kernel modules have been available since version 1.1.85 in January 1995 (see the introduction of README.modules in the 1.1.85 patch). At first, few drivers were actually available as modules, but within a few years everything that made sense as a module was available as a module.

When developing a new driver for the kernel, it’s easier to work on it as a module than a built-in driver: instead of rebooting when you make changes to the driver, you can unload the old module and load the new one in its place. In most cases though drivers are made available in both forms (built-in and in a module) before release, assuming they’re part of the main kernel source code. Drivers which are provided outside the main kernel source code can really only be made available as modules, unless the kernel itself is forked (which does happen).


Before common use of initrd on hard disks, you compiled all drivers needed at boot time into the kernel. Initrd is quite old now, but use of it on hard disks is reasonably new.

  • Citation needed... Initrd has been used on hard disks for a very long time, e.g. in Debian since at least 2002. You’re right about compiling drivers necessary to boot the system into the kernel. Jul 26 '17 at 21:09
  • @StephenKitt: Red Hat sure didn't and I've got the OS install intact to prove it (pre-internet computer). Slackware didn't either.
    – Joshua
    Jul 26 '17 at 21:51
  • 2
    Red Hat Linux 3.9 introduced modules instead of monolithic kernels in 1996. That’s not “reasonably new” in my book (at least, not as far as Linux history goes!). Jul 26 '17 at 22:18
  • 1
    Regarding initrd, I believe that was a new feature introduced in the 1.3.x line (circa 1997 I guess). It certainly wasn't used in my 1.2.13 based system in 1996, but when I upgraded to 2.0 I'm pretty sure the new system used it.
    – Jules
    Jul 28 '17 at 19:53
  • 1
    @StephenKitt definitely my first few Linux systems didn't use an initrd... if you were using a stock kernel you used the "IDE kernel" if your / was on an IDE disk or the "SCSI kernel" if it was on SCSI, the root fs was mounted directly, and the first process the kernel ran was the real init. IIRC the substantial changeover happened around the same time as 2.6 and udev. It was available before then, no doubt, but it wasn't the obvious or common thing.
    – hobbs
    Aug 4 '17 at 5:01

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.