Por dentro da linguagem que Linus Torvalds odeia: os segredos do C++ no Kernel Linux

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...

Por trás da filosofia radical de Linus, a rejeição ao C++ revela lições profundas sobre desempenho, simplicidade e o futuro do Kernel Linux.

Ao longo de sua trajetória como criador e mantenedor do Kernel Linux, Linus Torvalds sempre foi conhecido por sua sinceridade brutal — e por nunca medir palavras quando o assunto é código ruim, decisões de design equivocadas ou linguagens que, em sua visão, atrapalham mais do que ajudam. Entre elas, uma ocupa um lugar especial no pódio da rejeição: o C++. Sim, a linguagem Linus Torvalds odeia.

Mas por que exatamente essa aversão? Se C++ é tão poderoso e amplamente usado, o que o torna tão incompatível com a visão de desenvolvimento do Linux? E por que, mesmo assim, há momentos em que C++ é tolerado no ecossistema do Kernel Linux? Este artigo é uma investigação aprofundada dos bastidores do C++ no Linux, com contexto histórico, filosófico e técnico.

Linus Torvalds e a filosofia “Keep It Simple, Stupid” (KISS)

Linus Torvalds sempre seguiu uma filosofia clara: não complique o que pode ser simples. Essa visão está intimamente ligada ao princípio KISS (“Keep It Simple, Stupid”), muito comum em engenharia de sistemas.

Desde o início do Linux, em 1991, a escolha por programar o Kernel quase inteiramente em linguagem C, com alguns trechos em Assembly, foi intencional. Segundo Linus, essas linguagens proporcionam:

  • Controle direto do hardware
  • Previsibilidade no comportamento do código
  • Baixa sobrecarga de abstrações
  • Facilidade de depuração e manutenção de longo prazo

Quem é Linus Torvalds — seu perfil publicado no SempreUpdate — ajuda a entender como essa filosofia moldou todas as decisões em torno do desenvolvimento do Kernel.

O que Linus “odeia” no C++? A visão de um engenheiro de Kernel

Torvalds já deixou clara sua repulsa ao C++ em diversas ocasiões. Em uma famosa troca de mensagens na lista de discussão do Kernel, ele afirmou:

“C++ is a horrible language. It’s made more horrible by the fact that a lot of substandard programmers use it…”
“C++ é uma linguagem horrível. E fica ainda mais horrível pelo fato de que muitos programadores abaixo da média a utilizam…”
Linus Torvalds, LKML (2007)

Entre os principais argumentos da sua rejeição, destacam-se:

1. Abstrações excessivas

O C++ oferece mecanismos complexos — como classes, herança múltipla, templates — que, embora poderosos, podem esconder o que realmente está acontecendo com o hardware. Linus acredita que cada camada de abstração compromete a clareza, o desempenho e a previsibilidade do código.

2. Gerenciamento de memória automático

C++ introduz o conceito de RAII (Resource Acquisition Is Initialization) e exceções automáticas. Isso dificulta prever quando e como recursos são liberados — algo inaceitável para sistemas críticos como o Kernel.

3. Problemas com ABI

A Application Binary Interface (ABI) em C++ é notoriamente instável entre diferentes compiladores e versões. Isso compromete a consistência do Kernel, que precisa manter uma ABI confiável por décadas.

4. Bloat e complexidade

A inclusão de templates e múltiplas features pode levar a códigos extremamente inchados, o chamado bloatware. Para o Kernel, cada byte conta — e a simplicidade de C ajuda a manter o código enxuto.

Quando sugeriram reescrever o Git em C++, Linus reagiu com veemência

Em 2007, após o sucesso inicial do Git (também criado por Torvalds), alguns desenvolvedores sugeriram portar o código de C para C++. A resposta de Linus foi contundente:

“C++ leads to really, really bad design choices. You invariably start using the STL, boost, and other total and utter crap…”
“C++ leva a escolhas de design realmente ruins. Você invariavelmente acaba usando STL, Boost e outras porcarias totais e absolutas…”
Linus Torvalds, LKML Archive, 2007

Ele ainda completou dizendo que a complexidade do C++ era um risco, pois dava a programadores medíocres ferramentas demais para construir coisas que não conseguiam entender.

Não é só Linus: Rob Pike compartilha da mesma visão

Rob Pike, coautor do Unix Plan 9, da linguagem Go e ex-Bell Labs/Google, é outro engenheiro de renome que critica duramente o C++. Ele afirmou:

“C++ is a language that’s too complicated, too baroque, too full of features, and too hard to understand reliably.”
“C++ é uma linguagem excessivamente complicada, barroca, cheia de recursos e difícil demais de compreender de forma confiável.”
Rob Pike, 2001

Essas críticas refletem uma preocupação comum entre engenheiros de sistemas: a confiabilidade de longo prazo em ambientes de missão crítica é comprometida pela complexidade do C++.

C vs. C++ no Kernel Linux: um comparativo técnico

Para entender melhor a decisão de manter o Kernel em C, veja a tabela a seguir:

CaracterísticaCC++
Paradigma principalProceduralOrientado a objetos
Gerenciamento de memóriaManual (malloc/free)RAII, new/delete, smart pointers
ABIEstável e simplesInstável, dependente de compilador
AbstraçõesBaixas (struct, função)Altas (classe, herança, template)
Complexidade de compilaçãoBaixaAlta (tempo e tamanho de binários)
Compatibilidade com hardwareDiretaRequer camadas adicionais
ExceçõesNão háSim (try/catch)

Essa tabela resume por que a linguagem Linus Torvalds odeia é tecnicamente incompatível com o espírito do Kernel Linux: simplicidade, controle e previsibilidade.

Tentativas frustradas de portar drivers para C++

Durante os anos 1990 e início dos 2000, diversos desenvolvedores tentaram escrever drivers de dispositivos em C++. Esses projetos foram sistematicamente rejeitados pela equipe principal do Kernel. O motivo: problemas de ABI, dificuldade de depuração e incompatibilidades introduzidas pelas camadas extras de abstração.

Muitos desses módulos experimentais sequer chegaram à árvore principal do Kernel, sendo abandonados por falta de manutenibilidade e previsibilidade.

Para iniciantes: o Kernel como motor e o C como ferramenta

Imagine que o Kernel é o motor de um carro de corrida. Tudo tem que ser rápido, direto e confiável. Nesse cenário, o C é como uma chave inglesa precisa: simples, leve e eficaz.

Já o C++ pode ser comparado a um canivete suíço gigante, com dezenas de funções complexas, nem todas necessárias no meio de uma corrida.

No contexto do Kernel Linux, menos é mais.

Os bastidores do C++ Linux: a “tolerância” e o uso indireto

Apesar da aversão de Linus, existem áreas no ecossistema Linux onde C++ é tolerado ou inevitável:

Ferramentas em user space

Aplicativos como systemd, KDE Plasma, navegadores, compiladores e outros utilitários de desktop usam C++. Esses códigos não fazem parte do Kernel, e por isso estão fora das restrições impostas por Linus.

Bootloaders e toolchains

Componentes como o GRUB podem conter partes em C++. Da mesma forma, algumas bibliotecas de toolchains (LLVM/Clang) dependem fortemente de C++, mas estão restritas ao espaço de usuário.

eBPF e C++: uma oportunidade descartada

Mesmo subsistemas modernos como o eBPF (Extended Berkeley Packet Filter), que permitem rodar código em espaço de Kernel com segurança, rejeitaram o uso de C++. Os mantenedores preferem linguagens previsíveis, como C ou agora Rust, exatamente para evitar os riscos apontados por Linus.

O Rust no Kernel: a nova alternativa moderna

Diante da necessidade de maior segurança e modernização, uma nova linguagem entrou em cena: o Rust. A partir do Kernel 6.1, Linus aprovou oficialmente o uso de Rust para módulos específicos, com forte isolamento e validação.

Saiba mais no artigo Programação em Rust no Linux

Rust oferece:

  • Segurança de memória
  • Controle de concorrência
  • Baixo overhead
  • Ausência de exceções imprevisíveis

Ingo Molnár: Rust sim, C++ jamais

Segundo Ingo Molnár, um dos mais respeitados desenvolvedores do Kernel:

“Rust nos dá segurança sem o custo do C++” — uma crítica direta à complexidade e aos riscos da linguagem que Linus odeia.

Glossário analítico de termos técnicos

  • Kernel: O núcleo do sistema operacional. Controla o hardware e gerencia recursos como memória, processos e dispositivos.
  • C: Linguagem de programação procedural, criada nos anos 1970, amplamente usada em sistemas operacionais e embarcados.
  • C++: Linguagem orientada a objetos derivada do C, com suporte a abstrações, templates e gerenciamento automatizado de recursos.
  • RAII: Técnica em C++ onde objetos gerenciam recursos automaticamente. Problemática em contexto de Kernel.
  • ABI (Application Binary Interface): Interface binária entre dois módulos de software — fundamental para compatibilidade entre drivers e sistemas.
  • Template Metaprogramming: Recurso avançado de C++ que permite gerar código em tempo de compilação. Pode causar explosão de complexidade.
  • Rust: Linguagem moderna voltada à segurança e concorrência, agora adotada parcialmente no Kernel.
  • User space: Espaço do sistema operacional onde rodam aplicativos comuns, fora do controle direto do Kernel.

O legado da “linguagem Linus Torvalds odeia”: o impacto no desenvolvimento do Kernel

A rejeição ao C++ moldou profundamente o estilo de codificação do Kernel Linux:

  • Exige clareza, performance e previsibilidade
  • Evita abstrações desnecessárias
  • Valoriza desenvolvedores que entendem o funcionamento do hardware
  • Define uma cultura de engenharia pragmática, resistente a modismos

Linus não odeia C++ por esporte. Ele o faz por razões técnicas fundamentadas — e isso criou um legado de estabilidade, performance e confiabilidade que transformou o Linux no sistema operacional mais usado em servidores, supercomputadores e embarcados.

Conclusão

A relação entre Linus Torvalds e o C++ é uma das histórias mais emblemáticas da cultura de desenvolvimento open source. A linguagem Linus Torvalds odeia não é banida por capricho, mas por uma filosofia de simplicidade, controle absoluto e design limpo que moldou todo o ecossistema do Kernel.

O C++ no Kernel Linux é tolerado apenas em bordas periféricas — nunca no coração do sistema. E mesmo com o avanço de linguagens como Rust, o C segue sendo a espinha dorsal, porque, como diria o próprio Linus:

“Good programmers know what to write. Great ones know what to rewrite (and reuse).”
“Bons programadores sabem o que escrever. Grandes programadores sabem o que reescrever (e reutilizar).”

Compartilhe este artigo