Todos nós sabemos que o Linux é escrito em C. O que você pode não saber é que ele é escrito em um dialeto C há muito desatualizado: A versão de 1989 do padrão da linguagem C, C89. Isso também é conhecido como ANSI X3.159-1989, ou ANSI C. Agora, o principal responsável pelo desenvolvimento do kernel Linux, Linus Torvalds decidiu que já basta e irá mover o C oficial do Linux para o padrão C11 de 2011.
Porém, engana-se quem pensa que esta é uma grande transição. C89 ainda tem suporte quase universal. Como qualquer compilador C é compatível com versões anteriores, você não terá problemas para compilar ou executar um programa C89. Portanto, um compilador compatível com C11 não terá problemas com nenhum código antigo do C89.
No entanto, a alteração que está sendo feita não inclui recursos úteis que aparecem em versões mais recentes.
Linus Torvalds resolve modernizar o kernel Linux
A situação chamou a atenção de Torvald quando, para corrigir um potencial problema de segurança com as funções de execução especulativa primitiva de lista vinculada do kernel, outro problema foi revelado no patch. Enquanto corrigia isso, Torvalds percebeu que em C99 o iterador passado para as macros de passagem de lista deve ser declarado em um escopo fora do próprio loop.
Torvalds escreveu para a Linux Kernel Mailing List (LKML) que “toda a razão pela qual esse tipo de bug não especulativo pode acontecer é que historicamente não tínhamos variáveis de declaração no estilo C99 em loops”. Então, a list_for_each_entry() – e todos os outros – fundamentalmente sempre vaza a última entrada HEAD do loop, simplesmente porque não poderíamos declarar a variável do iterador no próprio loop.”
Por fim, mude de C89 para um padrão C mais recente que faça com que esse tipo de problema não ocorra. Então, “chegou a hora de olhar para a mudança para o padrão C99. No entanto, ele tem mais de 20 anos, porém, é pelo menos recente o suficiente para permitir declarações de variáveis em nível de bloco”.
O desenvolvedor do kernel Linux, Arnd Bergmann, concordou que isso era factível. Ele acrescentou que deve ser possível passar para o padrão C11 de 2011. Como o C99 nunca foi tão popular e o C11 introduziu o suporte a multithreading padronizado e tornou a linguagem um pouco mais segura, isso parece uma boa jogada.
Este também seria um movimento fácil de fazer. O compilador C mínimo do kernel do Linux, GCC versão 5.1, já suporta C11. Segundo Torvalds, isso deve funcionar de forma satisfatória. “Eu realmente adoraria finalmente seguir em frente com isso, considerando que está se formando há muitos anos”.
Quando haverá a mudança?
Então, depois de certificar-se de que o novo padrão C funcionaria sem problemas no kernel, Torvalds decidiu puxar o gatilho. “Vamos tentar isso no início da janela de mesclagem 5.18.” Como a janela de mesclagem do 5.18 está quase chegando, podemos ter código C11 no kernel já em março.
No entanto, nem tudo está garantido. Assim, o desenvolvedor do kernel Linux e jornalista Jonathan Corbet adverte: “Vale a pena ter em mente, porém, que muitas coisas podem acontecer entre a janela de mesclagem e a versão 5.18. Mudar para uma nova versão do padrão de linguagem pode revelar muitas surpresas em lugares obscuros no kernel; não seriam necessários muitos deles para fazer com que a mudança fosse revertida por enquanto. Entretanto, se tudo correr bem, a mudança para C11 acontecerá na próxima versão do kernel.”
Via ZDNet