Sử dụng Rust cho hệ thống tệp
Mục tiêu
- Dùng hệ thống kiểu của Rust để bắt được nhiều lỗi hơn ngay từ thời điểm biên dịch
- Tự động hóa các tác vụ như dọn dẹp tài nguyên để nâng cao năng suất hơn so với mã C
- Giảm các lỗ hổng liên quan đến bộ nhớ và rút ngắn thời gian gỡ lỗi
Ưu điểm của Rust
- Rust loại bỏ hành vi không xác định và cung cấp khả năng nhìn thấy những gì đang diễn ra bên trong mã
- Có thể chứng minh tính đúng đắn của mã viết bằng Rust, nhờ đó giảm các lỗi cản trở phát triển tính năng
Ví dụ về hệ thống kiểu của Rust
- Hàm
iget_locked() có các yêu cầu phức tạp
- Trong Rust, có thể thay thế bằng hàm
get_or_create_inode(), đồng thời dùng hệ thống kiểu để cưỡng chế các yêu cầu này
Thảo luận về việc đổi tên API
- Vấn đề không khớp tên giữa API C và API Rust
- Có thể không quen thuộc với cộng đồng phát triển hiện có
- Có thể cần đồng bộ tên gọi
Các vấn đề chung
- Cần quyết định liệu các abstraction của Rust sẽ được dùng chung cho mọi hệ thống tệp trong kernel hay chỉ tập trung vào các hệ thống tệp đơn giản được viết bằng Rust
- Có thể phát sinh vấn đề đồng bộ với mã Rust khi mã C tiếp tục tiến hóa
Vấn đề vòng đời đối tượng
- Vòng đời đối tượng có thể khác nhau tùy theo từng hệ thống tệp
- Nếu mã hóa một vòng đời duy nhất vào API Rust, nó có thể không hoạt động với một số hệ thống tệp
Vấn đề của Rust binding
- Không phải mọi hệ thống tệp sẽ chuyển sang Rust ngay lập tức
- Khi mã C tiến hóa, các binding Rust có thể bị hỏng
- Nếu binding Rust bị hỏng, vấn đề đó sẽ thuộc về các nhà phát triển Rust-for-Linux
Kết luận
- Tiếp tục phát triển các binding Rust trong khi vẫn để mã C tiếp tục tiến hóa
- Việc mã hóa nhiều ý nghĩa vào hệ thống kiểu Rust là tốt hay xấu sẽ trở nên rõ ràng hơn theo thời gian
Tóm tắt của GN⁺
- Việc đưa Rust vào hệ thống tệp sẽ giúp cải thiện đáng kể an toàn bộ nhớ và năng suất
- Hệ thống kiểu của Rust có thể cưỡng chế các yêu cầu API phức tạp, qua đó nâng cao tính đúng đắn của mã
- Nếu các nhà phát triển C hiện có không học Rust, có thể phát sinh những khó khăn như vấn đề đồng bộ
- Nếu binding Rust bị hỏng, trách nhiệm khắc phục sẽ thuộc về các nhà phát triển Rust-for-Linux
- Một dự án có chức năng tương tự là Fuchsia OS của Google
1 bình luận
Ý kiến trên Hacker News
Việc mỗi hệ thống tệp quản lý vòng đời inode theo cách khác nhau nhưng lại dùng cùng một hàm để quản lý là đi ngược lại tầng trừu tượng
Có câu hỏi về việc liệu Rust có cần thay đổi để việc gọi C dễ dàng hơn hay không
Chưa rõ liệu API Rust đang bọc API C hay đang tái triển khai nó
Việc thêm Rust vào kernel làm phát sinh thêm độ phức tạp
Cuộc thảo luận rất văn minh
Việc có thêm lựa chọn trong kernel Linux luôn là điều có lợi
Một số bình luận ở cuối trang lwn.net khá thô lỗ
Có thảo luận về vấn đề không khớp tên giữa API C và API Rust