11 điểm bởi GN⁺ 2025-02-21 | 24 bình luận | Chia sẻ qua WhatsApp

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ó
Quảng cáo

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

 
bus710 2025-02-23

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ế.....

 
lostid 2025-02-22

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.

 
pcpenpal 2025-02-22

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.

 
aer0700 2025-02-22

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...

 
roxie 2025-02-22

Ý kiến này cũng hay đấy.

 
nemo1275 2025-02-21

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ứ?

 
regentag 2025-02-22

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ả..

 
cloverhearts 2025-02-21

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.

 
aer0700 2025-02-21

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.

 
regentag 2025-02-21

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.

 
gurugio 2025-02-21

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.

 
regentag 2025-02-21

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...

 
mammal 2025-02-21

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ý.

 
regentag 2025-02-21

Tôi không thuộc cộng đồng Linux, nhưng...

 
roxie 2025-02-21

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.

 
jeiea 2025-02-21

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.

 
savvykang 2025-02-21

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.

 
regentag 2025-02-21

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.

 
ilsubyeega 2025-02-21

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.

I think what Greg does really well here is demonstrating technical leadership.Leadership doesn't mean being right. He is right, but that's not the point.

Leadership means bringing along on the path he thinks is best. He doesn't crack the whip, chiding or coercing maintainers who disagree. Instead, he first acknowledges their very valid concerns about maintaining a code base with two languages. This is good, because they're right about that, their lives do get harder before they get easier.

He then ends on an inspirational note, pointing out that they've done much harder things and this is well within their abilities. He gently nudges them to welcome R4L devs.

Absolute masterclass of leadership.
I don't know if the other maintainers will be convinced when they read this. But it's hard for me to imagine a more convincing pitch than this one.

 
gurugio 2025-02-21

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.

 
codemasterkimc 2025-02-21

"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-

 
GN⁺ 2025-02-21
Ý kiến trên Hacker News
  • Nếu có các ràng buộc Rust thì ABI nội bộ của kernel sẽ không thể tự do tiến hóa, và có nguy cơ dự án bị chia thành lõi C và phía Rust. Tuy nhiên, nếu API nội bộ được ổn định hóa thì điều đó có thể mang lại lợi ích cho Linux
  • Cộng đồng và con người mới là vấn đề chính. Nếu những người hiện đang làm việc với kernel không thích hướng đi này thì đó là một vấn đề lớn
  • Có vẻ như ban lãnh đạo Linux không tập trung vào vấn đề con người. Có nghi vấn về việc bằng chứng nào cho thấy những người hiện đang phát triển kernel đồng ý với hướng đi này
  • Có những người cho rằng cái giá phải chịu khi chấp nhận Rust còn lớn hơn lợi ích đạt được. Họ nghĩ rằng vẫn có thể đạt được lợi ích đó bằng cách khác
    • Ví dụ, những thứ như bounds checking và việc đơn giản hóa cấp phát/giải phóng kiểu RAII có thể khả thi ngay cả khi không có Rust
    • Nếu biến Clang thành trình biên dịch bắt buộc và áp dụng các phần mở rộng này, có thể đạt hiệu quả dễ hơn
  • Nếu viết mã mới/trình điều khiển mới bằng Rust thì các kiểu lỗi này sẽ không xảy ra. Điều đó có lợi cho tất cả mọi người
  • Hầu hết mọi người đều muốn có an toàn bộ nhớ, nhưng không muốn trở thành người bảo trì toàn diện
  • Mục tiêu thực sự của dự án là hiện đại hóa bề mặt API kernel nội bộ. Việc viết API này bằng Rust có thể chịu đựng được đến mức nào là thước đo tốt nhất để đánh giá tiến độ
  • Với tư cách là người đã chứng kiến gần như mọi bản sửa lỗi kernel và vấn đề bảo mật trong 15 năm qua, phần lớn lỗi xuất phát từ những corner case nhỏ của C. Trong Rust, những vấn đề này biến mất
  • Nếu viết mã mới/trình điều khiển mới bằng Rust thì các kiểu lỗi này sẽ không xảy ra. C++ không mang lại những lợi ích này
  • Rust khiến việc mắc lỗi khi định nghĩa API kernel gần như là bất khả thi. Điều đó khiến Linux trở nên tốt hơn trên toàn diện
  • Các ràng buộc Rust trông có vẻ như phép màu, nhưng vẫn sẵn sàng học hỏi và hợp tác với các nhà phát triển
  • Rust không phải viên đạn bạc giải quyết mọi vấn đề, nhưng nó giúp ích trong rất nhiều khía cạnh
  • Linux là công cụ để mọi người giải quyết vấn đề. Khi các nhà phát triển viết mã cho phần cứng, họ muốn những lỗi kiểu này không xảy ra
  • Codebase đa ngôn ngữ rất khó bảo trì, nhưng chúng ta là các nhà phát triển kernel. Chúng ta cần chấp nhận ý tưởng mới và cố gắng cùng nhau thành công
  • Cần có tuyên bố này để đưa cuộc thảo luận tiến lên phía trước
  • Dù đang tập trung vào các ưu điểm kỹ thuật, nhưng người ta chưa đánh giá đúng mức nỗ lực cần thiết để học một ngôn ngữ lập trình/toolchain mới
  • Làm chủ một ngôn ngữ lập trình mới không phải việc dễ, và một số maintainer có thể không muốn vì mối quan tâm/động lực cá nhân
  • Những vấn đề của ủy ban ngôn ngữ C++ cho thấy mọi người nên từ bỏ ngôn ngữ đó càng sớm càng tốt.
 
hbahk42 2025-02-22

Không thể báo cáo những bình luận đầy thù ghét như thế này sao?

 
kodingwarrior 2025-02-22

Tôi đồng ý.