11 pontos por GN⁺ 2025-02-21 | 24 comentários | Compartilhar no WhatsApp

Por que o Rust deve ser introduzido no kernel Linux

  • Com base na experiência de ter analisado quase todas as correções de bugs e problemas de segurança do kernel Linux nos últimos 15 anos, ele defende a necessidade de adotar Rust
  • Nem todas as correções de bugs são refletidas na árvore de versões estáveis, mas, em geral, as mais importantes são, e ele está em uma posição de verificar todos os CVEs do kernel

Os limites de C e as vantagens de Rust

  • A maior parte dos bugs que ocorrem no kernel Linux vem de limitações estruturais da linguagem C
  • Em especial, há muitos bugs causados por erros simples, e esses problemas quase não acontecem em Rust
    • Sobrescrita de memória (Rust não captura todos os casos, mas pode resolver uma parte considerável)
    • Problemas de limpeza no caminho de erro
    • Verificações ausentes de valores de erro
    • Bugs de use-after-free (uso após liberação)
  • Ao introduzir Rust no kernel, desenvolvedores e mantenedores podem deixar de lado esses erros básicos e se concentrar nos problemas realmente difíceis (erros lógicos, condições de corrida etc.)

A base de código existente em C também precisa continuar sendo mantida

  • Atualmente, o kernel Linux é composto por mais de 30 milhões de linhas de código em C, e substituí-las por Rust no curto prazo é impossível
  • Portanto, o trabalho de reforço de segurança do código C realizado por desenvolvedores como Kees e Gustavo é essencial e deve continuar
  • O ideal não é que Rust substitua o código existente, mas sim escrever código novo (especialmente drivers) em Rust para reduzir problemas

A segurança de APIs oferecida por Rust

  • Rust permite projetar APIs internas do kernel de forma mais segura e mais fácil de usar
  • Hoje, as APIs do kernel baseadas em C são complexas, propensas a erros e frequentemente exigem revisão minuciosa por parte dos mantenedores
  • Por exemplo, há várias formas de usar com segurança estruturas como struct cdev, e aproveitar isso corretamente exige muita experiência
  • Com Rust, é possível definir APIs com mais clareza, o que reduz bastante a chance de erro por parte dos desenvolvedores
  • Isso não beneficia apenas usuários de Rust, mas também representa uma mudança útil para quem usa o código C existente

Contestando as preocupações de que adotar Rust será difícil

  • Rust não é uma solução mágica → mas pode resolver uma parte significativa dos problemas existentes
  • Aumento da carga sobre os mantenedores → mas os próprios desenvolvedores que querem adotar Rust estão fazendo o trabalho
  • Dificuldade de manter uma base de código em linguagens mistas → mas o kernel Linux já resolveu problemas muito mais difíceis até hoje

Conclusão

  • O Linux é uma ferramenta usada por inúmeros desenvolvedores no mundo todo para resolver problemas, e
  • agora, se há desenvolvedores pedindo a possibilidade de escrever código seguro para hardware, isso não deve ser ignorado
  • O modelo de desenvolvimento do Linux cresceu em uma escala que ninguém previa e demonstrou uma capacidade de engenharia extraordinária
  • Agora é hora de avançar com a adoção de Rust para os próximos mais de 20 anos de evolução

É preciso acolher novas tecnologias e ideias e trabalhar para que elas tenham sucesso junto com a comunidade.

24 comentários

 
bus710 2025-02-23

A adoção de Rust provavelmente é uma mudança difícil de evitar quando se considera memory safety. Talvez tentem costurar tudo de novo por meio de algum meio-termo adequado.

Mas, pessoalmente, as palavras-chave de Rust não entram muito bem na minha cabeça, e quando volto a vê-las depois de um tempo também não consigo me lembrar direito, então acabo não conseguindo pegar gosto pela coisa ;;;; Sei que todas são necessárias, mas às vezes parece decorar à força verbos irregulares do inglês. Ainda assim, também é verdade que os produtos feitos em Rust acabam causando menos problemas na prática.....

 
lostid 2025-02-22

Fico pensando se é realmente algo tão condenável assim não querer incluir no kernel uma linguagem que ainda não amadureceu. Se você procurar agora mesmo pessoas ao seu redor que dominem Rust, quase não vai encontrar, não é? Parece que não seria tarde demais incluí-la quando a linguagem estiver mais madura e já tiver conquistado uma base de usuários suficiente, mesmo que não chegue ao nível das linguagens legadas. Acredito que a utilidade da linguagem Rust pode ser comprovada o suficiente mesmo sem ser aplicada ao kernel Linux.

 
pcpenpal 2025-02-22

Já é surpreendente que Rust, mesmo no estágio em que está hoje, ainda seja chamada de “uma linguagem ainda não madura”, mas, à parte disso, fico pensando se realmente merece tanta crítica a ideia de ao menos tentar reduzir, no kernel, a dependência de linguagens inseguras. Não é como se houvesse tantas pessoas ao nosso redor capazes de escrever código seguro em C com proficiência suficiente para contribuir para o kernel, certo? Em vez de esperar mais amadurecimento do C, parece que agora, quando as exigências de uma nova era já estão suficientemente estabelecidas, ainda não é tarde.

Rust já é útil, e tentar incluí-la no kernel provavelmente não é para provar essa utilidade.

 
aer0700 2025-02-22

Quando decidiram adotar Rust pela primeira vez, imagino que deve ter havido alguma discussão sobre isso.
Se pensar em qual dos dois grupos é maior, entre os especialistas em C e em Rust, C acaba sendo esmagadoramente maior.
Também fico pensando se, para um programador que já tem todo o conhecimento de domínio, aprender mais uma linguagem é realmente algo tão grande assim,
mas o nível de proficiência exigido de quem trabalha com kernel já é outra história...

 
roxie 2025-02-22

Também achei essa opinião boa.

 
nemo1275 2025-02-21

Não entendo nem um pouco a afirmação de que ele deveria fazer um fork e ir embora. Afinal, por que cargas d'água o Linus teria que fazer um fork do Linux e sair?

 
regentag 2025-02-22

Tem alguém mandando o Linus pegar o fork e ir embora? Acho que não vi ninguém dizendo isso nesta discussão..

 
cloverhearts 2025-02-21

Eu também sou usuário de Rust, mas se código Rust e código C ficarem misturados, sem regras rigorosas em projetos open source sobre até que ponto o código Rust é permitido, isso me parece impossível de controlar ou, no mínimo, elevaria enormemente os custos de revisão e manutenção. Acho que a escolha mais sensata é fazer um fork sem adicionar isso.

 
aer0700 2025-02-21

Não entendo muito de kernel, mas acho que seria ótimo se fosse possível traduzir automaticamente código C para Rust. Claro, além do problema da tradução de código, também haveria a questão humana.

 
regentag 2025-02-21

Se há tantas pessoas querendo introduzir Rust no kernel, elas não poderiam fazer um fork e seguir com um novo projeto? Depois, quando ele amadurecesse o suficiente, as principais distribuições poderiam migrar para um kernel baseado em Rust.
Não entendo muito bem por que estão brigando entre si.

 
gurugio 2025-02-21

Não sei ao certo se o senhor tem experiência com desenvolvimento de kernel, então não sei muito bem como devo responder, mas
antes de tudo, aplicar a linguagem Rust não significa mudar o kernel para Rust. Dá para perguntar se não seria melhor separar e criar outro kernel, mas
não se trata de fazer um kernel em Rust; a ideia é criar wrappers em Rust apenas para a interface de drivers de dispositivo no kernel, para que somente os drivers de dispositivo
possam ser feitos em Rust. Portanto, seguir como um novo projeto não faz sentido.

 
regentag 2025-02-21

Nunca desenvolvi nada para o lado do Linux.
Pelo visto, o wrapper em Rust para drivers de dispositivo tem uma estrutura que não pode ser separada do kernel...

 
mammal 2025-02-21

É bem irônico que a comunidade Linux, que vinha justificando um tom tóxico em nome da estabilidade do kernel, agora considere a reação de "se não gostou, faz um fork" como uma resposta razoável.

 
regentag 2025-02-21

Eu não faço parte da comunidade Linux, mas...

 
roxie 2025-02-21

Acho que não se deve considerar essas pessoas e o autor deste comentário como pertencentes à mesma comunidade.

 
jeiea 2025-02-21

Acho que pode haver uma dificuldade em prever se o resultado do fork vai acabar sendo uma migração ou um período caótico de fragmentação.
Mesmo depois do fork, refletir as mudanças do upstream provavelmente não vai ser uma situação muito agradável.

 
savvykang 2025-02-21

https://pt.news.hada.io/topic?id=16860
Ao ver que o fork do Realtime Linux foi incorporado depois de 20 anos, acho que não deveríamos decidir por um fork sem muito cuidado

 
regentag 2025-02-21

Eu estava falando isso ao ver isso.
Porque foi possível manter por muito tempo as funcionalidades em tempo real como um projeto separado do kernel, e quem precisasse podia pegar, aplicar ao kernel e usar.

 
ilsubyeega 2025-02-21

Embora eu seja usuário de Rust, achei impressionante o comentário de hgwxx7_ no r/rust1.

Acho que o que Greg faz muito bem aqui é demonstrar liderança técnica. Liderança não significa estar certo. Ele está certo, mas esse não é o ponto.

Liderança significa trazer as pessoas junto no caminho que ele considera o melhor. Ele não estala o chicote, repreendendo ou coagindo mantenedores que discordam. Em vez disso, primeiro reconhece as preocupações muito válidas deles sobre manter uma base de código com duas linguagens. Isso é bom, porque eles estão certos quanto a isso: a vida deles realmente fica mais difícil antes de ficar mais fácil.

Depois, ele termina em um tom inspirador, apontando que eles já fizeram coisas muito mais difíceis e que isso está totalmente dentro das capacidades deles. Ele os incentiva gentilmente a acolher os desenvolvedores de R4L.

Uma verdadeira aula magna de liderança.
Não sei se os outros mantenedores ficarão convencidos quando lerem isso. Mas é difícil para mim imaginar uma argumentação mais convincente do que esta.

 
gurugio 2025-02-21

Lembro que, quando era preciso fazer backport para a versão stable ou algo assim e eu entrava em contato, ele sempre respondia bem mesmo no meio de toda aquela correria.

 
codemasterkimc 2025-02-21

"Rust não é a resposta certa, mas está mais perto da resposta certa do que Java e Python" -codemaster kimc-

 
GN⁺ 2025-02-21
Comentários do Hacker News
  • Se houver bindings em Rust, a ABI interna do kernel não poderá evoluir livremente, e há o risco de o projeto se dividir entre um núcleo em C e um lado em Rust. No entanto, se a API interna se estabilizar, isso pode beneficiar o Linux
  • A comunidade e as pessoas são a principal questão. Se as pessoas que hoje trabalham no kernel não gostarem dessa direção, isso é um grande problema
  • A liderança do Linux não parece estar focando na questão das pessoas. Fica a dúvida de onde está a evidência de que quem atualmente desenvolve o kernel concorda com essa direção
  • Há quem pense que adotar Rust traz mais sofrimento do que benefícios. Também acreditam que seria possível obter os ganhos de outras formas
    • Por exemplo, simplificações básicas de alocação/liberação, como bounds checking e RAII, podem ser possíveis sem Rust
    • Tornar o Clang o compilador obrigatório e adotar essas extensões poderia facilitar a obtenção desses efeitos
  • Escrever novo código/drivers em Rust evita esse tipo de bug. Isso beneficia todo mundo
  • A maioria das pessoas quer segurança de memória, mas não quer se tornar mantenedora de tudo
  • O objetivo real do projeto é modernizar a superfície da API interna do kernel. O quanto essa API escrita em Rust é suportável é a melhor métrica para medir o progresso
  • Como alguém que viu quase todas as correções de bugs do kernel e problemas de segurança nos últimos 15 anos, a maioria dos bugs surge de pequenos corner cases de C. Em Rust, esses problemas desaparecem
  • Escrever novo código/drivers em Rust evita esse tipo de bug. C++ não oferece esses benefícios
  • Rust torna quase impossível errar ao definir APIs do kernel. Isso torna o Linux melhor de forma geral
  • Os bindings em Rust parecem mágicos, mas há disposição para aprender e colaborar com os desenvolvedores
  • Rust não é uma bala de prata que resolve todos os problemas, mas ajuda em muitos aspectos
  • Linux é uma ferramenta para que todos resolvam problemas. Queremos que esses bugs não aconteçam quando desenvolvedores escrevem código para hardware
  • Uma base de código com linguagens mistas é difícil de manter, mas somos desenvolvedores de kernel. Precisamos aceitar novas ideias e tentar ter sucesso juntos
  • Esta declaração era necessária para fazer essa discussão avançar
  • Há foco nas vantagens técnicas, mas sem avaliar adequadamente o esforço de aprender uma nova linguagem de programação/toolchain
  • Dominar uma nova linguagem de programação não é algo fácil, e alguns mantenedores podem não querer isso por interesse/motivação pessoal
  • A questão do comitê da linguagem C++ aponta que todos deveriam abandonar essa linguagem o quanto antes
 
hbahk42 2025-02-22

Não dá para denunciar comentários de ódio como este?

 
kodingwarrior 2025-02-22

Concordo.