Loadable pieces of kernel code (drivers, filesystems) added or removed without a reboot.
Rather than compiling every possible device driver into one enormous kernel image, Linux lets most drivers and optional subsystems live as separate loadable kernel modules (files ending in .ko) that get inserted into the running kernel on demand — often automatically, the moment matching hardware is detected.
This is what lets a single kernel image support wildly different hardware: a laptop and a server can run the exact same kernel version, loading only the modules relevant to their own hardware.
modprobe is the tool that actually matters day to day — unlike the lower-level insmod, it resolves a module's dependencies automatically (loading anything the requested module needs first) by consulting /lib/modules/$(uname -r)/modules.dep.
Removing a module that's still in use (a mounted filesystem's driver, a NIC still carrying traffic) will fail safely with an error rather than crash the kernel — the kernel tracks a reference count per module specifically to prevent that.
rmmod -f to bypass a "module in use" error — this can crash the kernel or corrupt state; find and stop whatever's using it instead.