O ‘kernel modular’ que quase não existiu: a decisão que permitiu ao Linux se adaptar a qualquer hardware

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

A escolha que quase não aconteceu — e tornou o Linux compatível com tudo.

Desde sua origem nos anos 1990 até sua presença em datacenters, notebooks, robôs industriais e até torradeiras, o Linux é admirado por sua impressionante capacidade de se adaptar a praticamente qualquer hardware. Mas o segredo por trás dessa flexibilidade nem sempre foi garantido. Este artigo revela como a adoção de um kernel modular Linux, decisão que quase não aconteceu, moldou o destino do sistema e se tornou o alicerce da adaptação de hardware no Linux.

O que é um kernel modular? O segredo da flexibilidade do Linux

O que é um kernel?

O kernel é o núcleo do sistema operacional — o intermediário entre os programas e o hardware. Se imaginarmos o sistema como um carro, o kernel seria o motor: é ele que recebe comandos (como frear, acelerar, mudar de marcha) e os traduz em ações concretas no nível físico.

Kernel monolítico vs. modular (e microkernel)

Há três modelos principais de kernel:

Tipo de kernelCaracterísticas principaisExemplos
MonolíticoTudo é compilado como um único bloco. Rápido, mas pouco flexível.Unix tradicional, Linux inicial
ModularPermite carregar ou remover partes (drivers, funcionalidades) sem reiniciar.Linux moderno, FreeBSD (parcial)
MicrokernelApenas o essencial fica no núcleo. Serviços como drivers e rede rodam fora do kernel.MINIX 3, Fuchsia

Analogia para iniciantes

Um kernel monolítico é como um carro onde todas as peças são soldadas: para trocar uma, você precisa desmontar tudo. Um kernel modular, por outro lado, é como um carro com peças removíveis: você pode trocar a central multimídia ou o freio ABS sem desmontar o motor. Já um microkernel seria um carro cujo motor, câmbio e suspensão funcionam em compartimentos separados — mais seguro, mas potencialmente mais lento e complexo.

O que são LKMs?

Os Loadable Kernel Modules (LKMs) são arquivos que adicionam funcionalidades ao kernel sem precisar recompilar ou reiniciar o sistema. Eles podem incluir:

  • Drivers de dispositivos
  • Sistemas de arquivos
  • Protocolo de rede

Esses módulos são armazenados em /lib/modules/$(uname -r)/ e gerenciados com comandos como lsmod, modprobe, insmod, rmmod.

A grande decisão: o ‘quase’ que mudou a história kernel modular

A controvérsia entre Tanenbaum e Torvalds

Em 1992, ocorreu um dos debates mais importantes da história do Linux, na lista comp.os.minix. Andrew Tanenbaum, criador do MINIX, afirmou:

“O Linux está obsoleto.” — Andrew Tanenbaum

Linus Torvalds respondeu:

“Um microkernel pode ser teoricamente mais limpo, mas na prática, o desempenho e a simplicidade são mais importantes.” — Linus Torvalds

Esse embate revelou uma divergência profunda: Tanenbaum defendia um microkernel purista; Linus, um kernel monolítico prático. A modularidade ainda era uma ideia distante.

O kernel Linux inicial: monolítico e rígido

Nas primeiras versões do Linux (0.11 até 1.0), não existia suporte a módulos. Cada driver ou funcionalidade precisava ser incluído no momento da compilação. Isso tornava o sistema:

  • Mais difícil de manter
  • Pouco adaptável a novos hardwares
  • Lento para evoluir

A virada com os LKMs

A virada começou com a introdução experimental de LKMs na série 0.9x, mas só se consolidou no Linux 1.2, lançado em março de 1995. Essa decisão foi uma resposta prática às demandas de usuários e desenvolvedores, que queriam flexibilidade.

Documentado nos changelogs históricos do kernel.org.

Como o kernel modular Linux funciona na prática

Ferramentas para gerenciamento de módulos

ComandoFunção
lsmodLista os módulos carregados no momento
modinfoExibe informações sobre um módulo (autor, licença, descrição)
modprobeCarrega ou remove módulos com dependências automáticas
insmodInsere um módulo manualmente
rmmodRemove um módulo

Exemplo:

lsmod

Saída simulada:

i915           278528  2
snd_hda_intel   45056  1
r8169           98304  0
modinfo i915
filename:       /lib/modules/6.1.0/kernel/drivers/gpu/drm/i915/i915.ko
description:    Intel Graphics Driver
license:        GPL
author:         Intel Corporation

Como o kernel se adapta dinamicamente

Graças aos módulos, o Linux pode detectar o hardware e carregar o driver correspondente automaticamente. Essa capacidade plug and play é gerenciada pelo udev e pelo modprobe.

O carregamento automático depende da árvore de dependências gerada por depmod, que organiza os módulos por tipo e prioridade.

Evolução das ferramentas: de modutils a kmod

Nos anos 1990, Bjorn Ekwall criou o pacote modutils, que introduziu comandos como modprobe e depmod. Mais tarde, esse conjunto foi substituído por kmod, usado hoje nas principais distribuições.

Veja o repositório oficial do kmod.

Influências de sistemas UNIX comerciais

Antes dos LKMs no Linux, sistemas como SunOS 4.x e SVR4 (System V Release 4) já permitiam carregar drivers dinamicamente usando comandos como modload e modstat.

Esses sistemas influenciaram os primeiros patches da comunidade Linux para permitir a modularização — especialmente na estrutura de gerenciamento de dispositivos e diretórios.

A adaptação hardware Linux: dos primórdios à ubiquidade

A decisão de modularizar o kernel transformou o Linux em um sistema adaptável. O suporte a dispositivos foi amplificado:

  • Notebooks: drivers de Wi-Fi, Bluetooth, sensores de energia
  • Servidores: controladoras RAID, NICs de alta velocidade
  • Embarcados: GPIO, I²C, SPI, modems, sensores

Essa capacidade garantiu que o Linux dominasse desde datacenters até IoT.

Exemplo extremo: o caso em que o Linux rodou em uma torradeira, viabilizado por módulos mínimos.

Device Tree: modularidade na detecção de hardware

O Device Tree (DT) surgiu como uma solução para sistemas embarcados, especialmente na arquitetura ARM. Ele descreve o hardware para o kernel na forma de um arquivo .dtb.

O kernel usa o Device Tree para determinar quais módulos precisam ser carregados de acordo com o hardware presente — uma evolução direta da filosofia modular.

Veja a documentação oficial do Device Tree no Linux.

Segurança e modularidade

Assinatura de módulos

A flexibilidade dos LKMs também atraiu atenção de atacantes, que passaram a usar módulos para criar rootkits (como Adore e Knark).

Em resposta, o kernel passou a suportar assinatura digital de módulos a partir do Linux 3.7, com código desenvolvido por David Howells.

Fonte: Anúncio oficial na LWN

Segurança moderna

  • LKMs só são carregados se estiverem assinados (em kernels com Secure Boot).
  • Muitos sistemas exigem que os módulos venham de fontes confiáveis (como DKMS oficial ou pacotes distribuídos).

O legado do kernel modular Linux e o futuro

Impacto atual

  • O kernel modular é a base da portabilidade do Linux.
  • Permitiu o surgimento de distribuições generalistas (Ubuntu, Fedora) e especializadas (OpenWRT, Yocto).

eBPF: a nova fronteira

Tecnologias modernas como eBPF (extended Berkeley Packet Filter) seguem a lógica dos LKMs: inserir código no kernel de forma segura e controlada.

“O eBPF compartilha o espírito dos LKMs: inserir lógica personalizada e segura em um kernel em execução, sem precisar reinicializar ou recompilar.” — Daniel Borkmann, Linux Plumbers Conference 2020

Contêineres e distros imutáveis

Sistemas como Fedora Silverblue, NixOS e contêineres Docker dependem de módulos para manter flexibilidade. A base é imutável, mas os módulos permitem carregar funcionalidades conforme necessário — um eco direto da filosofia modular do Linux.

Declarações contemporâneas

“Sem a modularidade, o Linux não teria escalado para a enorme variedade de hardwares que ele suporta hoje.” — Greg Kroah-Hartman, Linux Plumbers Conference 2015

Conclusão

O kernel modular Linux não foi apenas uma escolha técnica — foi uma decisão estratégica que moldou o futuro. Ele garantiu a adaptação de hardware Linux, deu origem à compatibilidade universal e inspirou tecnologias modernas como eBPF, Device Tree e contêineres. O que quase não existiu, tornou-se a coluna vertebral da versatilidade do Linux.

Compartilhe este artigo