A kernel extension is a piece of computer software that is loaded into an operating system's central component. Kernel extensions might be used to provide functionality or hardware support that otherwise would not be a part of the kernel. A kernel extension often is allowed to perform tasks or access parts of the operating system that normal software cannot. In some operating systems, kernel extensions are referred to as kernel modules, or simply modules.
In most operating systems, access to networking, file systems and system calls are restricted in order to maintain a stable and secure system. Kernel extensions are able to access these functions and systems because they run as part of the kernel. A kernel with no extensions is known as a base kernel. Extensions can be added to or removed from the base kernel.
Extensions allow greater flexibility in a kernel’s capabilities without increasing the complexity of the base kernel. For example, a kernel extension might be loaded to enable power-saving features appropriate for laptop computers. These features typically are not included in the base kernel because the operating system might not be used on a laptop.
Kernel extensions or modules also can be loaded and unloaded dynamically, meaning that they are added to and removed from the kernel as needed. This allows the computer to save memory and other resources when the extension is not in use. A Universal Serial Bus (USB) network adapter might load its required drivers as kernel extensions when plugged in, then unload the extensions when the device is removed.
They have more authority than other programs, so kernel extensions and modules can cause unique problems. A poorly coded device driver running as a kernel extension could cause the entire system to crash. For this reason, software developers often are encouraged to use kernel extensions only when there is no alternative.
For most users, configuration of extensions happens automatically. Some users, especially those using particular operating systems, manage kernel extension or modules themselves. There are variations in the versions of kernels, so extension and modules might not be compatible with all kernels or all operating systems.