Các nhà phát triển Rust tiến lên phía trước với việc chuẩn bị ngược dòng nhiều mã hơn vào nhân Linux

Các nhà phát triển Rust tiếp tục sẵn sàng tải thêm mã vào nhân Linux
Được viết bởi Michael Larabel vào ngày 11 tháng 11 năm 2022 lúc 05. 36 EST và được xuất bản trong Linux Kernel58 Nhận xét
Các nhà phát triển Rust tiến lên phía trước với việc chuẩn bị ngược dòng nhiều mã hơn vào nhân Linux
Cơ sở hạ tầng Rust ban đầu đã được hợp nhất vào Linux 6 sắp tới. 1 kernel, cho phép sử dụng ngôn ngữ lập trình Rust cho trình điều khiển kernel trong tương lai và mã kernel khác. Tuy nhiên, Linux6. 1 hiện đang ở trạng thái rất cơ bản và không thực tế, và một loạt các bản vá "Rust cho Linux" thứ hai vừa được phân phối để cho phép phát triển nhân dựa trên Rust hơn nữa

Vào thứ Năm, Miguel Ojeda, người đứng đầu nỗ lực Rust cho Linux đã phát hành một bộ gồm 28 bản vá bổ sung thêm nhiều sửa đổi lõi Rust cho nhân. Ojeda đã giải thích loạt bản vá quan trọng gần đây nhất này trong bản vá
Bộ bản vá này đại diện cho vòng cập nhật đầu tiên cho phần còn lại của hỗ trợ Rust

Chúng không tương tác với phía C theo những cách quan trọng mới trong trường hợp này (chỉ sử dụng 'strlen', 'memchr', mã lỗi bổ sung và một số chuỗi định dạng 'printk' khác; không sử dụng loại C mới nào)

Trong loạt bài tiếp theo, "str. rs" và "printTất cả các macro proc còn lại đã được thêm vào và rs' được đồng bộ hóa với hạ lưu. Mặc dù một vài tính năng 'pub(crate)' sẽ được thêm vào sau (để tránh để lại mã chết giữa các sê-ri), rs cũng khá đầy đủ

Để tổ chức các bản vá tự do hơn một chút và để đảm bảo rằng tất cả chúng đều có thể được tạo mà không có lỗi hoặc cảnh báo, một vài thuộc tính tạm thời "#[allow(dead_code)]" được sử dụng, nhưng đến cuối loạt bài,

Hầu như tất cả các mã ban đầu là một phần của loạt bản vá Rust và đã có trong linux-next trong nhiều tháng trước khi được cô đọng (i. e. tải lên v8)

Mỗi bản vá đã được xây dựng thử nghiệm bằng cách sử dụng các mục tiêu "tất cả", "rustfmtcheck", "rustdoc" và "rusttest" trên "defconfig" có bật Rust

Có thể công việc này sẽ được hoàn thành kịp thời cho Linux 6. 2 vào tháng tới với điều kiện là mã này đã có trong linux-next được một thời gian và đã trải qua một số đánh giá như một phần của loạt bản vá Rust cho Linux ban đầu. Chúng ta sẽ thấy, nhưng chuyến tàu Rust cho Linux vẫn tiếp tục


Một trong những người dùng đáng kể đầu tiên của Rust trong nhân Linux được dự đoán là trình điều khiển DRM cho bộ xử lý đồ họa Apple M1/M2. Khi tất cả cơ sở hạ tầng Rust này đã sẵn sàng, chúng ta sẽ xem mất bao lâu trước khi các trình điều khiển trong thế giới thực quan trọng hơn chuyển sang mã Rust để hỗ trợ phần cứng mới hoặc viết lại mã trình điều khiển C hiện có trong Rust

Một cách riêng biệt, Cơ quan An ninh Quốc gia Hoa Kỳ hôm qua đã đưa ra các khuyến nghị về bảo vệ chống lại các vấn đề an toàn bộ nhớ. Báo cáo của NSA gợi ý sử dụng các ngôn ngữ lập trình an toàn cho bộ nhớ Rust hoặc Swift, Java, Go, Ruby và C#
58 Bình luận

Hiển thị hỗ trợ của bạn. Bạn có biết rằng bạn có thể nhận Phoronix Premium với giá dưới 4 đô la mỗi tháng không? . Ít nhất, vui lòng tắt trình chặn quảng cáo của bạn. ad-free, multi-page articles on a single page, and more while the proceeds allow us to write more Linux hardware reviews. At the very least, please disable your ad-blocker.

Các nhà phát triển Rust tiến lên phía trước với việc chuẩn bị ngược dòng nhiều mã hơn vào nhân Linux

Được viết bởi Michael Larabel trong Nhân Linux vào ngày 11 tháng 11 năm 2022 lúc 05. 36 AM EST. 58 Bình luận

Các nhà phát triển Rust tiến lên phía trước với việc chuẩn bị ngược dòng nhiều mã hơn vào nhân Linux

Với Linux 6 sắp ra mắt. Trong bản phát hành kernel 1, có cơ sở hạ tầng Rust ban đầu được hợp nhất để cho phép sử dụng ngôn ngữ lập trình Rust cho các trình điều khiển kernel trong tương lai và mã kernel khác. Nhưng trạng thái đó trong Linux 6. 1 là những điều rất cơ bản và chưa thực tế trong khi hiện tại, một bản vá lỗi thứ cấp của "Rust cho Linux" đã được gửi đi để cho phép phát triển nhân nhiều hơn với Rust

Miguel Ojeda, người dẫn đầu nỗ lực Rust cho Linux đã gửi một bộ gồm 28 bản vá vào thứ Năm, cung cấp thêm các bổ sung lõi Rust cho nhân. Ojeda đã giải thích trong loạt bản vá loạt bản vá lớn mới nhất này
Loạt bản vá này là loạt thay đổi đầu tiên đối với phần còn lại của hỗ trợ Rust

Trong trường hợp này, tất cả các cơ sở được giới thiệu là một phần của "Rust core". Chúng không tương tác với phía C theo những cách chính mới (không sử dụng các loại C mới; chỉ `strlen`, `memchr`, mã lỗi bổ sung và một số chuỗi định dạng `printk` khác)

Sau loạt bài này, `str. rs` và `in. rs` được đồng bộ với xuôi dòng và tất cả các macro proc còn lại đã được thêm vào. `lỗi. rs` cũng khá đầy đủ, mặc dù một vài tính năng `pub(crate)` nữa sẽ xuất hiện sau (để tránh để lại mã chết giữa các chuỗi)

Lưu ý rằng một vài thuộc tính `#[allow(dead_code)]` tạm thời được sử dụng để có thêm một chút tự do sắp xếp các bản vá trong khi vẫn giữ cho tất cả chúng có thể xây dựng được mà không có cảnh báo/lỗi, nhưng ở phần cuối của loạt bài thì không còn lại gì

Hầu như tất cả các mã đã có trong linux-next trong nhiều tháng và là một phần của loạt bản vá Rust trước khi cắt bớt (i. e. lên đến v8)

Mỗi bản vá đã được xây dựng thử nghiệm trên `defconfig` hỗ trợ Rust với `CLIPPY=1` trên các mục tiêu `all`, `rustfmtcheck`, `rustdoc` và `rusttest`

Cho rằng mã này đã có trong linux-next được một thời gian và đã thấy một số đánh giá như một phần của loạt bản vá Rust cho Linux ban đầu, rất có thể chúng ta có thể thấy công việc này sẵn sàng kịp thời cho Linux 6. 2 cửa sổ hợp nhất vào tháng tới. Chúng ta sẽ thấy. Trong mọi trường hợp, chuyến tàu Rust cho Linux vẫn tiếp tục


Khi tất cả cơ sở hạ tầng Rust này đã sẵn sàng, chúng ta sẽ xem mất bao lâu trước khi các trình điều khiển trong thế giới thực, nổi bật hơn bắt đầu chuyển sang mã Rust để hỗ trợ phần cứng mới hoặc viết lại mã trình điều khiển C hiện có trong Rust. Một trong những người dùng chính đầu tiên của Rust trong nhân Linux dự kiến ​​sẽ là trình điều khiển DRM cho đồ họa Apple M1/M2

Một cách riêng biệt, ngày hôm qua, Cơ quan An ninh Quốc gia Hoa Kỳ đã công bố hướng dẫn về cách bảo vệ chống lại các vấn đề về an toàn bộ nhớ. Báo cáo của NSA gợi ý sử dụng ngôn ngữ lập trình Rust hoặc các ngôn ngữ an toàn cho bộ nhớ khác như Swift, Java, Go, Ruby và C#

58 Bình luận

  • Nếu đây là lần đầu tiên bạn truy cập, hãy nhớ xem Câu hỏi thường gặp bằng cách nhấp vào liên kết ở trên. Bạn có thể phải đăng ký trước khi bạn có thể đăng bài. Nhấp vào liên kết đăng ký ở trên để tiến hành. Để bắt đầu xem tin nhắn, hãy chọn diễn đàn mà bạn muốn truy cập từ lựa chọn bên dưới

Đăng ký là huyết mạch của LWN. mạng lưới. Nếu bạn đánh giá cao nội dung này và muốn xem thêm nội dung đó, đăng ký của bạn sẽ giúp đảm bảo rằng LWN tiếp tục phát triển. Vui lòng truy cập trang này để tham gia và giữ LWN trên mạng

Dự án Rust cho Linux, đang làm việc để có thể viết mã nhân bằng ngôn ngữ lập trình Rust, đã được tiến hành trong một vài năm và ngày càng có nhiều nhà phát triển cảm thấy rằng đã đến lúc hợp nhất công việc này vào . Tại Hội nghị thượng đỉnh các nhà bảo trì nhân Linux năm 2022, Miguel Ojeda đã cập nhật cho nhóm về tình trạng của dự án với mục tiêu đưa ra kết luận về thời điểm việc hợp nhất này có thể xảy ra. Câu trả lời đã trở lại là đủ rõ ràng. Rỉ sét trong nhân thực sự sẽ sớm xảy ra

Có một chút hồi hộp trên mặt trận đó; . 1 hạt nhân (có thể sẽ được phát hành vào giữa tháng 12) trừ khi anh ta nghe thấy sự phản đối mạnh mẽ. Ojeda chỉ ra rằng anh ấy muốn thấy điều đó xảy ra và hỏi làm thế nào các bản vá sẽ được chuyển vào tuyến chính. Torvalds nói rằng anh ấy không muốn chấp nhận chúng trực tiếp, vì vậy có vẻ như Kees Cook sẽ định tuyến công việc này ngược dòng

Các nhà phát triển Rust tiến lên phía trước với việc chuẩn bị ngược dòng nhiều mã hơn vào nhân Linux
Dave Airlie nói rằng có những nhà phát triển trình điều khiển MacBook có ý định thực hiện công việc của họ trong Rust, vì vậy có khả năng sẽ có những trình điều khiển Rust thực sự tiến lên phía trước quá lâu. Tuy nhiên, ban đầu, Torvalds nói rằng anh ấy muốn thấy một sự hợp nhất tối thiểu chỉ để đưa cơ sở hạ tầng vào nhân và cho phép các nhà phát triển bắt đầu chơi với nó. Nó nên xây dựng, nhưng không nên làm gì nhiều ngoài giai đoạn "xin chào, thế giới". Ông nói, điều đó sẽ là một tín hiệu cho thế giới rằng "điều đó cuối cùng cũng xảy ra"

Greg Kroah-Hartman đã hỏi các ràng buộc Rust dành riêng cho hệ thống con sẽ đi ngược dòng như thế nào; . Alexei Starovoytov lo lắng rằng những người bảo trì hệ thống phụ sẽ không thể từ chối các bản vá Rust ngay cả khi họ không muốn thấy Rust được sử dụng trong hệ thống phụ của họ; . Torvalds trả lời rằng điều đó tùy thuộc vào những người bảo trì;

Paolo Bonzini nói rằng mã Rust triển khai trừu tượng cho các hệ thống con thường khó đọc nhất đối với các nhà phát triển không quen thuộc với ngôn ngữ này, "nhưng đó là mã ngu ngốc" không làm bất cứ điều gì phức tạp. Mã Rust cấp trình điều khiển đơn giản hơn rất nhiều. Torvalds lặp lại rằng, hiện tại, những người bảo trì sẽ có thể nói rằng họ không muốn đối phó với Rust. Tuy nhiên, Starovoytov phản bác rằng BPF sẽ bị ảnh hưởng bất kể anh ta có thể quyết định điều gì; . Cuối cùng mọi người sẽ cần biết Rust, anh ấy nói thêm. Torvalds trả lời rằng ông ấy cho rằng quá trình đó sẽ mất nhiều năm

Cook nói rằng thay đổi này sẽ tương tự như nhiều thay đổi ngôn ngữ C mà kernel đã trải qua. Việc chuyển đổi từ các mảng có độ dài thay đổi là một quá trình tương tự và các nhà phát triển đã quen với nó. Torvalds nói rằng nó gần với việc giới thiệu BPF hơn;

Ted Ts'o lưu ý rằng kernel phải sử dụng các tính năng Rust không ổn định và điều đó tạo ra sự không chắc chắn về phiên bản ngôn ngữ nào sẽ được sử dụng. Có lẽ các nhà phát triển nên khai báo một phiên bản cụ thể của trình biên dịch là phiên bản được sử dụng để phát triển nhân? . Thomas Gleixner nói rằng có sẵn trình biên dịch may mắn trên kernel. org sẽ đủ tốt, nhưng Torvalds trả lời rằng anh ấy muốn lấy các trình biên dịch từ nhà phân phối của mình hơn nếu có thể. Bottomley hỏi khi nào Rust sẽ trở thành bắt buộc để xây dựng kernel; . Torvalds nói rằng, nếu và khi thời điểm đó đến, đó sẽ là dấu hiệu cho thấy Rust là một thành công cho việc phát triển nhân

Gleixner hỏi về mức độ cụ thể của ngôn ngữ Rust hiện nay; . Rust đảm bảo khả năng tương thích ngược cho các tính năng ổn định, vì vậy những tính năng này sẽ không bị hỏng theo những cách đáng ngạc nhiên. Tuy nhiên, kernel đang sử dụng một số tính năng không ổn định; . Công việc đang được thực hiện để ổn định các tính năng đó để nhân có thể tin tưởng vào chúng trong tương lai

Hiện đang có một nỗ lực liên tục để viết một đặc điểm kỹ thuật cho Rust cho các hệ thống quan trọng về an toàn sẽ dẫn đến một tài liệu giống như tiêu chuẩn. Tuy nhiên, hiện tại, Ojeda cho biết, các nhà phát triển của trình biên dịch Rust gccrs dựa trên GCC đang nhận thấy tài liệu hiện tại đôi khi mơ hồ. Thông thường, hành vi được chỉ định là "bất cứ điều gì trình biên dịch Rustc làm". Đó là "không tốt", ông nói, nhưng có một con đường phía trước

Gleixner cũng hỏi về các công cụ đang tạo ra các ràng buộc Rust và đặc biệt là liệu có tự động hóa để đảm bảo rằng các phiên bản Rust và C của cấu trúc dữ liệu khớp với nhau hay không. Ojeda cho biết những công cụ đó tồn tại, nhưng chúng chưa tự động chuyển đổi thành công tất cả các loại. Điều đó có thể được sửa chữa

Cuối cùng, Gleixner nhắc nhở các nhà phát triển Rust không thay đổi ngữ nghĩa của bất kỳ nguyên mẫu khóa C nào; . Ts'o nói thêm rằng các tóm tắt khóa của Rust nên được thực hiện để hoạt động với trình kiểm tra khóa lockdep ngay từ đầu. Chris Mason xen vào rằng, nếu mã Rust code cần lockdep, thì đó sẽ là một dấu hiệu khác cho thấy ngôn ngữ này đã thành công và đã đến lúc "vũ điệu chiến thắng"

Người ta thường nói rằng việc hợp nhất Rust vào cây nhân sẽ được thực hiện trên cơ sở thử nghiệm; . Ojeda nói rằng các nhà phát triển làm việc trên Rust cho Linux muốn biết thời gian dùng thử có thể kéo dài bao lâu. Anh ấy đã không thực sự nhận được câu trả lời từ nhóm, mặc dù

Thay vào đó, Bottomley gợi ý rằng, thay vì đưa Rust vào, có thể tốt hơn là chuyển nhiều tính năng giống Rust hơn vào C. Ojeda nói rằng anh ấy thực sự đã làm việc với ủy ban ngôn ngữ C để thúc đẩy điều đó xảy ra, nhưng bất kỳ thay đổi nào như vậy sẽ mất nhiều thời gian nếu nó xảy ra. Christoph Hellwig nói rằng dù sao thì kiểu thay đổi này cũng sẽ phải xảy ra trừ khi kế hoạch là viết lại toàn bộ nhân trong Rust; . Có lẽ máy phân tích tĩnh thưa thớt có thể được tăng cường để thực hiện nhiều kiểm tra giống như Rust hơn, ông nói. Ojeda trả lời rằng kết quả của những nỗ lực đó sẽ giống như việc có Rust — nhưng rất lâu sau đó

Hellwig tiếp tục rằng việc áp dụng các tính năng giống như Rust có thể được thực hiện dần dần theo thời gian. Nó sẽ "tệ hơn hẳn so với bắt đầu trong Rust", nhưng cộng đồng nhân có một cơ sở mã lớn để quản lý. Anh ấy nói rằng cần phải có một cách để đưa những lợi ích của ngôn ngữ giống như Rust vào tất cả mã C đó. Cook cho biết ông cũng đang thúc đẩy các nhà phát triển trình biên dịch tạo ra các phương ngữ C an toàn hơn

Ts'o đã đưa ra kết luận bằng cách lưu ý rằng thiết kế ngôn ngữ là một dự án nghiên cứu dài hạn; . Torvalds nói rằng anh ấy muốn thấy các nhóm chạy các dịch vụ thử nghiệm tích hợp liên tục để kết hợp thử nghiệm Rust - điều đã xảy ra. Laurent Pinchart nói rằng các nhà phát triển Rust cần sẵn sàng cung cấp hỗ trợ cho cộng đồng nhân trong những ngày đầu; . Torvalds nói thêm rằng Rust cuối cùng không tệ đến thế;

Khi được hỏi về tài liệu, Ojeda nói rằng các nhà phát triển Rust đang cố gắng cải thiện tài liệu đã được thực hiện ở phía C. Cơ chế tài liệu Rust giúp dễ dàng đảm bảo rằng các ví dụ được kiểm tra thực tế, chẳng hạn. Họ đang tuân thủ các quy tắc về cách giải thích các khối không an toàn

Khi hết thời gian, Matthew Wilcox đã hỏi liệu các nhà phát triển nhân có nên viết mã Rust thành ngữ hay liệu họ sẽ viết "C in Rust". Ojeda đã trả lời rằng mã có thể giống C hơn ngay từ đầu; . Gleixner đã hỏi có thể làm gì để ngăn các nhà phát triển sử dụng các tính năng không ổn định (một khi các tính năng được nhân sử dụng đã ổn định);

Nhân Linux có chuyển sang Rust không?

Họ đã vượt qua thử thách. Vào tháng 9 năm 2022, Torvalds nói với tôi, “Trừ khi có điều gì đó kỳ lạ xảy ra, nếu không [Rust] sẽ lọt vào vòng 6. 1. ” Nhân Linux 6. 1 và Rust in it sẽ xuất hiện vào đầu năm 2023 hoặc nếu may mắn và làm tốt thì vào cuối năm 2022 .

Bạn có thể viết các mô-đun hạt nhân trong Rust không?

Đối với hầu hết các mục đích, nếu bạn quan tâm đến việc viết các mô-đun nhân Linux bằng Rust, bạn nên xem https. //github. com/Rust-for-Linux/linux , đây là một nỗ lực để đóng góp quy trình đó cho nhân thượng nguồn.