7 điểm bởi GN⁺ 2025-11-15 | 3 bình luận | Chia sẻ qua WhatsApp
  • Sau khi áp dụng Rust trên nền tảng Android, tỷ lệ lỗ hổng an toàn bộ nhớ đã giảm xuống dưới 20% tổng số, đồng thời cải thiện cả bảo mật lẫn hiệu quả phát triển
  • So với C/C++, mã Rustmật độ lỗ hổng an toàn bộ nhớ thấp hơn 1000 lần, tỷ lệ rollback giảm 4 lầnthời gian review mã giảm 25%
  • Việc mở rộng sử dụng Rust đã lan sang kernel, firmware, ứng dụng 1st-party, góp phần nâng mức bảo mật mặc định trên toàn hệ thống
  • Thông qua trường hợp suýt xảy ra lỗ hổng an toàn bộ nhớ đầu tiên dựa trên Rust được phát hiện trong CrabbyAVIF, tầm quan trọng của trình cấp phát Scudo và đào tạo viết mã unsafe an toàn đã được khẳng định
  • Việc chuyển sang Rust được đánh giá là một mô hình phát triển phần mềm mới có thể đồng thời tăng cường bảo mật và cải thiện tốc độ phát triển

Hiệu quả của việc áp dụng Rust và dữ liệu năm 2025

  • Năm 2025, tỷ lệ lỗ hổng an toàn bộ nhớ của Android đã giảm xuống dưới 20%, chứng minh chiến lược bảo mật lấy Rust làm trung tâm là hiệu quả
  • So với C/C++, Rust giúp giảm mật độ lỗ hổng an toàn bộ nhớ 1000 lần, tỷ lệ rollback thấp hơn 4 lầnthời gian review mã ngắn hơn 25%
  • Việc áp dụng Rust không chỉ cải thiện bảo mật mà còn tăng tốc độ phân phối phần mềm
  • Dữ liệu bao gồm các thay đổi mã 1st-party và 3rd-party trên toàn nền tảng Android với C, C++, Java, Kotlin, Rust

Chuyển đổi ngôn ngữ hệ thống và năng suất phát triển

  • Android đã chọn Rust làm giải pháp thay thế cho C/C++ trong lập trình hệ thống, cung cấp mức độ kiểm soát tương tự nhưng giảm rủi ro
  • Xét theo mã 1st-party, đà tăng của mã Rust đã vượt qua C++, từ đó cho phép so sánh các chỉ số phát triển giữa hai ngôn ngữ
  • Sử dụng khung DORA để đo Throughput (tốc độ phân phối)Stability (độ ổn định)
    • Việc so sánh được thực hiện sau khi kiểm soát quy mô mã, nguồn lực lập trình viên và xu hướng thời gian của RustC++

Throughput: Cải thiện hiệu quả review mã

  • So với C++, mã Rust cần ít revision hơn 20%, và thời gian review mã giảm 25%
  • Từ 2023 đến 2024, hiệu quả review đã được cải thiện đáng kể nhờ chuyên môn về Rust tăng lên
  • Việc giảm review và giảm làm lại giúp nâng cao năng suất, trong đó cải thiện độ ổn định là yếu tố tác động lớn nhất

Stability: Giảm tỷ lệ rollback và nâng cao chất lượng

  • Theo tiêu chí DORA, tỷ lệ rollback của Rust thấp hơn C++ khoảng 4 lần, đặc biệt nổi bật ở các thay đổi quy mô vừa và lớn
  • Tỷ lệ rollback thấp trực tiếp góp phần tăng năng suất, đồng thời giảm các chi phí phụ như build lại, postmortem và chặn luồng làm việc của nhóm
  • Trong khảo sát kỹ sư Google năm 2022, Rust cũng được đánh giá là dễ review và có độ chính xác cao
  • Dữ liệu đã xác nhận thực nghiệm cho nhận định này

Đồng thời cải thiện bảo mật và năng suất

  • Trước đây, tăng cường bảo mật thường kéo theo suy giảm hiệu năng hoặc làm chậm phát triển, nhưng chuyển sang Rust đã cải thiện cả bảo mật lẫn hiệu quả cùng lúc
  • Việc áp dụng Rust đã hình thành một cấu trúc trong đó bảo mật, hiệu quả phát triển và độ ổn định sản phẩm đều được cải thiện

Các lĩnh vực Rust đang mở rộng

  • Kernel: Android 6.12 Linux kernel đã hỗ trợ Rust và đưa vào driver Rust đầu tiên
    • Đang hợp tác với ArmCollabora để phát triển driver GPU dựa trên Rust
  • Firmware: Việc áp dụng Rust giúp tăng cường bảo mật trong các môi trường có đặc quyền cao và nhiều ràng buộc, đồng thời đã công bố tutorial, chương trình đào tạo và mã nguồn liên quan
    • Đang triển khai dự án Rusted Firmware-A hợp tác với Arm
  • Ứng dụng 1st-party:
    • Nearby Presence: giao thức khám phá thiết bị dựa trên Bluetooth được triển khai bằng Rust, chạy trong Google Play Services
    • MLS: giao thức bảo mật cho nhắn tin RCS được triển khai bằng Rust, dự kiến sẽ được đưa vào ứng dụng Google Messages trong tương lai
    • Chromium: thay thế parser PNG, JSON, webfont bằng Rust, giúp tuân thủ Rule of 2 dễ dàng hơn

Trường hợp “suýt xảy ra” lỗ hổng an toàn bộ nhớ đầu tiên dựa trên Rust

  • Trong CrabbyAVIF, một lỗ hổng tràn bộ đệm (CVE-2025-48530) đã được phát hiện ngay trước khi phát hành và được sửa xong trước khi công khai
  • Scudo hardened allocator đã khiến lỗ hổng này ở trạng thái không thể khai thác (non-exploitable) nhờ guard page
  • Scudo hiện được dùng mặc định trên Pixel và các thiết bị khác, đồng thời đang được thúc đẩy bắt buộc áp dụng với các đối tác
  • Việc cải thiện crash reporting đã giúp làm rõ tín hiệu phát hiện tràn bộ đệm

Tăng cường quản lý mã unsafe và đào tạo

  • Trong phát triển hệ điều hành, vẫn cần đến mã unsafe (C/C++ hoặc unsafe Rust) ở những nơi không thể tránh khỏi
  • Google đã bổ sung mô-đun nâng cao về mã unsafe vào khóa học Comprehensive Rust
    • Nội dung bao gồm tính đúng đắn (soundness) của mã unsafe, hành vi không được định nghĩa, chú thích an toàn và kỹ thuật trừu tượng hóa an toàn
  • Việc nâng cao hiểu biết về unsafe Rust sẽ dẫn tới cải thiện chất lượng mã trên toàn Android và hệ sinh thái mã nguồn mở

So sánh mật độ lỗ hổng

  • Trong khoảng 5 triệu dòng mã Rust của Android, phát hiện 1 lỗ hổng tiềm ẩn → mật độ lỗ hổng Rust là 0.2/MLOC
  • Mức trung bình lịch sử của C/C++ là 1,000/MLOC, tức là giảm hơn 1000 lần
  • Việc giảm mật độ lỗ hổng an toàn bộ nhớ dẫn tới tăng hiệu quả của toàn bộ kiến trúc bảo mật
  • Khoảng 4% mã Rust có khối unsafe{}, nhưng theo dữ liệu, khả năng phát sinh bug vẫn thấp hơn C/C++
    • Các lý do bao gồm duy trì kiểm tra an toàn, đóng gói, tăng cường rà soát bổ sung

Kết luận

  • Trước đây, để đảm bảo bảo mật cần tới các biện pháp tốn kém như phân tích tĩnh, sandboxing, vá lỗi
  • Chuyển sang Rust là một cách tiếp cận mới giúp đảm bảo đồng thời cả bảo mật lẫn hiệu quả
  • Giờ đây không còn là cách làm “phát triển thật nhanh rồi sửa sau”, mà là bước sang giai đoạn “phát triển nhanh đồng thời sửa ngay trong quá trình”
  • Khi bảo mật được tăng cường, khả năng phục hồi hiệu năng và năng suất cũng tăng theo

Cảm ơn

  • Nhiều cá nhân đóng góp đã được nhắc đến, bao gồm các công việc như phân tích CVE-2025-48530, cải tiến Scudo, phát triển đào tạo unsafe Rust, và cung cấp thông tin về việc sử dụng Rust
  • Gửi lời cảm ơn tới nhóm Rust của Android và toàn bộ tổ chức Android vì nỗ lực liên tục trong việc cải thiện chất lượng

3 bình luận

 
brain1401 2025-11-16

Rust muôn năm!

 
bus710 2025-11-16

Tôi đã thử động tay một chút vào phát triển firmware với Embassy
Không chỉ độ an toàn của ngôn ngữ rất tốt... mà vì tooling quá tốt nên năng suất vượt trội so với thời còn dùng C/C++.

 
GN⁺ 2025-11-15
Ý kiến trên Hacker News
  • Trong 5 triệu dòng mã Rust, chỉ phát hiện đúng một lỗ hổng an toàn bộ nhớ
    Tức là Rust có tỷ lệ 0,2 lỗ hổng trên mỗi triệu dòng mã
    Trong khi đó C/C++ ở mức khoảng 1.000 lỗ hổng trên mỗi triệu dòng, chênh lệch là áp đảo

    • Trên Internet vẫn có những nơi mà chỉ cần nhắc đến chuyện “rewrite bằng Rust” là sẽ bị chỉ trích dữ dội
      Nhưng trước dữ liệu rõ ràng như thế này thì thật khó hiểu vì sao họ vẫn phớt lờ
      Bản thân tôi còn chưa từng dùng Rust, nhưng chắc chắn một ngày nào đó sẽ học
    • Cá nhân tôi ấn tượng hơn với điểm bài viết nói rằng “code review dễ hơn và ít rollback hơn”
      Bảo mật thì quan trọng, nhưng triển khai không phải rollback mới là điều lập trình viên thực sự muốn
      Viết bằng Rust mang lại cảm giác yên tâm đó
    • Rust là một bước đột phá kỹ thuật thực sự
      Những đổi mới kiểu này trong khoa học máy tính là cực kỳ hiếm
    • Nếu thống kê này là thật, tôi cho rằng tương lai của C++ khá u ám
      Năm 2025, gần như không còn lý do gì để dùng C++ ngoài việc duy trì codebase hiện có
      Còn làm mới thì nên chuyển hết sang Rust
    • Dù vậy đây là so sánh giữa mã mới và mã cũ, nên không hoàn toàn công bằng
      Dự án mới luôn khởi đầu với hệ thống kiểm thử hiện đại và mục tiêu rõ ràng
      Nhưng dù sao cũng khó phủ nhận Rust là một ngôn ngữ lành mạnh hơn về mặt tinh thần so với C++
  • Học Rust thực sự rất đau đớn, phức tạp hơn hẳn các ngôn ngữ khác
    Nhưng sau vài lần vật lộn với compiler, bạn sẽ có cảm giác gần như chắc chắn rằng khi mã chạy được thì sẽ ít gặp vấn đề
    Từ Ruby, JS/TS, Python chuyển sang Rust, tôi thấy như kiểu “compile được là đã xong 80~90%”
    Mà lại còn nhanh

    • Điểm tôi thích nhất ở Rust là bắt lỗi runtime ngay tại compile time
      Quá trình chiến đấu với compiler thực ra là quá trình sửa trước những bug ẩn
    • Đến một lúc nào đó, bạn không còn chiến đấu với compiler nữa mà là cộng tác với nó
      Cách tư duy của Rust bắt đầu chi phối trong đầu bạn
    • Rust dễ học à? Tôi cũng đã phải học lại từ đầu 4~5 lần rồi
      Đó là câu đùa rằng đây là ngôn ngữ dễ quên và cũng dễ học lại
    • Tôi tò mò không biết bạn có cảm thấy sự yên tâm đó ngay cả với TypeScript không
      Với Ruby, JS, Python thì tôi đồng ý, nhưng TS thì tôi nghĩ hơi khác
  • Google vẫn chưa chính thức hỗ trợ Rust trong userspace của Android
    NDK và Android Studio hiện vẫn chỉ hỗ trợ C/C++
    Muốn dùng Rust thì cộng đồng phải tự làm công cụ

    • Thực ra Google dường như đang đi theo hướng dần loại bỏ chính NDK
      Rất khó làm ứng dụng nếu không có mã phía JVM
    • Dù vậy vẫn có thể build file .so bằng Rust rồi đưa vào NDK
      ABI của Android không phụ thuộc ngôn ngữ, miễn là tuân thủ đúng quy tắc
  • Đây giống như một quả bom đánh chìm C++
    Giờ thì những lời biện hộ như “Rust cũng unsafe” hay “C++ nếu dùng tốt thì cũng an toàn” sẽ khó đứng vững hơn nhiều

    • Ưu điểm của Rust không chỉ là an toàn mà còn ở cargo, cú pháp, quản lý module nói chung
      Viết mã an toàn thì phiền thật, nhưng một khi đã vượt qua thì bạn có thể tự tin ngay cả trong môi trường đa luồng
      Tôi cũng muốn làm ứng dụng Android bằng Rust
    • Tôi không quan tâm đến chiến tranh ngôn ngữ
      Chỉ đơn giản là vui vì giờ có thêm lựa chọn để tạo ra công cụ hệ thống an toàn
    • Rust compiler rốt cuộc cũng vẫn đứng trên LLVM và GCC
      Tiêu chuẩn công nghiệp vẫn xoay quanh C/C++, nên Rust khó có thể thay thế hoàn toàn
    • Rốt cuộc, Rust phù hợp đến đâu còn tùy vào loại phần mềm đang nói tới
  • Việc tỷ lệ rollback chênh nhau gấp 4 lần thật sự gây sốc
    Phần lớn các con số khác chỉ xác nhận điều ai cũng đoán trước, nhưng cái này thì mới

    • Ai cũng biết Rust an toàn, nhưng chênh lệch 1000 lần thì vẫn đáng kinh ngạc
      Không hẳn vì Rust đặc biệt hoàn hảo, mà vì bug trong mã cũ nhiều đến mức đó
      Việc có dữ liệu như vậy từ một codebase quy mô lớn là rất ấn tượng
    • Phần lớn codebase đều thiếu thiết kế kiểm thử ban đầu
      Nếu ngay từ đầu xây dựng một hệ thống acceptance test ở cấp độ module, thì có thể thay phần kiểm chứng mà Rust làm bằng test
      Không chỉ rò rỉ bộ nhớ mà cả suy giảm hiệu năng cũng có thể được giám sát
    • Nếu mã mới được viết bằng Rust còn mã cũ vẫn duy trì bằng C++,
      thì có thể đây đơn giản là khác biệt về rủi ro của mã cũ
    • Dù kích thước mã khác nhau, việc tỷ lệ rollback vẫn ổn định là điều thú vị
  • Một người bạn được giao phụ trách dự án rewrite sang Rust,
    và đã đùa rằng “thế là bảo đảm lương 3 năm rồi”
    Đây là kiểu chiến lược đùa nửa thật: rewrite → đảm bảo an toàn bộ nhớ → vòng lặp lương ổn định
    Trong lúc Rust compiler compile chậm chạp, có thể thong thả đọc mã cũ và làm việc nhàn hơn

  • Dữ liệu này không kiểm soát các biến nhiễu
    Thường thì mục tiêu của rewrite là những đoạn mã đã được hiểu khá rõ, nên review nhanh và ít rollback
    Ngược lại, mã legacy phức tạp thì review lâu và rollback nhiều

    • Nhưng biểu đồ đầu tiên thì không thể chỉ giải thích bằng hiện tượng đó
      Nếu chỉ rewrite phần mã dễ, thì tỷ lệ lỗ hổng an toàn bộ nhớ đã phải khác
      Thực tế, mã càng nhiều vấn đề thì lại càng có xu hướng được viết lại bằng Rust
      Đây không phải thí nghiệm hoàn hảo, nhưng xem đó là hiệu quả thực tế thì hợp lý hơn
    • Bài viết này chủ yếu nói về việc viết mã mới
    • Họ đã cố giảm nhiễu bằng cách so sánh theo quy mô thay đổi (S/M/L)
      Sẽ còn thú vị hơn nếu phân tích quy mô rewrite dựa trên số dòng bị xóa
    • Dự án càng phức tạp và có độ bao phủ test cao,
      thì đôi khi lại càng trở thành môi trường dễ rewrite hơn
      Tôi tin vào ưu điểm của Rust, nhưng đây nên được xem là bằng chứng thực nghiệm mạnh, hơn là chứng cứ khoa học chặt chẽ
  • Tôi tò mò việc áp dụng Rust trong tương lai sẽ ảnh hưởng thế nào tới các bug không liên quan đến an toàn bộ nhớ

  • Tôi dùng Rust cho phát triển game (không phải Bevy)
    Nhờ độ ổn định và thông lượng, tôi không có ý định quay lại ngôn ngữ khác

    • Làm game bằng Rust mà không dùng Bevy nghe khá thú vị
      Tôi tò mò bạn dùng tổ hợp crate và kiến trúc như thế nào
      Tôi cũng làm game như thú vui, và thấy Bevy hơi quá nặng
  • Giờ tôi cảm thấy Rust đã thật sự đứng vững ngay cả trong mã hệ thống cốt lõi
    Nó không còn là một cuộc chiến gian nan nữa
    “Viết lại bằng Rust đi” không còn là meme, mà đang ngày càng có cơ sở thực tế

    • Nếu đọc các bài về Rust trên Phoronix,
      bạn sẽ thấy 80% bình luận vẫn là của những người ghét Rust
      Chỉ toàn những luận điệu lặp lại như “C++ cũng an toàn nếu dùng tốt”, “Rust cũng có bug”
      Đó là kiểu chỉ trích thiếu hiểu biết, và giờ không còn buồn cười nữa mà chỉ đáng tiếc
    • Cách tiếp cận này không phải là “rewrite mã cũ”, mà là chiến lược viết mã mới bằng Rust
    • Rust cực kỳ phù hợp trong các môi trường như Android, nơi trực tiếp quản lý kernel và phần mềm
      Nhưng đòi áp dụng nó ở mọi nơi thì là quá đà
      Mô hình ownership của Rust làm chậm tốc độ phát triển, và bản thân ngôn ngữ này cũng vẫn đang tiếp tục tiến hóa
      Với những dịch vụ có độ trễ mạng lớn, Python hay Node lại hiệu quả hơn
      Nói cách khác, Rust rất tuyệt, nhưng không phải lời giải cho mọi vấn đề