Saiu nesta semana um artigo que circulou pelos fóruns dos programadores sérios, daqueles que ainda leem código em vez de copiar e colar saída de modelo de linguagem, e o título já é uma declaração de guerra: tudo em C é comportamento indefinido. O autor não está fazendo poesia. Está descrevendo, com a frieza de quem já apanhou demais do compilador, o estado real de uma linguagem que nasceu nos laboratórios da Bell em mil novecentos e setenta e dois e que, contra todas as previsões dos profetas do progresso, continua sendo a fundação invisível sobre a qual repousa o sistema operacional do seu celular, o navegador que você usa para ler isto e até o firmware da torradeira inteligente que ninguém pediu.

O problema é o seguinte. Existe na especificação da linguagem uma categoria perversa chamada undefined behavior, comportamento indefinido, que significa, em bom português, que o compilador tem licença poética para fazer literalmente qualquer coisa quando seu código tropeça em certas armadilhas. Estourou um inteiro com sinal? Comportamento indefinido. Leu uma variável não inicializada? Comportamento indefinido. Desreferenciou um ponteiro nulo? Comportamento indefinido. E a graça macabra é que os compiladores modernos, otimizadores agressivos, partem do pressuposto de que o programador jamais escreveria tal abominação, e a partir dessa fé cega na competência alheia produzem binários que apagam código inteiro, invertem condicionais e teletransportam o fluxo de execução para galáxias distantes.

Quem trabalha com código de verdade sabe que isso não é uma curiosidade acadêmica. É a raiz de praticamente toda vulnerabilidade séria de segurança das últimas três décadas. Os buffer overflows que derrubaram bancos, os vazamentos de memória que entregaram chaves criptográficas a serviços de inteligência estrangeiros, os zero days vendidos a peso de ouro em mercados que ninguém quer admitir que existem, tudo isso brota do mesmo pântano. E o pântano continua lá porque desmontá-lo significaria reescrever literalmente o mundo digital, da BIOS ao kernel, do driver de impressora ao sistema bancário, e ninguém tem coragem, capital nem disposição para encarar a empreitada.

A reação previsível dos entusiastas das linguagens modernas foi o coro de sempre, dizendo que basta migrar tudo para Rust, ou Zig, ou alguma outra promessa luminosa, e o problema some. Doce ilusão de quem nunca precisou portar um milhão de linhas de código legado escrito ao longo de quatro décadas por pessoas que em sua maioria já estão aposentadas, mortas ou simplesmente sumiram. A infraestrutura civilizacional não se reescreve por decreto. Construiu-se durante gerações, mantém-se por inércia e só desaba quando alguém comete o erro de mexer no que estava funcionando. É a mesma lógica das catedrais medievais, que ninguém ousaria demolir só porque a engenharia moderna sabe fazer arco mais eficiente.

Há ainda um ângulo que poucos comentam e que merece atenção. A linguagem C é gratuita, aberta, sem dono, sem CEO marketando palco com tênis caro, sem ações em bolsa. Construiu-se em silêncio, foi adotada porque funcionava, e sustenta hoje uma quantidade colossal de valor econômico que jamais retornou um centavo aos seus criadores originais. Compare isso com o circo das linguagens patrocinadas pelas grandes corporações, criadas para amarrar desenvolvedor a ecossistema proprietário, e você começa a entender por que a tal turma que adora dar palpite sobre o futuro da computação prefere fingir que o problema do comportamento indefinido é apenas técnico. Não é. É também político, e por isso ninguém quer mexer.

A lição que fica para quem programa, e para quem apenas usa, é desconfortável mas necessária. O mundo digital em que vivemos é uma construção precária, sustentada por um alicerce que qualquer engenheiro civil consideraria fora de norma, e que só não desaba porque um exército mal pago de mantenedores anônimos passa as madrugadas remendando vazamentos. Da próxima vez que algum executivo subir num palco para anunciar a próxima revolução baseada em modelo de linguagem treinado em datacenter trilionário, lembre-se de que a tal revolução roda, em última instância, sobre código C cheio de comportamento indefinido escrito nos anos noventa por alguém que provavelmente já se aposentou.

Com informações da Hacker News. A análise e opinião são do O Algoz.