Phiên bản thứ ba của các bản vá dành cho nhân Linux có hỗ trợ ngôn ngữ Rust

Miguel Ojeda, tác giả của dự án Rust-for-Linux, đã đề xuất tùy chọn thành phần thứ ba để phát triển trình điều khiển thiết bị bằng ngôn ngữ Rust để các nhà phát triển nhân Linux xem xét. Hỗ trợ Rust được coi là thử nghiệm, nhưng đã được thống nhất để đưa vào nhánh linux-next. Sự phát triển này được tài trợ bởi Google và ISRG (Nhóm nghiên cứu bảo mật Internet), nhóm sáng lập dự án Let's Encrypt và thúc đẩy HTTPS cũng như phát triển các công nghệ để cải thiện tính bảo mật của Internet.

Hãy nhớ lại rằng những thay đổi được đề xuất giúp có thể sử dụng Rust làm ngôn ngữ thứ hai để phát triển trình điều khiển và mô-đun hạt nhân. Hỗ trợ Rust được trình bày dưới dạng tùy chọn không được bật theo mặc định và không dẫn đến việc Rust được đưa vào làm phần phụ thuộc xây dựng bắt buộc cho kernel. Sử dụng Rust để phát triển trình điều khiển sẽ cho phép bạn tạo trình điều khiển an toàn hơn và tốt hơn với nỗ lực tối thiểu, không gặp phải các vấn đề như truy cập bộ nhớ sau khi giải phóng, hủy tham chiếu con trỏ null và lỗi tràn bộ đệm.

Xử lý an toàn bộ nhớ được cung cấp trong Rust tại thời điểm biên dịch thông qua kiểm tra tham chiếu, theo dõi quyền sở hữu đối tượng và thời gian tồn tại của đối tượng (phạm vi), cũng như thông qua đánh giá tính chính xác của quyền truy cập bộ nhớ trong quá trình thực thi mã. Rust cũng cung cấp khả năng bảo vệ chống tràn số nguyên, yêu cầu khởi tạo bắt buộc các giá trị biến trước khi sử dụng, xử lý lỗi tốt hơn trong thư viện chuẩn, áp dụng khái niệm tham chiếu và biến bất biến theo mặc định, cung cấp kiểu gõ tĩnh mạnh để giảm thiểu lỗi logic.

Phiên bản mới của các bản vá tiếp tục loại bỏ các nhận xét được đưa ra trong quá trình thảo luận về phiên bản thứ nhất và thứ hai của các bản vá. Những thay đổi đáng chú ý nhất:

  • Quá trình chuyển đổi đã được thực hiện sang sử dụng bản phát hành ổn định của Rust 1.57 làm trình biên dịch tham chiếu và đã cung cấp liên kết đến phiên bản ổn định của ngôn ngữ Rust 2021. Trước đây, các bản vá được gắn với nhánh beta của Rust và sử dụng một số tính năng ngôn ngữ được xếp vào loại không ổn định. Việc chuyển đổi sang đặc tả Rust 2021 cho phép chúng tôi bắt đầu công việc tránh sử dụng các tính năng không ổn định như vậy trong các bản vá như const_fn_transmute, const_panic, const_unavailable_unchecked, core_panic và try_reserve.
  • Sự phát triển của phiên bản cấp phát của thư viện Rust có trong các bản vá vẫn tiếp tục được sửa đổi để loại bỏ các chức năng cấp phát bộ nhớ có thể tạo ra trạng thái “hoảng loạn” khi xảy ra lỗi, chẳng hạn như hết bộ nhớ. Phiên bản mới triển khai các tùy chọn “no_rc” và “no_sync” để tắt chức năng không được sử dụng trong mã Rust kernel, làm cho thư viện trở nên mô-đun hơn. Công việc vẫn tiếp tục với các nhà phát triển phân bổ chính, nhằm mục đích chuyển những thay đổi cần thiết cho kernel sang thư viện chính. Tùy chọn “no_fp_fmt_parse”, cần thiết để thư viện hoạt động ở cấp kernel, đã được chuyển sang thư viện cơ sở Rust (lõi).
  • Mã đã được làm sạch để loại bỏ các cảnh báo có thể xảy ra của trình biên dịch khi xây dựng kernel ở chế độ CONFIG_WERROR. Khi xây dựng mã trong Rust, các chế độ chẩn đoán trình biên dịch bổ sung và cảnh báo kẻ nói dối Clippy sẽ được bật.
  • Tính trừu tượng được đề xuất sử dụng trong mã Rust cho seqlocks (khóa trình tự), lệnh gọi lại để quản lý nguồn, Bộ nhớ I/O (readX/writeX), trình xử lý ngắt và luồng, GPIO, quyền truy cập vào thiết bị, trình điều khiển và thông tin xác thực.
  • Các công cụ để phát triển trình điều khiển đã được mở rộng để bao gồm các mutex có thể định vị lại, bộ lặp bit, liên kết con trỏ đơn giản hóa, chẩn đoán lỗi được cải thiện và cơ sở hạ tầng độc lập với bus dữ liệu.
  • Cải thiện công việc với các liên kết sử dụng loại Tham chiếu được đơn giản hóa, dựa trên chương trình phụ trợ refcount_t, sử dụng API kernel cùng tên để đếm các tham chiếu. Hỗ trợ cho các loại Arc và Rc được cung cấp trong thư viện phân bổ tiêu chuẩn đã bị xóa và không có sẵn trong mã được thực thi ở cấp hạt nhân (các tùy chọn đã được chuẩn bị cho chính thư viện để vô hiệu hóa các loại này).
  • Các bản vá bao gồm một phiên bản trình điều khiển GPIO PL061, được viết lại bằng Rust. Điểm đặc biệt của trình điều khiển là việc triển khai nó gần như lặp lại từng dòng một trình điều khiển GPIO hiện có bằng ngôn ngữ C. Đối với các nhà phát triển muốn làm quen với việc tạo trình điều khiển trong Rust, một bản so sánh từng dòng đã được chuẩn bị để cho phép họ hiểu cấu trúc nào trong Rust mà mã C được chuyển đổi thành.
  • Cơ sở mã Rust chính đã sử dụng Rustc_codegen_gcc, một chương trình phụ trợ Rustc cho GCC thực hiện quá trình biên dịch trước thời hạn (AOT) bằng thư viện libgccjit. Với sự phát triển phù hợp của phần phụ trợ, nó sẽ cho phép bạn thu thập mã Rust liên quan đến kernel bằng GCC.
  • Ngoài ARM, Google và Microsoft, Red Hat cũng bày tỏ sự quan tâm đến việc sử dụng ngôn ngữ Rust trong nhân Linux. Chúng ta hãy nhớ lại rằng Google trực tiếp cung cấp hỗ trợ cho dự án Rust dành cho Linux, đang phát triển một triển khai mới cho cơ chế giao tiếp liên tiến trình Binder trong Rust và đang xem xét khả năng làm lại các trình điều khiển khác nhau trong Rust. Microsoft đã bắt đầu triển khai trình điều khiển cho Hyper-V trong Rust. ARM đang nỗ lực cải thiện khả năng hỗ trợ Rust cho các hệ thống dựa trên ARM. IBM đã triển khai hỗ trợ Rust trong kernel cho các hệ thống PowerPC.

Nguồn: opennet.ru

Thêm một lời nhận xét