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

Мигель Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложил для рассмотрения разработчиками ядра Linux обновлённый вариант компонентов для разработки драйверов устройств на языке Rust. Поддержка Rust рассматривается как экспериментальная, но уже согласована для включения в ветку linux-next. В новом варианте устранены замечания, высказанные в процессе обсуждения первой версии патчей. Линус Торвальдс уже подключился к обсуждению и предложил изменить логику обработки некоторых битовых операций.

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.

Наиболее заметные изменения в новой версии патчей:

  • Код для распределения памяти избавлен от возможных генераций состояния «panic» при возникновении ошибок, таких как нехватка памяти. В состав включён вариант Rust-библиотеки alloc, в которой переделан код для обработки сбоев, но конечной целью является перенос в основную редакцию alloc всех возможностей, необходимых для ядра (изменения уже подготовлены и переданы в состав стандартной библиотеки Rust).
  • Вместо ночных сборок для компиляции ядра с поддержкой Rust теперь можно использовать бета выпуски и стабильные релизы компилятора rustc. В настоящий момент в качестве эталонного компилятора используется rustc 1.54-beta1, но после выхода релиза 1.54 в конце месяца, в качестве эталонного будет поддерживаться именно он.
  • Добавлена поддержка написания тестов с использованием штатного для Rust атрибута «#[test]» и возможность применения doctests для документирования тестов.
  • Добавлена поддержка архитектур ARM32 и RISCV в дополнение к ранее поддерживаемым x86_64 и ARM64.
  • Улучшены реализации GCC Rust (GCC-фронтэнда для Rust) и rustc_codegen_gcc (бэкенд rustc для GCC), который теперь проходит все базовые тесты.
  • Преложен новый уровень абстракции для использования в программах на языке Rust механизмов ядра, написанных на языке Си, таких как красно-чёрное дерево, объекты с подсчётом ссылок, создание файловых дескрипторов, задачи, файлы и векторы ввода/вывода.
  • В компонентах для разработки драйверов улучшена поддержка модуля «file_operations», макроса «module!», регистрации макросов и рудиментарных драйверов (probe и remove).
  • В Binder реализована поддержка передачи файловых дескрипторов и LSM-хуков.
  • Предложен более функциональный пример драйвера на Rust — bcm2835-rng для аппаратного генератора случайных чисел плат Raspberry Pi.

Дополнительно упоминаются проекты некоторых компаний, связанные с использованием Rust в ядре:

  • Компания Microsoft выразила интерес к участию в работе по интеграции поддержки Rust в ядро Linux и готова в ближайшие месяцы предоставить реализации драйверов для Hyper-V на Rust.
  • Компания ARM работает над улучшением поддержи Rust для систем на базе процессоров ARM. Проекту Rust уже предложены изменения, переводящие 64-разрядные системы ARM в число платформ первого уровня поддержки (Tier-1).
  • Компания Google напрямую обеспечивает поддержку проекта Rust for Linux, развивает новую реализацию механизма межпроцессного взаимодействия Binder на Rust и рассматривает возможность переработки на Rust различных драйверов. Через ISRG (Internet Security Research Group) компания Google обеспечила финансирование работы по интеграции в ядро Linux поддержки Rust.
  • Компания IBM реализована поддержку Rust в ядре для систем PowerPC.
  • Лаборатория LSE (Systems Research Laboratory) разработала SPI-драйвер на Rust.

Nguồn: opennet.ru

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