Mpempe mpe mpe mpe akwa nke atọ maka kernel Linux yana nkwado maka asụsụ Rust

Мигель Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложил для рассмотрения разработчиками ядра Linux третий вариант компонентов для разработки драйверов устройств на языке Rust. Поддержка Rust рассматривается как экспериментальная, но уже согласована для включения в ветку linux-next. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.

Cheta na mgbanwe ndị a tụrụ aro na-eme ka o kwe omume iji Rust dị ka asụsụ nke abụọ maka mmepe ọkwọ ụgbọala na modul kernel. A na-egosi nkwado nchara dị ka nhọrọ nke anaghị enyere ya aka na ndabara na anaghị eme ka nchara nchara dị ka ihe ndabere achọrọ maka kernel. Iji nchara maka mmepe ọkwọ ụgbọ ala ga-enye gị ohere ịmepụta ndị ọkwọ ụgbọ ala dị nchebe ma dị mma na obere mbọ, na-enwere onwe ya pụọ ​​​​na nsogbu dị ka ịnweta ebe nchekwa mgbe ahapụchara ya, enweghị ntụpọ pointer, na ihe nchekwa nchekwa.

A na-enye nchekwa nchekwa na nchara n'oge a na-achịkọta site na ntụle ntụaka, na-edobe ihe nwe ihe na oge ndụ ihe (oke), yana site na nyocha nke izi ezi nke ịnweta ebe nchekwa n'oge mmebe koodu. Nchara na-enyekwa nchebe pụọ na integer njupụta, na-achọ mmalite mmalite nke ụkpụrụ agbanwe agbanwe tupu eji ya, na-edozi njehie nke ọma n'ọbá akwụkwọ ọkọlọtọ, na-etinye echiche nke ntụgharị na mgbanwe na-adịghị agbanwe agbanwe na ndabara, na-enye akara static siri ike iji belata njehie ezi uche dị na ya.

В новом варианте патчей продолжено устранение замечаний, высказанных в процессе обсуждения первой и второй версий патчей. Наиболее заметные изменения:

  • Осуществлён переход на использование в качестве эталонного компилятора стабильного выпуска Rust 1.57 и обеспечена привязка к стабилизированной редакции языка Rust 2021. Ранее патчи были завязаны на бета-ветку Rust и использовали некоторые возможности языка, входящие в категорию нестабильных. Переход на спецификацию Rust 2021 позволил инициировать работу по уходу от использования в патчах таких нестабильных возможностей, как const_fn_transmute, const_panic, const_unreachable_unchecked и core_panic и try_reserve.
  • Продолжено развитие входящего в состав патчей варианта Rust-библиотеки alloc, изменённой для избавления функций распределения памяти от возможных генераций состояния «panic» при возникновении ошибок, таких как нехватка памяти. В новой версии реализованы опции «no_rc» и «no_sync» для отключения функциональности, не используемой в Rust-коде для ядра, делающие библиотеку более модульной. Продолжается работа с основными разработчиками alloc, нацеленная на перенос необходимых для ядра изменения в основной состав библиотеки. В базовую библиотеку Rust (core) перенесена опция «no_fp_fmt_parse», необходимая для работы библиотеки на уровне ядра.
  • Проведена чистка кода для избавления от возможных предупреждений компилятора при сборке ядра в режиме CONFIG_WERROR. При сборке кода на языке Rust включены дополнительные диагностические режимы компилятора и предупреждения линтера Clippy.
  • Предложены абстракции для использования в коде на языке Rust блокировок seqlock (sequence locks), callback-вызовов для управления питанием, I/O Memory (readX/writeX), обработчиков прерываний и потоков, GPIO, доступа к устройствам, драйверам и учётным данным.
  • Расширены средства для разработки драйверов с задействованием перемещаемых мьютексов, битовых итераторов, упрощённых обвязок над указателями, улучшенной диагностики сбоев и инфраструктуры, не зависимой от шины данных.
  • Улучшена работа со ссылками при помощи упрощённого типа Ref, базирующегося на бэкенде refcount_t, использующем одноимённый API ядра для подсчёта ссылок. Поддержка типов Arc и Rc, предоставляемых в штатной библиотеке alloc, удалена и не доступна в коде, выполняемом на уровне ядра (для самой библиотеки подготовлены опции, отключающие данные типы).
  • В состав патчей добавлен вариант драйвера PL061 GPIO, переписанный на Rust. Особенностью драйвера является то, что его реализация практически построчно повторяет имеющийся драйвер GPIO на языке Си. Для разработчиков, желающих познакомиться с созданием драйверов на Rust, подготовлено построчное сравнение, позволяющее понять в какие конструкции на Rust преобразован код на Си.
  • В основную кодовую базу Rust принят rustc_codegen_gcc, бэкенд rustc для GCC, реализующий возможность упреждающей (AOT) компиляции с использованием библиотеки libgccjit. При должном развитии бэкенда он позволит собирать задействованный в ядре Rust-код при помощи GCC.
  • Помимо компаний ARM, Google и Microsoft, интерес к использованию языка Rust в ядре Linux выразила компания Red Hat. Напомним, что Google напрямую обеспечивает поддержку проекта Rust for Linux, развивает новую реализацию механизма межпроцессного взаимодействия Binder на Rust и рассматривает возможность переработки на Rust различных драйверов. Компания Microsoft приступила к реализации драйверов для Hyper-V на Rust. Компания ARM работает над улучшением поддержи Rust для систем на базе процессоров ARM. Компания IBM реализовала поддержку Rust в ядре для систем PowerPC.

isi: opennet.ru

Tinye a comment