Christoph Hellwig, mantenedor do subsistema DMA, KVM, Slab Allocator e arquitetura PowerPC no núcleo Linux, que na sua época foi membro do comitê técnico da Linux Foundation e atuou como autor em um processo judicial relacionado ao GPL contra a VMware, recusou-se a validar patches relacionados ao suporte para desenvolvimento de drivers em Rust. Os patches propostos adicionavam uma camada sobre várias funções do subsistema DMA, permitindo o uso de DMA em drivers escritos em Rust.
Como razão para a recusa, foi mencionada a complexidade da manutenção do código quando há camadas em outras linguagens e o desejo de manter as interfaces de programação para DMA em um formato legível em C, sem confusão devido a camadas obscuras. Christoph sugeriu que os desenvolvedores acessassem diretamente a API original de C do DMA em cada driver escrito em Rust, para evitar a criação de abstrações adicionais das quais os mantenedores do núcleo teriam que depender.
Os desenvolvedores dos patches afirmaram que assumiriam toda a responsabilidade pela manutenção do código em Rust, estavam prontos para acompanhar esses patches de forma independente e colocaram as camadas em um subdiretório separado (rust/kernel/dma.rs). Em resposta, Christoph vetou os patches relacionados ao Rust ("Nacked-by") e indicou que não queria mais um mantenedor. Christoph declarou que, se os desenvolvedores das camadas desejam tornar a manutenção do Linux impossível devido à mistura de várias linguagens em uma base de código, eles devem fazer isso em seus próprios drivers, e não espalhar esse tumor para os subsistemas principais do núcleo.
Christoph também esclareceu que não tem nada contra a linguagem Rust e a considera uma das melhores linguagens novas, mas é contra a mistura de código em diferentes linguagens. Segundo Christoph, ele é a favor da criação de novos projetos em Rust, mas contra a integração do Rust em grandes bases de código em C, pois essa mistura reduz drasticamente a conveniência da manutenção do núcleo como um projeto integrado.
A essência dos problemas de suporte está no fato de que as ligações em Rust colocam os mantenedores dependentes do código em Rust. À primeira vista, parece que as ligações são apenas camadas sobre estruturas e funções em C, que não afetam o desenvolvimento e a manutenção do código em C. Mas não é assim. Com essas ligações, os desenvolvedores de subsistemas escritos em C devem considerar o impacto de suas alterações na continuidade do funcionamento das ligações. Qualquer modificação nas estruturas de dados ou nas funções internas em C pode exigir mudanças no código das ligações, portanto, as alterações relevantes no código em C precisam ser monitoradas e sincronizadas com o código em Rust. Muitos mantenedores não estão prontos para assumir a responsabilidade adicional de corrigir problemas que surgem no código em Rust e não pretendem gastar seu tempo monitorando o estado das ligações em Rust.
A situação de complicação da manutenção não é apenas teórica. A discussão foi enriquecida por Jason Gunthorpe, mantenedor do TPM, VFIO e Infiniband da NVIDIA, que trouxe um exemplo do rechaço, por Linus Torvalds, de uma solicitação de pull com alterações no subsistema de gerenciamento de memória, pois essa alteração causava falhas ao tentar compilar o kernel com suporte a Rust. A falha ocorreu porque os mantenedores do código em Rust não adicionaram as mudanças necessárias no gerador de ligações (bindgen). Assim, os mantenedores do subsistema de gerenciamento de memória, ao promover uma mudança totalmente correta do ponto de vista do código em C e do kernel em geral, tornaram-se dependentes de um código opcional de terceiros no kernel, pelo qual outras pessoas são responsáveis.
A recusa em aceitar o código de ligações sobre chamadas DMA colocou os desenvolvedores do projeto Rust for Linux em um impasse, já que sem essas ligações o desenvolvimento de drivers completos em Rust se tornaria difícil. Hector Martin, mantenedor do código para suporte a chips ARM da Apple e líder do projeto Ashai Linux, como uma alternativa para resolver o conflito, sugeriu obter a aprovação da ligação diretamente através de Linus Torvalds, contornando o mantenedor do subsistema DMA. Se Linus concordar com essa violação de subordinação e prática estabelecida, isso pode levar a uma crise na gestão do desenvolvimento do kernel, e se recusar — poderá interromper o avanço do Rust no kernel.
Como alternativa, Hector mencionou a responsabilização de Christoph por violar o código de conduta devido a um comentário no qual Christoph comparou Rust a um câncer. Além disso, Hector escreveu que estava cansado de toda a burocracia, não estava disposto a confiar nos processos estabelecidos e insinuou o envolvimento das redes sociais. Dave Airlie, mantenedor do subsistema DRM, aconselhou a não inflacionar o conflito e a entender que comportamentos tóxicos são inaceitáveis de ambos os lados, independentemente de quem esteja certo ou errado na discussão.
Linus Torvalds se juntou à discussão, apontando que o problema pode estar em Hector e sua autoconfiança de que ele sabe algo melhor que os outros, e não no atual processo de desenvolvimento do kernel, que funciona. O processo de desenvolvimento do kernel tem problemas, mas essa é a realidade — nada na vida é perfeito. Tentativas de assédio através das redes sociais é algo que afasta Linus da abordagem de Hector. Para Linus, o que importa são discussões técnicas e patches, não pressão através das redes sociais.
Em resposta, Hector enviou um pedido para se remover da manutenção da plataforma ARM/APPLE, pois ele perdeu a fé no processo de desenvolvimento e na abordagem de gerenciamento da comunidade no kernel. Ele também declarou que o desenvolvimento da plataforma ARM/Apple continuará fora do núcleo do Linux. A plataforma ARM/Apple ainda tem outro mantenedor no kernel — Sven Peter, que pretende continuar a manter a plataforma no núcleo.
Fonte: opennet.ru
