I'm not at all a kernel-hacker, so take all this with a grain of salt.
Kernel modules are most useful for flexibility:
- For instance, if you're building a kernel that might run on many different systems (say for a bootdisk), then you want to build a flexible kernel and package different sets of modules in different initrds. You plug in the pieces you need at runtime as and when you need them.
- You can also unload them when you're done with them. That's a somewhat uncommon situation: in regular desktop use, for example, you're probably not going to unload your ethernet card driver after you load it in. But in special circumstances that can happen, and when it does, modules will save you some memory (the base kernel stays in memory; modules don't).
- This also means you can upgrade your hardware without rebuilding your kernel or rebooting your system. Which is really cool but again, it doesn't happen every day.
The disadvantages are:
- When you build the kernel, you could end up with all this crud lying around that you don't really need (for instance, building a PCMCIA module when you only really need the EtherExpress Pro/100 module).
- Security risk: if modules can be loaded, malicious modules can be loaded. If you have a streamlined monolithic kernel that doesn't allow any later additions then you're that much safer. Just as when you're hardening a server you want to put in stuff you need, get rid of stuff you don't need, and then lock it down; you don't want to put in stuff just because you *might* use it someday. I think some rootkits are deployed as loadable kernel modules.
- In a few (rare) instances there can be a performance hit.
TLDP has a page on kernel modules:
http://www.tldp.org/HOWTO/Module-HOWTO/
Bottom line: if you're a regular home user it doesn't matter either way and you're probably better off with the flexibility of modules. If you have a stable box and you're not going to keep adding or removing hardware and you want a somewhat tighter system, a monolithic kernel is a good idea. If you're developing/playing with lots of toys, modules are a good idea.
GR
(Of course, all this is for a kernel that was originally meant to be monolithic, like Linux. For a fundamentally modular/microkernel system like the Hurd, you can't live without modules. They also have some really cool ideas like "translators" (ie. modules) that can be attached to any file, but then they have an OS that has been coming out "next year" for 20 years now.)