All recent Linux kernels support kernel modules. Kernel modules are
really neat things -- they're pieces of the kernel that reside in
relatively small binary files on disk. As soon as the kernel needs the
functionality of a particular module, the kernel can load that specific
module from disk and automatically integrate it into itself, thus
dynamically extending its capabilities.
If the features of a loaded kernel module haven't been used for several
minutes, the kernel can voluntarily disassociate it from the rest of the
kernel and unload it from memory -- something that's called
autocleaning. Without kernel modules, you'd need to ensure that
your running kernel (which exists on disk as a single binary file)
contains absolutely all the functionality you could possibly need.
Without modules, you'd need to build a completely new kernel to add
important new functionality to it.
Typically, users build a single kernel
image that contains all essential functionality, and then build a
bunch of modules that correspond to features that they may need in
the future. If and when that time comes, the appropriate module can be
loaded into the kernel as needed. This also helps to conserve RAM, since
a module uses RAM only when it has been loaded from disk. When a module
is removed from the kernel, that memory can be freed and used for other
purposes.