- 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ã Rust có mật độ lỗ hổng an toàn bộ nhớ thấp hơn 1000 lần, tỷ lệ rollback giảm 4 lần và thờ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ần và thờ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) và 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 Rust và C++
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 Arm và Collabora để 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
Rust muôn năm!
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++.
Ý 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
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
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 đó
Những đổi mới kiểu này trong khoa học máy tính là cực kỳ hiế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ự á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
Quá trình chiến đấu với compiler thực ra là quá trình sửa trước những bug ẩn
Cách tư duy của Rust bắt đầu chi phối trong đầu bạn
Đó là câu đùa rằng đây là ngôn ngữ dễ quên và cũng dễ học lại
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ụ
Rất khó làm ứng dụng nếu không có mã phía JVM
.sobằng Rust rồi đưa vào NDKABI 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
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
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
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
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
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
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
thì có thể đây đơn giản là khác biệt về rủi ro của mã cũ
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
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
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
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
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ế
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
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 đề