19P by GN⁺ 10달전 | ★ favorite | 댓글 4개
  • Volvo의 Rust 도입 사례 : 매우 큰 기업에서 조용히 Rust를 사용 중
  • Julius Gustavsson은 2019년부터 볼보의 저전력 프로세서 ECU(전자 제어 장치)의 주요 소프트웨어 아키텍트 역할을 맡아옴
  • 이 ECU는 차량의 (낮은) 전력 관리를 담당하며, 전기차에는 대용량 고전압 배터리가 있지만 여전히 기존의 12V 라인이 존재함
  • ECU는 필요할 때 전기 시스템을 깨우는 역할을 함. 예를 들어 차량에 접근할 때 시스템을 켜야함
  • Julius는 2017년 볼보에 입사했을 때부터 이미 Rust를 알고 있었고 기존 C와 C++ 코드를 대체할 수 있는 잠재력을 보았음
  • 저전력 프로세서가 Rust를 사용하기에 완벽한 적합성을 보였는데, 안전이 중요한 구성 요소로 분류되지 않았고 ARM Cortex-M 프로세서였기 때문에 러스트 사용에 기술적 또는 관료적 장애물이 없었음
  • 현재 EX90과 Polestar 3가 Rust 없이는 작동하지 않는 어셈블리 라인에서 생산되고 있음

Rust를 선택한 이유

  • Julius의 첫 직장은 Ada를 많이 사용하는 항공 교통 관제 소프트웨어를 구축하는 것이었음. 당시 회사의 컨센서스는 Ada가 너무 난해하고 독점적이라는 것이었음
  • 그 후 약 15년 동안 C와 C++의 혼합을 사용했는데, 모든 회사에서 메모리 관련 버그가 항상 문제였음
  • 불변성과 가정이 성문화되지 않았지만 모두가 준수해야 하는 코드베이스가 대부분이었음. 프로젝트 복잡성과 팀 규모가 커질수록 어느 시점에서 실패할 수밖에 없었음
  • Rust는 1.0 출시 전인 2015년에 알게 되었고, 출시 후 더 많은 관심을 가지게 되었음. 볼보에 입사할 때 취미로 약간의 경험이 있었음
  • ECU 프로젝트에서 Rust를 선택한 것은 갑자기 이루어진 것이 아니었음. 프로토타입을 만들 때 Rust로 Android와 상호 운용되는 HAL을 만들어 시스템을 제어해봤는데, 컴파일이 성공하자마자 팬이 작동하기 시작해서 매우 인상적이었음

진행 상황

  • 안전이 중요하지 않고 일반적인 하드웨어에서 실행되기 때문에 Rust에 적합했을 뿐만 아니라, 제한된 기능 세트로 인해 프로젝트도 매우 직관적이었음
  • 2020년에는 C로 첫 번째 개념 증명을 만든 후 Rust로 프로젝트를 계속 진행했음. CAN을 통해 차량의 다른 시스템과 통신해야 했고 모든 진단 시스템을 구현하고 표준 볼보 프로토콜을 포팅해야 했음
  • 많은 것을 재구현해야 했지만, C와 C++에 비해 훨씬 더 적은 버그를 작성하고 있다는 것을 발견함
  • 다른 팀과의 정기 회의에서 Julius는 문제를 거의 제기하지 않았고, 결과를 보여줄 때 동료들은 종종 인상 깊어했음

다른 사람에게 Rust를 추천하시겠습니까?

  • 매우 엄격한 신뢰성과 가용성 요구 사항이 있고 배포하는 것이 실제로 올바른지 확신하고 싶은 모든 프로젝트에 Rust는 탁월한 선택임
  • Cargo 및 기타 사용 가능한 도구로 인해 고품질 소프트웨어 개발 주기 전체가 정말 좋은 경험이 됨
  • 컴파일될 때 거의 항상 작동하기 때문에 사람들이 코드를 인계받아 안전하게 수정할 수 있어서 이직률이 높은 팀에서도 잘 작동함
  • 프로토타이핑의 경우 엣지 케이스와 세부 사항에 더 많이 작업하도록 컴파일러가 강제하므로 최상의 선택이 아닐 수 있음
  • "이것에 Rust를 사용할 수 있습니까?"라고 묻는 대신 "왜 이것에 Rust를 사용할 수 없습니까?"라고 묻고 토론해야 할 시점에 와있음

방해가 된 부족한 점은 무엇입니까?

  • 요구 사항에 적절히 부합하는 소프트웨어를 만드는 것은 쉽지 않았는데, 이는 주로 도구 문제임
  • 예를 들어 임베디드 타겟에서 단위 테스트를 실행하기 어려웠음. 코드 커버리지, 런타임 프로파일링, 소프트웨어 BOM, 라이선스 추적 등도 어려움이 있었음
  • Knurling 프로젝트와 같은 도구가 많은 도움이 되었지만, 여전히 스스로 해야 할 일이 많음

앞으로 Rust를 사용하실 건가요?

  • 그렇다. Julius는 다른 프로젝트에서도 Rust를 선택하도록 적극적으로 지지하고 있음
  • 회사 내 여러 계층에서 전반적으로 Rust에 대한 열정이 있는 것 같음
  • 최종 프로젝트 발표에서 경영진 사이에 더 많은 곳에서 Rust 사용을 모색하자는 공통된 합의가 있었음

결론

  • 지금까지 볼보에서 Rust 사용은 큰 성공을 거둔 것으로 보임. 사람들은 행복해하고, 제품 품질은 높으며, 회사는 앞으로 더 많은 Rust를 사용할 준비가 된 것 같음
  • 아직 해야 할 일이 더 많지만, Ferrocene과 같은 안전 중심 도구를 사용할 수 있게 됨에 따라 Rust는 자동차 산업에서 사용할 준비가 그 어느 때보다 잘 되어 있음

GN⁺의 의견

  • Rust를 사용하여 임베디드 소프트웨어 개발을 하는 것은 메모리 안전성과 신뢰성 측면에서 큰 이점이 있음. 특히 안전이 중요한 자동차 산업에서 Rust 도입이 가속화될 것으로 보임
  • 하지만 기존 C/C++ 생태계의 방대한 레거시와 개발자 풀을 고려할 때, 완전한 전환보다는 단계적 도입이 현실적일 것임. Rust와 C/C++ 간 상호운용성 개선이 중요한 과제가 될 듯함
  • 임베디드 개발을 위한 Rust 도구 체인은 아직 완벽하지 않음. 커뮤니티 주도로 빠르게 발전하고 있지만, 상용 수준의 안정성과 지원을 위해서는 기업의 투자와 참여가 필요해보임
  • C++에 비해 아직 러닝 커브가 있지만, Rust의 강력한 타입 시스템과 소유권 개념은 장기적으로 개발 생산성과 코드 품질 향상에 기여할 것임. 교육과 온보딩에 대한 투자가 동반되어야함
  • 볼보의 사례처럼 새로운 프로젝트부터 점진적으로 Rust를 적용하는 것이 좋은 전략임. 기존 코드베이스의 부분적 재작성과 Rust 컴포넌트의 통합이 현실적인 접근법이 될 것임

"Ada가 너무 난해하고 독점적"이라는 의견은 좀 의외네요. 둘 다 업무적으로 써 본 입장에서 Ada보다 C++이 훨씬 더 난해한것 같은데요...

아무튼 Safety-Critical에도 쓸수 있는 "인증된" Rust 개발환경이 빨리 나와줬으면 좋겠습니다. AdaCore가 노력하고 있으니 언젠가는 쓸 수 있겠죠?
GNAT Pro for Rust: 임베디드를 위한 Rust 개발환경

인증이 문제라... 해결되면 점점 더 많은데서 사용하려고 할것 같기는 합니다.

한편 Uber는 지그를 꽤 널리 사용합니다. Zig 재단의 수익 절반 좀 안되는 금액을 우버에 의존합니다.
2024 Financial Report and Fundraiser

임베디드 쪽은 아니지만, 저희 회사 내에서도 내부적으로 검토하는 팀들이 늘고 있더라구요.
특히 에어플로우의 파이썬 코드를 위한 interop 라이브러리를 러스트로 개발해서 꽤나 짭짤한 효과를 본 얘기가 돌고 있어서 많이들 관심 가지고 있습니다.