O futuro do driver Nouveau parecia promissor depois que a NVIDIA lançou módulos de kernel de GPU de código aberto.
Enquanto isso refletia no progresso da Nouveau, o desenvolvimento desacelerou, especialmente, com o mantenedor da Nouveau renunciando no ano passado logo após habilitar o suporte a GSP (GPU System Processor) com a Nvidia.
E, parece agora que a equipe de drivers da Red Hat está de volta à pista com algo mais interessante: Nova, um substituto moderno para o Nouveau. Danilo Krummrich, engenheiro de software da Red Hat, anunciou o projeto em uma lista de discussão.
Nova: um driver baseado em Rust para a equipe verde
Nova é um driver GSP baseado em Rust para GPUs Nvidia. Pretende ser o sucessor do Nouveau quando estiver pronto.
Claro, uma das razões para a Red Hat pensar em um sucessor é porque o principal mantenedor do Nouveau renunciou.
Danilo mencionou que com este projeto eles querem trabalhar para um driver simplificado (mas moderno) quando comparado ao Nouveau:
Com o Nova vemos a chance de diminuir significativamente a complexidade do driver em comparação com o Nouveau por dois motivos. Primeiro, a arquitetura histórica do Nouveau, especialmente em torno de nvif/nvkm, é bastante complicada e inflexível e requer um grande retrabalho para resolver certos problemas (como bloquear a hierarquia no código VMM / MMU para VM_BIND atualmente sendo resolvido com uma solução alternativa) e segundo, com um driver somente GSP, não há necessidade de manter a compatibilidade com o código pré-GSP.
Além disso, a Red Hat parece estar constantemente trabalhando em mais código Rust e otimizações em suas ofertas Linux.
Então, não é uma surpresa para eles querer o driver construído com Rust agora que o kernel Linux está adicionando lentamente componentes Rust.
Claro, considerando como um projeto ambicioso, ele tem seus defeitos, o grande deles é:
Com a escolha de Rust, o primeiro problema a ser resolvido são as abstrações de ligação C ausentes para a infraestrutura integral do kernel (por exemplo, abstrações de dispositivo/driver). Como este é um pouco um problema de galinha e ovo - precisamos de um usuário para abstrações upstream, mas também precisamos das abstrações para criar um driver - queremos desenvolver Nova upstream e começar com apenas um stub de driver que só faz uso de algumas abstrações básicas de Rust.
Assim, a abordagem para o projeto será através de três ramificações primárias onde o driver Nova stub (um módulo) depende de PCI e ramificações de dispositivos.
Você pode dar uma olhada no repositório hospedado na seção de desenvolvimento gráfico do kernel do Freedesktop.
Embora tudo isso pareça legal, é uma tarefa desafiadora para os desenvolvedores oferecer um driver completo baseado em Rust. Claro, os benefícios de segurança de memória, segurança e desempenho serão o resultado com esses projetos.
No entanto, quando e como isso acontece (sem qualquer inconveniente para a adoção) continua sendo um fator decisivo.
O driver Nouveau veio para ficar. E ele existirá para GPUs Nvidia mais antigas mesmo quando o driver Nova chegar como sucessor.
O que achou do driver Nova? Compartilhe sua opinião nos comentários abaixo!