Greg K-H: "Viết mã mới bằng Rust mang lại lợi ích cho tất cả mọi người"
(lore.kernel.org)Vì sao nên đưa Rust vào nhân Linux
- Dựa trên kinh nghiệm xem xét gần như mọi bản vá lỗi và vấn đề bảo mật của nhân Linux trong 15 năm qua, ông muốn nói về sự cần thiết của việc đưa Rust vào
- Không phải mọi bản vá lỗi đều được đưa vào cây phiên bản ổn định, nhưng nhìn chung những bản quan trọng thì có, và ông là người ở vị trí phải kiểm tra mọi CVE của nhân
Giới hạn của C và ưu điểm của Rust
- Phần lớn các lỗi phát sinh trong nhân Linux bắt nguồn từ những giới hạn mang tính cấu trúc của ngôn ngữ C
- Đặc biệt, có rất nhiều lỗi phát sinh do những sai sót đơn giản, và những vấn đề này hầu như không xảy ra trong Rust
- Ghi đè bộ nhớ (Rust không bắt được mọi trường hợp, nhưng có thể giải quyết phần lớn)
- Vấn đề dọn dẹp trên đường đi lỗi
- Bỏ sót việc kiểm tra giá trị lỗi
- Lỗi use-after-free (dùng sau khi giải phóng)
- Nếu đưa Rust vào nhân, các nhà phát triển và người bảo trì có thể thoát khỏi những sai sót cơ bản này để tập trung vào các vấn đề thực sự khó như lỗi logic, race condition, v.v.
Vẫn phải tiếp tục duy trì codebase C hiện có
- Nhân Linux hiện nay gồm hơn 30 triệu dòng mã C, nên không thể thay thế nó bằng Rust trong thời gian ngắn
- Vì vậy, công việc tăng cường bảo mật cho mã C mà các nhà phát triển như Kees và Gustavo đang thực hiện là thiết yếu và cần tiếp tục
- Điều lý tưởng không phải là Rust thay thế toàn bộ mã hiện có, mà là viết mã mới (đặc biệt là driver) bằng Rust để giảm bớt vấn đề
Tính an toàn API mà Rust mang lại
- Rust cho phép thiết kế các API nội bộ của nhân an toàn hơn và dễ sử dụng hơn
- Hiện nay các API nhân dựa trên C phức tạp, dễ gây sai sót và thường buộc người bảo trì phải rà soát rất kỹ
- Ví dụ, có nhiều cách để sử dụng an toàn một cấu trúc như
struct cdev, và để dùng đúng cần rất nhiều kinh nghiệm - Khi dùng Rust, có thể định nghĩa API rõ ràng hơn, từ đó giảm mạnh khả năng lập trình viên mắc lỗi
- Đây không chỉ là thay đổi dành cho người dùng Rust, mà còn có ích cả với những người dùng mã C hiện có
Phản biện những lo ngại rằng việc đưa Rust vào sẽ khó khăn
- Rust không phải lời giải vạn năng → nhưng vẫn có thể giải quyết phần lớn các vấn đề hiện tại
- Gánh nặng cho người bảo trì tăng lên → nhưng chính các nhà phát triển muốn đưa Rust vào đang trực tiếp làm công việc đó
- Độ khó bảo trì của một codebase đa ngôn ngữ → nhưng nhân Linux từ trước đến nay đã giải quyết được những vấn đề còn khó hơn nhiều
Kết luận
- Linux là công cụ mà vô số nhà phát triển trên toàn thế giới dùng để giải quyết vấn đề, và
- giờ đây nếu có nhu cầu từ các nhà phát triển muốn viết mã an toàn cho phần cứng thì không nên phớt lờ điều đó
- Mô hình phát triển Linux đã tăng trưởng đến quy mô mà không ai từng dự đoán và thể hiện năng lực kỹ thuật xuất sắc
- Giờ là lúc tiến lên với việc đưa Rust vào để chuẩn bị cho hơn 20 năm phát triển tiếp theo
Cần đón nhận công nghệ và ý tưởng mới, đồng thời nỗ lực để cùng cộng đồng đi đến thành công.
24 bình luận
Việc áp dụng Rust có lẽ là thay đổi khó tránh khỏi khi xét đến memory safety. Có lẽ rồi họ sẽ thử hàn gắn lại thông qua một phương án thỏa hiệp phù hợp.
Nhưng mà, cá nhân tôi thấy các từ khóa của Rust khá khó đập vào mắt, đến khi nhìn lại sau một thời gian dài thì cũng không dễ nhớ ra, nên thật sự khó mà cầm lên dùng được ;;;; Tôi biết tất cả đều là những thứ cần thiết, nhưng đôi khi nó cho cảm giác như đang bị ép phải học thuộc các động từ bất quy tắc trong tiếng Anh vậy. Dù vậy, cũng là sự thật rằng các sản phẩm được viết bằng Rust lại ít gây ra vấn đề hơn ở môi trường thực tế.....
Tôi không nghĩ việc không muốn đưa một ngôn ngữ còn chưa đủ trưởng thành vào kernel lại đáng bị chỉ trích đến vậy. Ngay lúc này, nếu bảo thử tìm quanh mình một người thật sự thành thạo Rust thì chẳng phải gần như không có sao? Có lẽ đợi đến khi ngôn ngữ này trưởng thành hơn, và số lượng người dùng cũng được bảo đảm đủ nhiều, dù không đến mức như người dùng các ngôn ngữ legacy, rồi mới đưa vào cũng chưa muộn.
Tôi tin rằng tính hữu ích của ngôn ngữ Rust hoàn toàn có thể được chứng minh đầy đủ ngay cả khi không được áp dụng vào Linux kernel.
Bản thân việc Rust ở mức hiện tại mà vẫn bị gọi là “một ngôn ngữ còn chưa trưởng thành” đã là điều đáng ngạc nhiên, nhưng tách riêng chuyện đó ra thì tôi cũng thấy khó hiểu vì sao việc cố gắng giảm tỷ trọng của các ngôn ngữ không an toàn trong kernel lại bị chỉ trích đến vậy. Ngay lúc này, xung quanh bạn có nhiều người thực sự đủ thành thạo C để có thể đóng góp cho kernel bằng cách viết mã an toàn hay không? Thay vì tiếp tục kỳ vọng C sẽ còn trưởng thành hơn nữa, có lẽ chính bây giờ mới là thời điểm vẫn chưa muộn, khi những yêu cầu của thời đại mới đã được xác lập đầy đủ.
Rust đã hữu ích rồi, và việc nó muốn được đưa vào kernel có lẽ không phải để chứng minh rằng nó hữu ích.
Khi mới quyết định đưa Rust vào, có lẽ cũng đã có những trao đổi về việc này.
Nếu nghĩ xem bên nào có nguồn nhân lực đông hơn, giữa người thành thạo C và người thành thạo Rust, thì rõ ràng C áp đảo hơn nhiều.
Nhưng cũng có thể nghĩ rằng với một lập trình viên đã có sẵn đầy đủ kiến thức về domain, việc học thêm một ngôn ngữ nữa đâu phải chuyện quá lớn,
chỉ là mức độ thành thạo mà những người làm về kernel yêu cầu lại là một câu chuyện khác...
Ý kiến này cũng hay đấy.
Tôi hoàn toàn không hiểu nổi lập luận bảo hãy fork rồi rời đi. Rốt cuộc tại sao Linus lại phải fork khỏi Linux rồi rời đi chứ?
Có ai bảo Linus tách fork rồi ra riêng không? Có vẻ như tôi chưa thấy ai nói như vậy trong cuộc tranh luận này cả..
Tôi cũng là người dùng Rust, nhưng nếu mã Rust và mã C cùng tồn tại lẫn lộn thì trừ khi có một quy ước rất chặt chẽ về việc cho phép mã Rust đến mức nào trong dự án mã nguồn mở, mọi thứ sẽ trở nên không thể kiểm soát, hoặc ít nhất chi phí review và bảo trì sẽ tăng lên khủng khiếp; vì vậy tôi cho rằng lựa chọn khôn ngoan nhất là fork ra thay vì thêm vào.
Tôi không rành về kernel, nhưng nếu có thể tự động dịch mã C sang Rust thì sẽ rất tốt. Tất nhiên, ngoài vấn đề dịch mã còn có cả vấn đề con người nữa.
Nếu có nhiều người muốn đưa Rust vào kernel đến vậy, chẳng phải họ có thể fork và chuyển sang một dự án mới sao? Rồi khi nó đủ trưởng thành, các bản phân phối lớn sẽ chuyển sang kernel dựa trên Rust. Tôi thật sự không hiểu vì sao họ lại đang cãi nhau với nhau.
Tôi không rõ bạn có kinh nghiệm phát triển kernel hay không nên cũng không biết nên nói thế nào, nhưng trước hết, áp dụng ngôn ngữ Rust không có nghĩa là thay kernel bằng Rust. Có thể bạn sẽ hỏi tách ra làm riêng rồi tạo thêm một kernel khác là được mà, nhưng ý ở đây không phải là làm kernel bằng Rust, mà là tạo wrapper bằng Rust chỉ cho phần interface dành cho device driver trong kernel, để chỉ riêng device driver có thể được viết bằng Rust. Vì vậy, chuyển sang một dự án mới là không có ý nghĩa.
Tôi chưa từng phát triển ở phía Linux.
Có vẻ như wrapper Rust cho driver thiết bị là một cấu trúc không thể tách rời khỏi kernel...
Thật mỉa mai khi cộng đồng Linux, vốn từ trước đến nay biện minh cho cách ăn nói độc hại vì lý do ổn định của kernel, giờ lại xem phản ứng kiểu "không thích thì cứ fork đi" như một câu trả lời hợp lý.
Tôi không thuộc cộng đồng Linux, nhưng...
Tôi nghĩ không nên coi những người đó và người viết bình luận này là cùng một cộng đồng.
Có vẻ như sẽ có một điểm khó đoán là kết quả của việc fork sẽ trở thành một cuộc di cư hay rơi vào thời kỳ chiến quốc.
Ngay cả sau khi fork, việc tiếp tục phản ánh các thay đổi từ upstream có lẽ cũng không phải là một tình huống dễ chịu.
https://vi.news.hada.io/topic?id=16860
Nhìn vào việc nhánh fork Realtime Linux được hợp nhất sau 20 năm, có lẽ chúng ta nên cân nhắc thật thận trọng trước khi quyết định fork.
Tôi nói điều này khi nhìn thấy chuyện đó.
Vì tính năng thời gian thực đã có thể được duy trì từ lâu như một dự án tách rời khỏi kernel, nên những ai cần chỉ việc lấy về, áp dụng vào kernel và sử dụng.
Dù là người dùng Rust, nhưng tôi thấy bình luận của hgwxx7_ đăng trên r/rust rất ấn tượng1.
Tôi nhớ là khi cần backport vào phiên bản stable hoặc có việc phải liên hệ, thì dù đang rất bận anh ấy vẫn phản hồi rất tốt.
"Rust không phải là đáp án tuyệt đối, nhưng gần với đáp án hơn Java và Python" -codemaster kimc-
Ý kiến trên Hacker News
Không thể báo cáo những bình luận đầy thù ghét như thế này sao?
Tôi đồng ý.