Kernel Linux mescla primeiro driver de rede Rust de produção, marcando um ponto de viragem

Tecnologia·4 min de leitura
A dark terminal screen showing Linux command-line output with green text

O kernel Linux atingiu um marco que os defensores da programação de sistemas com segurança de memória esperavam há anos: a fusão do primeiro driver de rede com qualidade de produção escrito inteiramente em Rust. O driver, que suporta controladores Gigabit Ethernet da família Realtek RTL8169, foi incorporado à árvore principal do kernel esta semana e deve ser fornecido com o Linux 6.14.

Um longo caminho até este ponto

O suporte Rust foi inicialmente adicionado ao kernel Linux na versão 6.1, lançada em dezembro de 2022. Na época, a infraestrutura era experimental — as abstrações, ligações e integrações de sistema de construção necessárias ainda estavam sendo desenvolvidas. O código inicial do Rust no kernel era limitado a módulos simples de prova de conceito e utilitários auxiliares.

Nos últimos três anos, um grupo dedicado de desenvolvedores construiu continuamente a infraestrutura Rust-for-Linux. Abstrações seguras sobre os principais subsistemas do kernel – alocação de memória, primitivos de bloqueio, modelo de dispositivo e rede – foram desenvolvidas, revisadas e refinadas através de dezenas de ciclos de lançamento do kernel.

O driver RTL8169 representa o culminar deste trabalho: um driver real, de envio, que lida com hardware real em sistemas de produção.

Por que a ferrugem no kernel é importante

O kernel do Linux é escrito quase inteiramente em C, uma linguagem que não oferece proteção integrada contra bugs de segurança de memória. Ao longo dos mais de 30 anos de história do kernel, inúmeras vulnerabilidades de segurança resultaram de buffer overflows, erros de uso após liberação e outros problemas de segurança de memória.

O modelo de propriedade e o sistema de tipos do Rust evitam categorias inteiras desses bugs em tempo de compilação. Um driver Rust que compila com sucesso está, por construção, livre de corridas de dados e da maioria dos erros de segurança de memória. Para uma base de código tão crítica quanto o kernel Linux – que roda em tudo, desde telefones até supercomputadores e até a Estação Espacial Internacional – esta garantia é extremamente valiosa.

O driver RTL8169

A família de controladores Ethernet Realtek RTL8169 foi escolhida deliberadamente. O hardware está amplamente disponível, bem documentado e já possui um driver C maduro no kernel, fornecendo uma base direta para comparação.

A implementação do Rust foi desenvolvida principalmente por uma equipe do Open Source Group da Samsung, com contribuições de desenvolvedores do Google, da Microsoft e da comunidade mais ampla do Rust-for-Linux. O driver implementa o conjunto completo de recursos do driver C existente, incluindo descarregamento de hardware, suporte a VLAN e gerenciamento de energia.

Os benchmarks preliminares mostram que o driver Rust tem um desempenho dentro de 2% da implementação C em testes de rendimento e latência. A versão Rust tem aproximadamente 15% mais linhas de código, o que os desenvolvedores atribuem ao tratamento de erros mais explícito do Rust e à sobrecarga de abstrações seguras. No entanto, eles observam que o driver Rust não exigiu nenhuma iteração para corrigir problemas de segurança de memória durante a revisão, enquanto o driver C original acumulou mais de 40 correções de bugs relacionados à memória desde sua introdução.

Resposta da comunidade

A fusão reacendeu o debate dentro da comunidade do kernel. Linus Torvalds, que tem apoiado cautelosamente o Rust no kernel, comentou na lista de discussão que o driver "parece sólido" e que o objetivo sempre foi provar que o Rust pode funcionar junto com o C no código de produção.

Nem todo mundo está entusiasmado. Vários mantenedores veteranos do kernel expressaram preocupação com a carga de manutenção do suporte a duas linguagens, a curva de aprendizado dos contribuidores existentes e a imaturidade das abstrações do kernel do Rust. Alguns mantenedores de subsistemas declararam que não aceitarão código Rust em suas áreas até que as ferramentas e as abstrações estejam mais maduras.

O que vem a seguir

A equipe Rust-for-Linux traçou um roteiro ambicioso. Os drivers de GPU são um alvo de alta prioridade, com o projeto Nova desenvolvendo um driver baseado em Rust para GPUs NVIDIA usando a interface de firmware GSP de código aberto. Drivers de sistema de arquivos e componentes de subsistema USB também estão em desenvolvimento ativo.

O Google comprometeu recursos de engenharia para desenvolver drivers Rust para hardware relevante para Android, e a Microsoft está contribuindo com abstrações Rust para drivers convidados do Hyper-V.

O panorama geral

A fusão de um driver Rust de produção não significa que o kernel do Linux está sendo reescrito em Rust. A grande maioria do kernel permanecerá C no futuro próximo. O que isso significa é que novos drivers e subsistemas agora podem ser escritos em uma linguagem que evita classes inteiras de vulnerabilidades, e a infraestrutura para dar suporte a isso está pronta para produção.

Para a indústria de software mais ampla, a adoção do Rust pelo kernel Linux valida a adequação da linguagem para os ambientes de programação de sistemas mais exigentes. É um sinal de que a segurança da memória não é apenas algo bom de se ter – ela está se tornando uma expectativa, mesmo nas bases de código com desempenho mais crítico do planeta.

Partilhar

Artigos Relacionados