Cuando
instalamos un driver, el kernel queda modificado permanentemente,
pues ahora contiene además de lo que contenía antes, la información
específica de nuestro nuevo hardware.
Incluso
si no usamos habitualmente la impresora, su driver sigue estando
allí, ocupando memoria reservada para el kernel, y desaprovechando
por tanto un importante recurso de nuestro sistema.
Es por
eso que el kernel de Linux es modular, esto quiere decir, que
está construido de tal forma que podemos añadirle ``trozos' de
kernel durante la marcha, y si ciertas partes del mismo no se están
usando, podemos eliminarlas tranquilamente.
Por
ejemplo, en Linux, el driver de la tarjeta de red puede ser instalado
como módulo, durante el normal funcionamiento del kernel, el
módulo no está cargado, pero si en algún momento vamos a necesitar
usar la tarjeta de red, este se puede cargar, luego, cuando dejemos
de usar la tarjeta de red, podemos eliminar el módulo para
aprovechar mejor nuestra memoria.
El
concepto de módulo no tiene por que estar únicamente ligado a los
drivers, mucha de la funcionalidad del kernel que no tenga que ver
específicamente con un determinado hardware puede ser programada en
forma de módulo, en especial si no esperamos hacer un uso frecuente
de la misma.
Podemos
entonces decir que un módulo es una pieza de código
objeto que está especialmente preparado para integrarse
dinámicamente con el resto del kernel.
Las
implicaciones de esta definición son enormes, pues programar un
módulo es programar una porción del kernel; ya no estamos haciendo
aplicaciones en espacio de usuario, estamos creando parte del kernel
en si mismo, implementando llamadas al sistema y manejando el
hardware a bajo nivel.