19P by neo 8일전 | 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 컴포넌트의 통합이 현실적인 접근법이 될 것임

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

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

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

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

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