Linguagem de programação Rust passa por testes no KernelCI

Linguagem de programação Rust passa por testes no KernelCI
Collabora traz inicialização multi GPU sem oscilação e decodificador Rockchip H.264 para o Linux 5.15

Depois de esperar na árvore de integração Linux-next por cerca de 18 meses, a infraestrutura Rust básica finalmente chegará ao kernel Linux principal com o lançamento da versão 6.1. Embora isso não inclua nenhum driver de dispositivo real e apenas alguns módulos de amostra, outras ligações específicas do subsistema com drivers reais devem ser adicionadas no futuro. Assim, na atual fase, a linguagem de programação Rust passa por testes no KernelCI.

Durante o Linux Maintainers Summit de 2022 em Dublin, Linus Torvalds pediu aos sistemas de CI que começassem a testar a nova infraestrutura Rust. Portanto, com isso em mente, temos o prazer de anunciar que, a partir de hoje, o teste Rust foi adicionado ao KernelCI !

Aqui está uma breve revisão do estado atual do Rust no lado do kernel (que já está bem documentado em LWN.net, ou seja, neste artigo ou neste artigo focado na v6.2 ), juntamente com uma olhada no status atual e nos planos futuros no lado do projeto KernelCI, com alguns exemplos.

Em relação ao kernel

Apenas uma versão específica (atualmente v1.62) do compilador Rustc baseado em LLVM (abreviado: rustc) é suportada – versões posteriores podem funcionar, mas não são garantidas. O trabalho ainda está em andamento no front-end GCC Rust, então, por enquanto, construir o kernel do Linux com Rust requer LLVM. Também vale a pena mencionar que apenas a arquitetura x86_64 é suportada por enquanto.

O kernel fornece um comando útil make LLVM=1 rustavailable para verificar se a distro do host possui as dependências necessárias, que imprime um bonitinho Rust is available!se uma cadeia de ferramentas adequada estiver instalada, caso contrário, a causa da falha. Também é possível verificar a presença da dependência da cadeia de ferramentas por meio da configuração do kernel CONFIG_RUST_IS_AVAILABLE=you CONFIG_HAVE_RUST=y para ver se a arquitetura suporta Rust.

Sobre o KernelCI

Linguagem de programação Rust passa por testes no KernelCI

O KernelCI tem um design modular onde várias cadeias de ferramentas podem ser usadas com várias combinações de árvores de kernel e arquivos/fragmentos .config. Ele pode ser integrado ao LAVA para testes de inicialização e tempo de execução em várias placas e assim por diante.

Cada cadeia de ferramentas usada pelo KernelCI é autocontida em uma imagem docker para reprodutibilidade, construída com kci_docker . Como o kci_docker já contém algumas definições básicas, foi uma tarefa fácil definir uma cadeia de ferramentas rustc extra sobre as versões existentes da cadeia de ferramentas clang. Se o GCC-Rust se tornar utilizável, por exemplo, será igualmente trivial adicionar um Dockerfile separado e começar a testar todas as árvores, configurações e placas do kernel com a nova cadeia de ferramentas.

Para criar e usar a imagem do contêiner KernelCI rustc-1.62, primeiro especifique um arquivo de configuração para evitar passar todas as opções por meio de argumentos de linha de comando.

Linguagem de programação Rust passa por testes no KernelCI

Um desafio interessante para as compilações do docker rustc foi o fato de que o método Rust padrão de instalação de cadeias de ferramentas curl https://sh.rustup.rs | shpode ser adequado para o desenvolvimento local individual, mas é uma ideia particularmente ruim em um sistema de CI automatizado. O próprio Rustup (ainda) não faz nenhuma verificação de assinatura para seus downloads.

Distros como o Debian não fornecem a versão exigida pelo kernel (v1.62), nem mesmo enferrujam em alguns casos, e é improvável que os mantenedores da distro mantenham as versões sincronizadas com o kernel principal, que provavelmente se tornará um alvo móvel. Felizmente, o projeto Rust fornece instaladores independentes junto com assinaturas GPG que são muito úteis para CI.

O futuro

Ainda é incerto qual será o futuro do Rust no kernel do Linux em geral e qual será a adoção da comunidade pelo Rust dentro do projeto. A base de código ainda está em seus estágios iniciais de experimentação e alguns tópicos são controversos.

No entanto, planejamos ajudar a testar o código Rust por meio do KernelCI e é por isso que estamos adicionando testes de compilação antecipadamente.

Daqui para frente, planejamos adicionar testes kunit, mais combinações de cadeia de ferramentas e Kconfig, GCC-Rust quando estiver pronto, estender o teste para cobrir mais subsistemas e arquiteturas (conforme forem adicionados) e talvez, se as estrelas se alinharem, até mesmo faça testes de inicialização e tempo de execução, bisseções e similares para drivers implementados em Rust.

Para mais detalhes, acesse esta postagem da Collabora.