19 pontos por GN⁺ 2024-10-10 | 4 comentários | Compartilhar no WhatsApp
  • 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

 
regentag 2024-10-10

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

 
botplaysdice 2024-10-10

A certificação é o problema... mas, se isso for resolvido, acho que vão querer usar em cada vez mais lugares.

 
secret3056 2024-10-10

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

 
bus710 2024-10-10

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.