Khung viết trình điều khiển an toàn cho nhân Linux trong Rust

Josh Triplett, người làm việc tại Intel và nằm trong ủy ban giám sát sự phát triển của Crates.io, phát biểu tại Hội nghị thượng đỉnh công nghệ nguồn mở giới thiệu một nhóm làm việc nhằm mục đích đưa ngôn ngữ Rust ngang hàng với ngôn ngữ C trong lĩnh vực lập trình hệ thống.

Trong một nhóm làm việc đang trong quá trình thành lập, các nhà phát triển Rust cùng với các kỹ sư của Intel sẽ chuẩn bị các thông số kỹ thuật xác định chức năng cần triển khai trong Rust để lập trình hệ thống. Lập trình hệ thống thường yêu cầu thao tác ở mức độ thấp, chẳng hạn như thực thi các lệnh bộ xử lý đặc quyền và thu thập thông tin chi tiết về trạng thái của bộ xử lý. Trong số các tính năng tương tự đã được phát triển cho Rust, có hỗ trợ cho các cấu trúc không tên, liên kết, chèn ngôn ngữ hợp ngữ (macro “asm!”) và định dạng số dấu phẩy động BFLOAT16.

Josh tin rằng tương lai của lập trình hệ thống thuộc về Rust và ngôn ngữ C trong thực tế hiện đại đang khẳng định vị trí mà trong những năm qua đã bị Assembly chiếm giữ. rỉ sét
không chỉ giúp các nhà phát triển thoát khỏi những vấn đề cố hữu trong ngôn ngữ C phát sinh do làm việc với bộ nhớ ở mức độ thấp mà còn tạo cơ hội sử dụng nó trong việc phát triển các mô hình lập trình hiện đại.

Suốt trong thảo luận biểu diễn
Josh nảy ra ý tưởng bổ sung khả năng phát triển trình điều khiển trong nhân Linux bằng ngôn ngữ Rust, điều này có thể 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, null hủy đăng ký con trỏ và lỗi tràn bộ đệm.

Greg Kroah-Hartman, người chịu trách nhiệm duy trì nhánh ổn định của hạt nhân Linux, bày tỏ sự sẵn sàng bổ sung một khung phát triển trình điều khiển bằng ngôn ngữ Rust vào hạt nhân nếu nó có những ưu điểm thực sự so với C, chẳng hạn như nó sẽ cung cấp khả năng bảo mật. các ràng buộc trên API hạt nhân. Ngoài ra, Greg chỉ coi framework này là một tùy chọn, không hoạt động theo mặc định, để không đưa Rust vào làm phần phụ thuộc xây dựng trên kernel.

Hóa ra một số đội đã làm việc theo hướng này. Ví dụ: các nhà phát triển từ công ty “Fish in a Barrel” 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.

Song song đang phát triển Một dự án khác tập trung vào phát triển trình điều khiển cho các hệ thống nhúng và thiết bị IoT, 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.

Không phải tất cả chức năng dự kiến ​​đều đã được triển khai nhưng khung này đã khá phù hợp cho công việc và được sử dụng để viết trình điều khiển hoạt động cho bộ điều khiển Ethernet USB LAN9512 được cung cấp trong bo mạch Raspberry Pi 3. Trình điều khiển smsc95xx hiện có, được viết bằng Ngôn ngữ C. Cần lưu ý rằng kích thước mô-đun và chi phí chung từ các thành phần thời gian chạy khi phát triển trình điều khiển trong Rust là không đáng kể, điều này cho phép sử dụng khung này cho các thiết bị có nguồn lực hạn chế.

Nguồn: opennet.ru

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