Il kernel di Linux è contenuto normalmente nel file /vmlinuz
Un tempo questo file conteneva il codice per gestire tutte le periferiche installate e le opzioni che l'utente voleva. Si parlava di kernel monolitico
Se si voleva aggiungere il supporto per nuove periferiche o altre opzioni, era indispensabile ricompilare il kernel, operazione non difficilissima, ma neanche banale.
Con l'aumentare delle opzioni nel kernel e delle periferiche disponibili sul mercato, un kernel in grado di far funzionare la maggior parte delle macchine tenderebbe a diventare di dimensioni enormi.
Si è deciso quindi consentire di caricare parti del kernel, non contenute nel file iniziale, in un secondo tempo.
Queste parti del kernel prendono il nome di moduli. Normalmente essi riguardano parti non essenziali del kernel o codice di gestione di periferiche.
Se noi ricompiliamo il kernel, possiamo decidere se incorporare il codice per le nostre periferiche oppure se caricarlo in un secondo tempo come modulo.