റസ്റ്റ് ഭാഷയ്ക്കുള്ള പിന്തുണയോടെ ലിനക്സ് കേർണലിനുള്ള പാച്ചുകളുടെ മൂന്നാം പതിപ്പ്

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

ഡ്രൈവറുകളും കേർണൽ മൊഡ്യൂളുകളും വികസിപ്പിക്കുന്നതിന് രണ്ടാമത്തെ ഭാഷയായി റസ്റ്റ് ഉപയോഗിക്കുന്നത് സാധ്യമാക്കാൻ നിർദ്ദേശിച്ച മാറ്റങ്ങൾ സാധ്യമാക്കുന്നു എന്നത് ഓർക്കുക. സ്ഥിരസ്ഥിതിയായി പ്രവർത്തനക്ഷമമാക്കാത്ത ഒരു ഓപ്‌ഷനായാണ് റസ്റ്റ് സപ്പോർട്ട് അവതരിപ്പിക്കുന്നത്, കൂടാതെ കേർണലിന് ആവശ്യമായ ബിൽഡ് ഡിപൻഡൻസിയായി റസ്റ്റ് ഉൾപ്പെടുത്തിയിട്ടില്ല. ഡ്രൈവർ ഡെവലപ്‌മെന്റിനായി റസ്റ്റ് ഉപയോഗിക്കുന്നത്, ഫ്രീയിംഗിനു ശേഷമുള്ള മെമ്മറി ആക്‌സസ്, നൾ പോയിന്റർ ഡീറഫറൻസുകൾ, ബഫർ ഓവർറൺസ് തുടങ്ങിയ പ്രശ്‌നങ്ങളിൽ നിന്ന് മുക്തമായ, കുറഞ്ഞ പ്രയത്നത്തിൽ സുരക്ഷിതവും മികച്ചതുമായ ഡ്രൈവറുകൾ സൃഷ്ടിക്കാൻ നിങ്ങളെ അനുവദിക്കും.

റഫറൻസ് പരിശോധന, ഒബ്‌ജക്റ്റ് ഉടമസ്ഥത, ഒബ്‌ജക്റ്റ് ലൈഫ് ടൈം (സ്കോപ്പ്) എന്നിവയുടെ ട്രാക്ക് സൂക്ഷിക്കുന്നതിലൂടെയും കോഡ് എക്‌സിക്യൂഷൻ സമയത്ത് മെമ്മറി ആക്‌സസിന്റെ കൃത്യത വിലയിരുത്തുന്നതിലൂടെയും കംപൈൽ സമയത്ത് റസ്റ്റിൽ മെമ്മറി-സേഫ് ഹാൻഡ്‌ലിംഗ് നൽകുന്നു. റസ്റ്റ് പൂർണ്ണസംഖ്യ ഓവർഫ്ലോയ്‌ക്കെതിരെ സംരക്ഷണം നൽകുന്നു, ഉപയോഗിക്കുന്നതിന് മുമ്പ് വേരിയബിൾ മൂല്യങ്ങൾ നിർബന്ധമായും ആരംഭിക്കേണ്ടതുണ്ട്, സ്റ്റാൻഡേർഡ് ലൈബ്രറിയിൽ പിശകുകൾ നന്നായി കൈകാര്യം ചെയ്യുന്നു, സ്ഥിരസ്ഥിതിയായി മാറ്റമില്ലാത്ത റഫറൻസുകളുടെയും വേരിയബിളുകളുടെയും ആശയം പ്രയോഗിക്കുന്നു, ലോജിക്കൽ പിശകുകൾ കുറയ്ക്കുന്നതിന് ശക്തമായ സ്റ്റാറ്റിക് ടൈപ്പിംഗ് വാഗ്ദാനം ചെയ്യുന്നു.

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

  • Осуществлён переход на использование в качестве эталонного компилятора стабильного выпуска 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.

അവലംബം: opennet.ru

ഒരു അഭിപ്രായം ചേർക്കുക