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ística | C | C++ |
---|---|---|
Paradigma principal | Procedural | Orientado a objetos |
Gerenciamento de memória | Manual (malloc/free) | RAII, new/delete, smart pointers |
ABI | Estável e simples | Instável, dependente de compilador |
Abstrações | Baixas (struct, função) | Altas (classe, herança, template) |
Complexidade de compilação | Baixa | Alta (tempo e tamanho de binários) |
Compatibilidade com hardware | Direta | Requer camadas adicionais |
Exceções | Nã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).”