19 puntos por GN⁺ 2024-10-10 | 4 comentarios | Compartir por WhatsApp
  • Caso de adopción de Rust en Volvo: están usando Rust discretamente dentro de una empresa muy grande
  • Julius Gustavsson ha sido el principal arquitecto de software de las ECU (unidades de control electrónico) de procesador de bajo consumo de Volvo desde 2019
  • Esta ECU se encarga de la gestión de energía del vehículo a nivel (bajo); aunque los vehículos eléctricos tienen una batería de alto voltaje de gran capacidad, la línea tradicional de 12V sigue existiendo
  • La ECU se encarga de despertar el sistema eléctrico cuando hace falta. Por ejemplo, al acercarse al vehículo hay que encender el sistema
  • Julius ya conocía Rust desde que entró a Volvo en 2017 y vio su potencial para reemplazar el código existente en C y C++
  • El procesador de bajo consumo resultó ser ideal para usar Rust, ya que no estaba clasificado como un componente crítico para la seguridad y, al estar basado en un procesador ARM Cortex-M, no había obstáculos técnicos ni burocráticos para usar Rust
  • Actualmente, el EX90 y el Polestar 3 se producen en una línea de ensamblaje que no funcionaría sin Rust

Por qué eligieron Rust

  • El primer trabajo de Julius fue construir software de control de tráfico aéreo que usaba mucho Ada. En esa época, el consenso en la empresa era que Ada era demasiado complejo y propietario
  • Después de eso, durante unos 15 años usó una mezcla de C y C++, y en todas las empresas los bugs relacionados con memoria siempre fueron un problema
  • La mayoría de los codebases dependían de invariantes y supuestos que no estaban codificados formalmente, pero que todo el mundo debía respetar. A medida que crecían la complejidad del proyecto y el tamaño del equipo, era inevitable que en algún momento eso fallara
  • Conoció Rust en 2015, antes del lanzamiento de la versión 1.0, y después del lanzamiento le prestó aún más atención. Cuando entró a Volvo, ya tenía algo de experiencia con Rust como hobby
  • La elección de Rust para el proyecto de la ECU no fue algo repentino. Al crear un prototipo, construyó en Rust un HAL interoperable con Android para controlar el sistema, y fue muy impresionante que en cuanto compiló con éxito, los ventiladores empezaron a funcionar

Avance

  • No solo era una buena opción para Rust porque no era crítico para la seguridad y corría sobre hardware común, sino que el proyecto también era muy directo por su conjunto limitado de funciones
  • En 2020, después de hacer una primera prueba de concepto en C, continuaron el proyecto en Rust. Tenían que comunicarse con otros sistemas del vehículo mediante CAN, implementar todos los sistemas de diagnóstico y portar el protocolo estándar de Volvo
  • Hubo que reimplementar muchas cosas, pero descubrieron que estaban escribiendo muchos menos bugs que con C y C++
  • En las reuniones periódicas con otros equipos, Julius casi no planteaba problemas y, cuando mostraba resultados, sus colegas a menudo quedaban impresionados

¿Recomendaría Rust a otras personas?

  • Rust es una opción excelente para cualquier proyecto con requisitos muy estrictos de confiabilidad y disponibilidad, donde uno quiera tener la seguridad de que lo que despliega realmente es correcto
  • Gracias a Cargo y a otras herramientas disponibles, todo el ciclo de desarrollo de software de alta calidad se vuelve una experiencia realmente buena
  • Como cuando compila casi siempre funciona, otras personas pueden hacerse cargo del código y modificarlo con seguridad, así que también funciona bien en equipos con alta rotación
  • Para prototipado quizá no sea la mejor opción, porque el compilador obliga a trabajar más los casos límite y los detalles
  • Hemos llegado al punto en el que, en vez de preguntar "¿Podemos usar Rust para esto?", deberíamos preguntar "¿Por qué no podemos usar Rust para esto?" y debatir a partir de ahí

¿Qué carencias fueron un obstáculo?

  • No fue fácil crear software que cumpliera adecuadamente con los requisitos, y esto se debió principalmente a problemas de herramientas
  • Por ejemplo, era difícil ejecutar pruebas unitarias sobre el objetivo embebido. También hubo dificultades con cobertura de código, profiling en runtime, BOM de software, seguimiento de licencias y más
  • Herramientas como el proyecto Knurling ayudaron bastante, pero todavía hay mucho que hacer por cuenta propia

¿Seguirán usando Rust en el futuro?

  • Sí. Julius está apoyando activamente que se elija Rust también en otros proyectos
  • Parece haber entusiasmo general por Rust en varios niveles dentro de la empresa
  • En la presentación final del proyecto hubo un consenso común entre la dirección para explorar el uso de Rust en más áreas

Conclusión

  • Hasta ahora, el uso de Rust en Volvo parece haber sido un gran éxito. La gente está contenta, la calidad del producto es alta y la empresa parece preparada para usar más Rust en el futuro
  • Todavía queda trabajo por hacer, pero a medida que herramientas centradas en seguridad como Ferrocene se vuelven disponibles, Rust está más preparado que nunca para usarse en la industria automotriz

Opinión de GN⁺

  • Desarrollar software embebido con Rust ofrece grandes ventajas en seguridad de memoria y confiabilidad. Especialmente en una industria automotriz donde la seguridad es clave, parece probable que la adopción de Rust se acelere
  • Sin embargo, considerando el enorme legado del ecosistema de C/C++ y la amplia base de desarrolladores, una adopción gradual parece más realista que una transición completa. Mejorar la interoperabilidad entre Rust y C/C++ será una tarea importante
  • La cadena de herramientas de Rust para desarrollo embebido todavía no es perfecta. Está avanzando rápido gracias a la comunidad, pero para lograr estabilidad y soporte a nivel comercial parece necesaria la inversión y participación de las empresas
  • Aunque todavía tiene una curva de aprendizaje frente a C++, el sólido sistema de tipos y el concepto de ownership de Rust contribuirán a largo plazo a mejorar la productividad de desarrollo y la calidad del código. Esto debe ir acompañado de inversión en capacitación y onboarding
  • Como muestra el caso de Volvo, una buena estrategia es aplicar Rust gradualmente comenzando por proyectos nuevos. Una reescritura parcial del codebase existente y la integración de componentes en Rust serían un enfoque realista

4 comentarios

 
regentag 2024-10-10

Me parece algo inesperada la opinión de que “Ada es demasiado difícil y propietaria”. Habiendo usado ambos por trabajo, diría que C++ es mucho más difícil que Ada...

En fin, ojalá salga pronto un entorno de desarrollo de Rust “certificado” que también pueda usarse en sistemas safety-critical. Como AdaCore está trabajando en ello, supongo que algún día se podrá usar, ¿no?
GNAT Pro for Rust: entorno de desarrollo de Rust para sistemas embebidos

 
botplaysdice 2024-10-10

El problema es la certificación... pero si se resuelve, sí parece que cada vez más lugares van a intentar usarlo.

 
secret3056 2024-10-10

Mientras tanto, Uber usa Zig de forma bastante amplia. Casi la mitad de los ingresos de la Fundación Zig dependen de Uber.
2024 Financial Report and Fundraiser

 
bus710 2024-10-10

No es exactamente del lado embebido, pero dentro de nuestra empresa también he visto que cada vez más equipos lo están evaluando internamente.
En particular, ha estado circulando la historia de que desarrollaron en Rust una librería de interoperabilidad para el código Python de Airflow y obtuvieron resultados bastante buenos, así que muchos le están prestando atención.