- Caso de adoção de Rust na Volvo: uma empresa muito grande já usa Rust discretamente
- Julius Gustavsson atua desde 2019 como principal arquiteto de software de uma ECU (unidade de controle eletrônico) de processador de baixa potência da Volvo
- Essa ECU é responsável pelo gerenciamento de energia (de baixa tensão) do veículo; embora carros elétricos tenham uma bateria de alta tensão de grande capacidade, a linha tradicional de 12V ainda existe
- A ECU tem a função de despertar os sistemas elétricos quando necessário. Por exemplo, ela precisa ligar os sistemas quando você se aproxima do carro
- Julius já conhecia Rust desde que entrou na Volvo em 2017 e viu potencial para substituir código legado em C e C++
- O processador de baixa potência mostrou ser um encaixe perfeito para Rust, pois não era classificado como componente crítico para segurança e usava um processador ARM Cortex-M, então não havia barreiras técnicas ou burocráticas para usar Rust
- Atualmente, o EX90 e o Polestar 3 estão sendo produzidos em linhas de montagem que não funcionariam sem Rust
Por que escolher Rust
- O primeiro emprego de Julius foi construindo software de controle de tráfego aéreo que usava muito Ada. Na época, o consenso na empresa era que Ada era complexo demais e proprietário
- Depois disso, ele usou uma mistura de C e C++ por cerca de 15 anos, e bugs relacionados à memória eram sempre um problema em todas as empresas
- Na maioria das vezes, eram codebases em que invariantes e suposições não estavam formalizadas, mas todos precisavam segui-las. À medida que a complexidade do projeto e o tamanho da equipe aumentavam, isso inevitavelmente acabava falhando em algum momento
- Ele conheceu Rust em 2015, antes do lançamento da versão 1.0, e se interessou mais após o lançamento. Quando entrou na Volvo, já tinha alguma experiência com a linguagem como hobby
- A escolha de Rust para o projeto da ECU não aconteceu de repente. Ao criar um protótipo, ele fez em Rust uma HAL interoperável com Android para controlar o sistema, e assim que a compilação passou, o ventilador começou a funcionar, o que foi muito impressionante
Andamento
- Além de ser adequado para Rust por não ser crítico para segurança e rodar em hardware comum, o projeto também era muito direto por ter um conjunto de funcionalidades limitado
- Em 2020, após criar a primeira prova de conceito em C, o projeto continuou em Rust. Era necessário se comunicar com outros sistemas do veículo via CAN, implementar todos os sistemas de diagnóstico e portar os protocolos padrão da Volvo
- Foi preciso reimplementar muita coisa, mas eles perceberam que estavam escrevendo muito menos bugs do que em C e C++
- Em reuniões regulares com outras equipes, Julius quase não trazia problemas, e quando mostrava resultados, os colegas frequentemente ficavam impressionados
Você recomendaria Rust para outras pessoas?
- Rust é uma excelente escolha para qualquer projeto com requisitos muito rígidos de confiabilidade e disponibilidade, em que você realmente queira ter certeza de que aquilo que está sendo implantado está correto
- Graças ao Cargo e a outras ferramentas disponíveis, todo o ciclo de desenvolvimento de software de alta qualidade se torna uma experiência muito boa
- Como, quando compila, quase sempre funciona, outras pessoas conseguem assumir o código e modificá-lo com segurança, então também funciona bem em equipes com alta rotatividade
- Para prototipagem, talvez não seja a melhor escolha, porque o compilador força mais trabalho em casos de borda e detalhes
- Já chegamos ao ponto em que, em vez de perguntar "Será que dá para usar Rust nisso?", deveríamos perguntar e discutir: "Por que não poderíamos usar Rust nisso?"
O que faltou e atrapalhou?
- Não foi fácil criar software que atendesse adequadamente aos requisitos, e isso se deveu principalmente a questões de ferramentas
- Por exemplo, era difícil executar testes unitários no alvo embarcado. Cobertura de código, profiling em tempo de execução, BOM de software, rastreamento de licenças e outros pontos também trouxeram dificuldades
- Ferramentas como o projeto Knurling ajudaram bastante, mas ainda há muita coisa que precisa ser feita por conta própria
Vocês vão usar Rust no futuro?
- Sim. Julius apoia ativamente a escolha de Rust também em outros projetos
- Parece haver entusiasmo por Rust de forma geral em vários níveis dentro da empresa
- Na apresentação final do projeto, houve um consenso comum entre os executivos de que vale explorar o uso de Rust em mais lugares
Conclusão
- Até agora, o uso de Rust na Volvo parece ter sido um grande sucesso. As pessoas estão satisfeitas, a qualidade do produto é alta e a empresa parece pronta para usar mais Rust no futuro
- Ainda há mais trabalho a ser feito, mas, com a disponibilidade de ferramentas voltadas à segurança como Ferrocene, Rust está mais preparado do que nunca para uso na indústria automotiva
Opinião do GN⁺
- Usar Rust no desenvolvimento de software embarcado traz grandes vantagens em termos de segurança de memória e confiabilidade. Especialmente na indústria automotiva, em que segurança é crucial, a adoção de Rust parece destinada a acelerar
- No entanto, considerando o vasto legado do ecossistema C/C++ e o grande número de desenvolvedores disponíveis, uma adoção gradual parece mais realista do que uma migração completa. Melhorar a interoperabilidade entre Rust e C/C++ deve ser uma tarefa importante
- A toolchain de Rust para desenvolvimento embarcado ainda não é perfeita. Embora esteja evoluindo rapidamente com impulso da comunidade, alcançar estabilidade e suporte em nível comercial ainda parece exigir investimento e participação das empresas
- Embora ainda haja uma curva de aprendizado em comparação com C++, o forte sistema de tipos e o conceito de ownership do Rust devem contribuir, no longo prazo, para melhorar a produtividade no desenvolvimento e a qualidade do código. Isso precisa vir acompanhado de investimento em treinamento e onboarding
- Como no caso da Volvo, começar a aplicar Rust gradualmente a partir de novos projetos é uma boa estratégia. Reescritas parciais de codebases existentes e a integração de componentes em Rust devem ser uma abordagem realista
4 comentários
A opinião de que “Ada é complexa demais e proprietária” é meio surpreendente. Tendo usado as duas profissionalmente, C++ me parece muito mais complexo do que Ada...
De qualquer forma, espero que apareça logo um ambiente de desenvolvimento Rust “certificado” que também possa ser usado em sistemas safety-critical. Como a AdaCore está se esforçando, talvez um dia isso seja possível, né?
GNAT Pro for Rust: ambiente de desenvolvimento Rust para embarcados
A certificação é o problema... mas, se isso for resolvido, acho que vão querer usar em cada vez mais lugares.
Enquanto isso, a Uber usa Zig de forma bastante ampla. Quase metade da receita da Zig Foundation depende da Uber.
2024 Financial Report and Fundraiser
Não é exatamente da área de embarcados, mas aqui na nossa empresa também parece que está aumentando o número de equipes avaliando isso internamente.
Em especial, tem circulado uma história de que desenvolveram em Rust uma biblioteca de interoperabilidade para o código Python do Airflow e tiveram um ganho bem significativo, então muita gente está se interessando.