In the Linux kernel, modules are pieces of kernel code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system.

For example, the most common type of kernel modules are device drivers, which allow the kernel to access hardware connected to the system.

Without modules, we would have to build large kernels with all possible anticipated functionality already compiled directly into the kernel image. Besides having larger kernels, this has the disadvantage of requiring us to rebuild and reboot the kernel every time we want new functionality.

Sometimes modules are provided in binary only form, which might be in violation of Linux's GPL license. [1]