Мигель Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложил для рассмотрения разработчиками ядра Linux третий вариант компонентов для разработки драйверов устройств на языке Rust. Поддержка Rust рассматривается как экспериментальная, но уже согласована для включения в ветку linux-next. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.
ຈື່ໄວ້ວ່າການປ່ຽນແປງທີ່ສະເຫນີເຮັດໃຫ້ມັນສາມາດນໍາໃຊ້ Rust ເປັນພາສາທີສອງສໍາລັບການພັດທະນາໄດເວີແລະໂມດູນ kernel. ການສະຫນັບສະຫນູນ Rust ໄດ້ຖືກນໍາສະເຫນີເປັນທາງເລືອກທີ່ບໍ່ໄດ້ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນແລະບໍ່ໄດ້ສົ່ງຜົນໃຫ້ Rust ຖືກລວມເຂົ້າໃນການກໍ່ສ້າງທີ່ຕ້ອງການສໍາລັບ kernel. ການນໍາໃຊ້ Rust ສໍາລັບການພັດທະນາຄົນຂັບຈະຊ່ວຍໃຫ້ທ່ານສ້າງໄດເວີທີ່ປອດໄພແລະດີກວ່າດ້ວຍຄວາມພະຍາຍາມຫນ້ອຍທີ່ສຸດ, ໂດຍບໍ່ມີບັນຫາເຊັ່ນ: ການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາຫຼັງຈາກການປ່ອຍຕົວ, ການປະຕິເສດຕົວຊີ້ null, ແລະ buffer overruns.
Rust ບັງຄັບໃຊ້ຄວາມປອດໄພຂອງຫນ່ວຍຄວາມຈໍາໃນເວລາລວບລວມໂດຍຜ່ານການກວດສອບການອ້າງອິງ, ການເປັນເຈົ້າຂອງວັດຖຸແລະການຕິດຕາມຕະຫຼອດຊີວິດຂອງວັດຖຸ (ຂອບເຂດ), ແລະໂດຍການປະເມີນຄວາມຖືກຕ້ອງຂອງການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາໃນເວລາແລ່ນ. Rust ຍັງສະຫນອງການປ້ອງກັນການ overflows integer, ຮຽກຮ້ອງໃຫ້ຄ່າຕົວແປໄດ້ຖືກເລີ່ມຕົ້ນກ່ອນທີ່ຈະນໍາໃຊ້, ມີການຈັດການຄວາມຜິດພາດທີ່ດີກວ່າໃນຫ້ອງສະຫມຸດມາດຕະຖານ, ໃຊ້ແນວຄວາມຄິດຂອງການອ້າງອີງທີ່ບໍ່ປ່ຽນແປງແລະຕົວແປໂດຍຄ່າເລີ່ມຕົ້ນ, ແລະສະຫນອງການພິມຄົງທີ່ທີ່ເຂັ້ມແຂງເພື່ອຫຼຸດຜ່ອນຄວາມຜິດພາດຢ່າງມີເຫດຜົນ.
В новом варианте патчей продолжено устранение замечаний, высказанных в процессе обсуждения первой и второй версий патчей. Наиболее заметные изменения:
- Осуществлён переход на использование в качестве эталонного компилятора стабильного выпуска 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