Ngôn ngữ lập trình Rust đã tìm đường đến Linux kernel 6.1 thành công vào tháng 12/2022.
Linux kernel module mới nên viết bằng Rust thay vì C. Các phần còn lại của Linux kernel nếu chuyển được sang Rust thì chuyển. Đó là lời khuyên của những người ủng hộ Rust sinh sôi nảy nở, lớn mạnh hơn nữa trong Linux kernel.
Theo thống kê năm 2020 có hơn 27 triệu dòng code của Linux kernel viết bằng ngôn ngữ lập trình C. Việc chuyển 27 triệu dòng code này từ C sang Rust gần như là không thể và chắc chắn hiện tại chương trình biên dịch Rust cũng không có đầy đủ chức năng để biên dịch thành công việc này như GCC.
16 tháng qua, Rust vẫn chưa phát triển mạnh, chưa xâm nhập sâu vào Linux kernel như nhiều người mong đợi.
Sau đây là 1 báo cáo về tình hình ngôn ngữ lập trình Rust bám rễ vào Linux kernel ra sao.
Ngôn ngữ lập trình Rust có nhiều thứ hay ho cho ai muốn xài nó.
Rust là 1 ngôn ngữ lập trình có các kiểu dữ liệu mạnh mẽ hơn.
Rust không chạy các hành vi không được định nghĩa trước.
Không gặp vấn đề về việc vẫn xài được đối tượng sau khi đã giải phóng nó trong Rust.
Không gặp vấn đề về tranh giành dữ liệu khi truy cập đồng thời vào cùng 1 đối tượng – đây là 1 trong những lỗi an toàn thông tin chính của các ngôn ngữ lập trình khác như C, C++…
Trong Rust mọi thứ đều được khởi tạo trước khi đưa vào sử dụng.
Khá hấp dẫn cho các lập trình viên muốn nhảy vào Rust viết chương trình.
Rust has a lot to offer
A stronger type system
No undefined behavior
No use-after-free problems
No data races
Everything initialized
…
Attractive to newer developers
Những vấn đề Rust gặp phải trong Linux kernel là
1 ngôn ngữ lập trình mới khi thêm vào Linux kernel sẽ làm phức tạp thêm tình hình vì hiện tại Linux kernel đã phức tạp roài, hic hic.
Linux kernel không dành cho những lập trình viên C lơ tơ mơ đâu, phải hiểu rõ hệ thống, hiểu rõ ngôn ngữ lập trình C trước khi tham gia viết Linux kernel.
Rust vẫn đang trong giai đoạn tiến hóa của 1 ngôn ngữ lập trình mặc dù khá nhanh.
Các lập trình viên Linux kernel cần thêm thời gian để học Rust và sau đó là viết được Rust chạy ổn trong Linux kernel.
Hiện tại các dòng code viết bằng Rust trong Linux kernel được xem như glue code.
Glue code là mã nguồn (source code) được xem như keo dán sắt, keo dính chuột để dán các thành phần khác lại với nhau, ở đây là chắp vá giữa Rust với C và Assembly.
Mã keo là các dòng mã nguồn không đóng góp bất kỳ chức năng nào nhằm đáp ứng các yêu cầu của chương trình.
Có thể hiểu ý của tác giả là Rust chưa phải là ngôn ngữ lập trình gốc (native programming language) trong Linux kernel. Rust đang được xem là ngôn ngữ lập trình ngoại lai ăn nhờ ở đậu trong Linux kernel.
1 số thứ trong Linux kernel sẽ khó làm được nếu viết bằng Rust. Ý là Rust chưa có đầy đủ chức năng như C.
Nhiều lập trình viên bảo thủ đã quen với lập trình C, Assembly bao nhiêu năm nay nên không muốn chuyển sang ngôn ngữ khác như Rust dù Rust có những cái hay hơn.
Số lượng lập trình viên tham gia viết Linux kernel bằng C bao nhiêu năm qua là rất nhiều.
Why not Rust in the kernel?
A new language adds complexity
The language is still evolving — quickly
Maintainers will need to learn Rust
Lots of glue code
Some things are hard to do in Rust
Conservatism
Những dòng code viết bằng Rust như này rất xa lạ và khó chịu với những người đã quen lập trình C.
Có nhiều phần trong Linux kernel được thiết kế tốt, viết cẩn thận và chạy ổn trong nhiều năm qua mà không gặp lỗi về bộ nhớ. Thật là xúc phạm khi nói đó là 1 sự cải tiến so với những gì đã đạt được bởi những người làm tất cả công việc khó khăn này. 1 người phát triển Linux kernel lâu năm đã bức xúc mà nói vậy.
Ý của ổng là không phải cứ viết bằng C là sẽ bị lỗi bộ nhớ không an toàn, nhiều người đã viết bằng C mà có bị lỗi này đâu, là do họ đã đầu tư nhiều thời gian, công sức để viết code C cẩn thận, kiểm tra kĩ lưỡng từng chút một. Chỉ có mấy ông viết bằng C ẩu mới bị lỗi này thôi. Nên nói Rust là cải tiến của C, bỏ được lỗi bộ nhớ không an toàn của C là 1 sự xúc phạm.
Là do người code chứ hổng phải do ngôn ngữ lập trình C nha các đồng chí Rust.
Hiện trạng của Rust trong Linux kernel.
Ban đầu Rust được chấp nhận trộn code vào Linux kernel 6.1 ở dạng module hello world. Sau đó nhiều code của Rust được cho thêm vào để móc vào các kiểu dữ liệu và các hàm đang có của Linux kernel 1 cách an toàn hơn.
Status
Initial Rust support merged for 6.1
A “hello world” module
More support code in subsequent kernels
Access to existing types and functions
...but safer
Vẫn còn nhiều code của Rust nằm ở ngoài Linux kernel.
Vài thứ mới được viết bằng Rust khá hấp dẫn là:
Apple M1 GPU driver viết bằng Rust.
PuzzleFS viết bằng Rust.
Plan9 filesystem server có cả đọc và ghi dữ liệu viết bằng Rust.
Rust được trộn vào Linux kernel như là 1 trải nghiệm ngôn ngữ lập trình mới.
Rust support was merged as an experiment
Khi nào chúng ta quyết định được sự trải nghiệm này là thành công? Là khi chúng ta trộn code Rust viết ra 1 chức năng đầu tiên phát sinh từ thực tế yêu cầu của người dùng.
Ý của ổng là lúc này Rust đã lớn khôn tự đi được trên đôi chân của mình, Rust không còn là glue code nữa, Rust đã viết được 1 chức năng trong Linux kernel phát sinh từ nhu cầu thực tế, chứ hổng phải Rust viết ra 1 chức năng chơi chơi, cho có, hổng có thực chiến như võ nhưng để tập dưỡng sinh chứ hổng phải để đối kháng.
When do we decide that the experiment is a success?
when we merge the first feature that users depend on
Thời điểm quyết định sự thành công của Rust trong Linux kernel đang đến gần.
The Rust decision point is coming soon
Bài này dịch từ đây, có kết hợp với diễn giải, giải thích từ kinh nghiệm lập trình C và Rust của bản thân.
https://lwn.net/talks/2023/kr-osseu.pdf
Link dự phòng
https://devsecops.edu.vn/wp-content/uploads/2024/05/linux-kernel-report-2023.pdf