Đề xuất thảo luận về vấn đề bổ sung công cụ phát triển Rust vào nhân Linux

Nick Desagnier (Nick Desaulniers), người làm việc tại Google để cung cấp hỗ trợ xây dựng nhân Linux bằng trình biên dịch Clang và cả giúp đỡ sửa lỗi trong trình biên dịch Rust, đề nghị tổ chức tại một hội nghị Hội nghị thợ sửa ống nước Linux 2020 phiên thảo luận về khả năng phát triển các thành phần kernel trong Rust. Nick đang tổ chức một hội nghị vi mô dành riêng cho LLVM và tin rằng sẽ rất thú vị khi thảo luận về các khía cạnh kỹ thuật của khả năng tích hợp hỗ trợ Rust vào kernel (anh ấy đã chuẩn bị một nguyên mẫu hoạt động cho KBuild) và hiểu liệu sự hỗ trợ đó có nên hay không được thêm vào và những hạn chế nào đối với việc sử dụng Rust nên được chấp nhận.

Chúng ta hãy nhớ lại điều đó trong một cuộc thảo luận gần đây tại Hội nghị thượng đỉnh nguồn mở và Linux nhúng, Linus Torvalds không loại trừ sự xuất hiện của các ràng buộc để phát triển các hệ thống con hạt nhân không lõi (ví dụ: trình điều khiển) trong các ngôn ngữ như Rust. Khả năng phát triển trình điều khiển trong Rust sẽ cho phép chúng tôi tạo ra các 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. Hiện đã có một số dự án của bên thứ ba triển khai tính năng này:

  • Các nhà phát triển từ công ty “Cá trong thùng” chuẩn bị một bộ công cụ để viết các mô-đun có thể tải cho nhân Linux bằng ngôn ngữ Rust, sử dụng một tập hợp các lớp trừu tượng trên các giao diện và cấu trúc hạt nhân để tăng tính bảo mật. Các lớp được tạo tự động dựa trên các tệp tiêu đề kernel hiện có bằng tiện ích chất kết dính. Clang được sử dụng để xây dựng các lớp. Ngoài các lớp xen kẽ, các mô-đun được lắp ráp còn sử dụng gói staticlib.
  • Các nhà nghiên cứu từ Đại học Trung Quốc Hồng Kông phát triển một dự án phát triển trình điều khiển cho các hệ thống nhúng và thiết bị Internet of Things trong Rust, cũng sử dụng bindgen để tạo các lớp dựa trên các tệp tiêu đề kernel. Khung này cho phép bạn cải thiện tính bảo mật của trình điều khiển mà không cần thực hiện thay đổi đối với kernel - thay vì tạo các mức cách ly bổ sung cho trình điều khiển trong kernel, nó được đề xuất để chặn các sự cố ở giai đoạn biên dịch, sử dụng ngôn ngữ Rust an toàn hơn. Người ta cho rằng cách tiếp cận như vậy có thể được yêu cầu bởi các nhà sản xuất thiết bị đang phát triển trình điều khiển độc quyền một cách vội vàng mà không tiến hành kiểm tra thích hợp.
  • Nhà phát triển khung C2Rỉ sét để phát mã C tới Rust, hạnh kiểm thử nghiệm chuyển đổi các mô-đun hạt nhân với các chỉnh sửa thủ công tối thiểu. Một trong những vấn đề được lưu ý là việc sử dụng nhiều phần nhân mã sử dụng các phần mở rộng GCC chưa được hỗ trợ trong C2Rust. Để giải quyết vấn đề này, C2Rust có kế hoạch bổ sung hỗ trợ cho các thuộc tính GCC nội tuyến, lạnh, bí danh, được sử dụng và phần, cũng như mở rộng khả năng của trình biên dịch nội tuyến và giải quyết các vấn đề với các cấu trúc được căn chỉnh và đóng gói (ví dụ: xregs_state) . Các vấn đề quan trọng đòi hỏi phải làm việc thủ công bao gồm không có khả năng dịch các macro C không tầm thường sang macro Rust và cần phải xác định lại các loại, vì C2Rust dịch các loại C thành các định nghĩa trong gói libc, nhưng gói này không thể được sử dụng trong các mô-đun hạt nhân.

Nguồn: opennet.ru

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