ການສະເຫນີສໍາລັບການປຶກສາຫາລືບັນຫາຂອງການເພີ່ມເຄື່ອງມືພັດທະນາ Rust ກັບ Linux kernel

Ник Десанье (Nick Desaulniers), занимающийся в Google обеспечением ສະຫນັບສະຫນູນ сборки ядра Linux с использованием компилятора Clang и также ຊ່ວຍເຫຼືອ исправлять ошибки в компиляторе Rust, ແນະນໍາ провести на конференции Linux Plumbers Conference 2020 сессию для обсуждения предоставления возможности разработки компонентов ядра на языке Rust. Ник занимается проведением микро-конференции, посвящённой LLVM, и считает, что было бы неплохо обсудить технические аспекты возможной интеграции поддержки Rust в ядро (им уже подготовлен рабочий прототип для KBuild) и понять нужно ли вообще добавлять такую поддержку и какие ограничения по использованию Rust следует принять.

Напомним, что в недавней дискуссии на конференции «Open Source Summit and Embedded Linux» Линус Торвальдс не исключил появление привязок для разработки неосновных подсистем ядра (например, драйверов) на таких языках как Rust. Возможность разработки драйверов на языке Rust позволила бы с минимальными усилиями создавать безопасные и более качественные драйверы, избавленные от таких проблем, как обращение к области памяти после её освобождения, разыменование нулевых указателей и выход за границы буфера. Уже существует несколько сторонних проектов по реализации такой возможности:

  • Разработчики из компании «Fish in a Barrel» ກະກຽມ ຊຸດເຄື່ອງມືສໍາລັບການຂຽນໂມດູນທີ່ສາມາດໂຫຼດໄດ້ສໍາລັບ Linux kernel ໃນພາສາ Rust, ນໍາໃຊ້ຊຸດຂອງຊັ້ນທີ່ບໍ່ມີຕົວຕົນໃນໄລຍະການໂຕ້ຕອບແລະໂຄງສ້າງ kernel ເພື່ອເພີ່ມຄວາມປອດໄພ. ຊັ້ນຂໍ້ມູນຖືກສ້າງຂື້ນໂດຍອັດຕະໂນມັດໂດຍອີງໃສ່ໄຟລ໌ສ່ວນຫົວ kernel ທີ່ມີຢູ່ໂດຍໃຊ້ປະໂຫຍດ ຜູກມັດ. Clang ຖືກນໍາໃຊ້ເພື່ອສ້າງຊັ້ນ. ນອກເຫນືອໄປຈາກ interlayers, ໂມດູນປະກອບໃຊ້ຊຸດ staticlib.
  • Исследователи из Китайского университета в Гонконге ພັດທະນາ проект для разработки на Rust драйверов для встраиваемых систем и устройств интернета вещей, который также использует bindgen для генерации прослоек на основе заголовочных файлов ядра. Фреймворк позволяет добиться повышения безопасности драйверов без внесения изменений в ядро — вместо создания в ядре дополнительных уровней изоляции для драйверов, предлагается блокировать проблемы на этапе компиляции, применяя более безопасный язык Rust. Предполагается, что подобный подход может оказаться востребован производителями оборудования, разрабатывающими проприетарные драйверы на скорую руку без проведения должного аудита.
  • Разработчики фреймворка C2Rust для трансляции Си-кода на Rust, ປະຕິບັດ эксперименты по преобразованию модулей ядра с минимальными ручными правками. Из проблем отмечается применение во многих частях ядра кода, в котором используются расширения GCC, пока не поддерживаемые в C2Rust. Для решения данной проблемы в C2Rust планируется добавить поддержку GCC атрибутов inline, cold, alias, used и section, а также расширить возможности inline-ассемблера и решить проблемы со структурами, которые одновременно выровнены и упакованы (например, xregs_state). Из существенных проблем, требующих ручной работы, отмечается невозможность транслировать нетривиальные Си-макросы в макросы Rust и необходимость переопределения типов, так как C2Rust транслирует Си-типы в определения в пакете libc, но этот пакет нельзя использовать в модулях ядра.

ແຫຼ່ງຂໍ້ມູນ: opennet.ru

ເພີ່ມຄວາມຄິດເຫັນ