19 điểm bởi GN⁺ 2024-10-10 | 4 bình luận | Chia sẻ qua WhatsApp
  • Trường hợp áp dụng Rust tại Volvo: một doanh nghiệp rất lớn đang âm thầm sử dụng Rust
  • Julius Gustavsson đã đảm nhiệm vai trò kiến trúc sư phần mềm chính cho ECU (bộ điều khiển điện tử) dùng bộ xử lý công suất thấp của Volvo từ năm 2019
  • ECU này phụ trách quản lý điện năng của xe ở mức (thấp); dù xe điện có bộ pin cao áp dung lượng lớn, vẫn còn đường điện 12V truyền thống
  • ECU có vai trò đánh thức hệ thống điện khi cần. Ví dụ, khi bạn đến gần xe thì hệ thống phải được bật lên
  • Julius đã biết đến Rust từ trước khi vào Volvo năm 2017 và nhìn thấy tiềm năng thay thế mã C và C++ hiện có
  • Bộ xử lý công suất thấp tỏ ra cực kỳ phù hợp với Rust, vì nó không được phân loại là thành phần an toàn trọng yếu và dùng bộ xử lý ARM Cortex-M, nên không có rào cản kỹ thuật hay thủ tục hành chính nào đối với việc dùng Rust
  • Hiện tại, EX90 và Polestar 3 đang được sản xuất trên dây chuyền lắp ráp mà không thể vận hành nếu thiếu Rust

Lý do chọn Rust

  • Công việc đầu tiên của Julius là xây dựng phần mềm kiểm soát không lưu sử dụng rất nhiều Ada. Đồng thuận trong công ty lúc đó là Ada quá khó hiểu và mang tính độc quyền
  • Sau đó trong khoảng 15 năm, ông dùng kết hợp C và C++, và ở công ty nào thì lỗi liên quan đến bộ nhớ cũng luôn là vấn đề
  • Phần lớn codebase có những bất biến và giả định không được mã hóa rõ ràng nhưng mọi người đều buộc phải tuân theo. Khi độ phức tạp của dự án và quy mô đội ngũ tăng lên, đến một thời điểm nào đó nó gần như chắc chắn sẽ thất bại
  • Ông biết đến Rust vào năm 2015, trước khi 1.0 phát hành, và quan tâm hơn sau khi nó ra mắt. Khi vào Volvo, ông đã có một ít kinh nghiệm do tự tìm hiểu như sở thích cá nhân
  • Việc chọn Rust cho dự án ECU không diễn ra một cách đột ngột. Khi làm nguyên mẫu, ông thử tạo một HAL tương tác với Android bằng Rust để điều khiển hệ thống, và ngay khi biên dịch thành công thì quạt bắt đầu chạy, điều đó gây ấn tượng rất mạnh

Tiến triển

  • Không chỉ phù hợp với Rust vì không mang tính an toàn trọng yếu và chạy trên phần cứng phổ biến, dự án còn rất trực quan nhờ tập tính năng hạn chế
  • Năm 2020, sau khi tạo bản chứng minh khái niệm đầu tiên bằng C, nhóm tiếp tục dự án bằng Rust. Họ phải giao tiếp với các hệ thống khác trong xe qua CAN, triển khai toàn bộ hệ thống chẩn đoán và port giao thức chuẩn của Volvo
  • Dù phải tái triển khai nhiều thứ, họ nhận ra mình viết ra ít lỗi hơn rất nhiều so với khi dùng C và C++
  • Trong các cuộc họp định kỳ với đội khác, Julius hầu như không nêu ra vấn đề nào, và khi ông trình bày kết quả thì đồng nghiệp thường rất ấn tượng

Có khuyến nghị Rust cho người khác không?

  • Với mọi dự án có yêu cầu rất nghiêm ngặt về độ tin cậy và tính sẵn sàng, và nơi bạn thực sự muốn chắc chắn rằng thứ mình triển khai là đúng đắn, Rust là một lựa chọn xuất sắc
  • Nhờ Cargo và các công cụ sẵn có khác, toàn bộ vòng đời phát triển phần mềm chất lượng cao trở thành một trải nghiệm thực sự tốt
  • Vì khi đã biên dịch thì hầu như luôn chạy đúng, mọi người có thể tiếp nhận mã và chỉnh sửa một cách an toàn, nên Rust cũng hoạt động tốt ở các đội có tỷ lệ thay người cao
  • Với việc tạo nguyên mẫu, đây có thể không phải lựa chọn tốt nhất vì compiler buộc bạn phải xử lý nhiều hơn các edge case và chi tiết
  • Chúng ta đã đến thời điểm nên đặt câu hỏi "Tại sao không thể dùng Rust cho việc này?" và thảo luận về điều đó, thay vì hỏi "Có thể dùng Rust cho việc này không?"

Những thiếu sót nào đã cản trở?

  • Việc tạo ra phần mềm đáp ứng đúng yêu cầu không hề dễ, và điều này chủ yếu là vấn đề về công cụ
  • Ví dụ, rất khó chạy unit test trên target nhúng. Việc đo code coverage, runtime profiling, software BOM, theo dõi giấy phép cũng gặp khó khăn
  • Các công cụ như dự án Knurling đã giúp ích rất nhiều, nhưng vẫn còn nhiều việc phải tự làm

Ông có tiếp tục dùng Rust trong tương lai không?

  • Có. Julius đang tích cực ủng hộ việc chọn Rust trong các dự án khác nữa
  • Có vẻ như ở nhiều tầng lớp trong công ty đều có sự hào hứng chung đối với Rust
  • Trong buổi trình bày dự án cuối cùng, đã có sự đồng thuận chung giữa ban quản lý rằng nên tìm cách sử dụng Rust ở nhiều nơi hơn

Kết luận

  • Cho đến nay, việc sử dụng Rust tại Volvo có vẻ là một thành công lớn. Mọi người hài lòng, chất lượng sản phẩm cao, và công ty dường như đã sẵn sàng dùng Rust nhiều hơn trong tương lai
  • Vẫn còn nhiều việc phải làm, nhưng khi các công cụ tập trung vào an toàn như Ferrocene ngày càng khả dụng, Rust đang sẵn sàng cho ngành ô tô hơn bao giờ hết

Ý kiến của GN⁺

  • Phát triển phần mềm nhúng bằng Rust có lợi thế lớn về an toàn bộ nhớ và độ tin cậy. Đặc biệt trong ngành ô tô, nơi an toàn là yếu tố then chốt, việc áp dụng Rust có vẻ sẽ tăng tốc
  • Tuy nhiên, xét đến hệ sinh thái legacy khổng lồ của C/C++ và lực lượng lập trình viên hiện có, việc chuyển đổi hoàn toàn sẽ kém thực tế hơn so với triển khai từng bước. Cải thiện khả năng tương tác giữa Rust và C/C++ có vẻ sẽ là một nhiệm vụ quan trọng
  • Toolchain Rust cho phát triển nhúng vẫn chưa hoàn hảo. Dù đang phát triển nhanh nhờ cộng đồng, vẫn cần đầu tư và sự tham gia của doanh nghiệp để đạt được độ ổn định và hỗ trợ ở cấp độ thương mại
  • Dù vẫn còn đường cong học tập so với C++, hệ thống kiểu mạnh và khái niệm ownership của Rust sẽ về lâu dài góp phần nâng cao năng suất phát triển và chất lượng mã. Cần đi kèm đầu tư vào đào tạo và onboarding
  • Giống như trường hợp của Volvo, áp dụng Rust dần dần từ các dự án mới là một chiến lược tốt. Việc viết lại từng phần của codebase hiện có và tích hợp các thành phần Rust sẽ là cách tiếp cận thực tế

4 bình luận

 
regentag 2024-10-10

Ý kiến cho rằng "Ada quá khó hiểu và quá độc quyền" nghe hơi bất ngờ nhỉ. Với tư cách là người đã dùng cả hai trong công việc, tôi lại thấy C++ khó hiểu hơn Ada rất nhiều...

Dù sao thì tôi cũng mong sớm có một môi trường phát triển Rust "được chứng nhận" có thể dùng cho cả các hệ thống safety-critical. Vì AdaCore đang nỗ lực nên chắc rồi một ngày nào đó cũng sẽ dùng được thôi nhỉ? GNAT Pro for Rust: môi trường phát triển Rust cho embedded

 
botplaysdice 2024-10-10

Vấn đề là chứng nhận... nếu giải quyết được thì có vẻ sẽ ngày càng có nhiều nơi muốn sử dụng hơn.

 
secret3056 2024-10-10

Trong khi đó, Uber sử dụng Zig khá rộng rãi. Gần một nửa doanh thu của Zig Foundation phụ thuộc vào Uber.
2024 Financial Report and Fundraiser

 
bus710 2024-10-10

Dù không hẳn thuộc mảng embedded, nhưng ngay trong công ty tôi cũng thấy ngày càng có nhiều nhóm đang xem xét nội bộ.
Đặc biệt, đang lan truyền câu chuyện về việc họ phát triển một thư viện interop cho mã Python của Airflow bằng Rust và thu được hiệu quả khá đáng kể, nên nhiều người rất quan tâm.