Imọran fun sisọ ọrọ ti fifi awọn irinṣẹ idagbasoke Rust kun si ekuro Linux

Ник Десанье (Nick Desaulniers), занимающийся в Google обеспечением atilẹyin сборки ядра Linux с использованием компилятора Clang и также iranlọwọ исправлять ошибки в компиляторе Rust, daba провести на конференции Linux Plumbers Conference 2020 сессию для обсуждения предоставления возможности разработки компонентов ядра на языке Rust. Ник занимается проведением микро-конференции, посвящённой LLVM, и считает, что было бы неплохо обсудить технические аспекты возможной интеграции поддержки Rust в ядро (им уже подготовлен рабочий прототип для KBuild) и понять нужно ли вообще добавлять такую поддержку и какие ограничения по использованию Rust следует принять.

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

  • Разработчики из компании «Fish in a Barrel» pese sile Ohun elo irinṣẹ fun kikọ awọn modulu fifuye fun ekuro Linux ni ede Rust, ni lilo ṣeto ti awọn fẹlẹfẹlẹ áljẹbrà lori awọn atọkun ati awọn ẹya kernel lati mu aabo pọ si. Awọn fẹlẹfẹlẹ jẹ ipilẹṣẹ laifọwọyi da lori awọn faili akọsori ekuro ti o wa tẹlẹ nipa lilo ohun elo naa dipọ. Clang ti lo lati kọ awọn fẹlẹfẹlẹ. Ni afikun si awọn interlayers, awọn modulu ti o pejọ lo package staticlib.
  • Исследователи из Китайского университета в Гонконге se agbekale проект для разработки на Rust драйверов для встраиваемых систем и устройств интернета вещей, который также использует bindgen для генерации прослоек на основе заголовочных файлов ядра. Фреймворк позволяет добиться повышения безопасности драйверов без внесения изменений в ядро — вместо создания в ядре дополнительных уровней изоляции для драйверов, предлагается блокировать проблемы на этапе компиляции, применяя более безопасный язык Rust. Предполагается, что подобный подход может оказаться востребован производителями оборудования, разрабатывающими проприетарные драйверы на скорую руку без проведения должного аудита.
  • Разработчики фреймворка C2Rust для трансляции Си-кода на Rust, gbe jade эксперименты по преобразованию модулей ядра с минимальными ручными правками. Из проблем отмечается применение во многих частях ядра кода, в котором используются расширения GCC, пока не поддерживаемые в C2Rust. Для решения данной проблемы в C2Rust планируется добавить поддержку GCC атрибутов inline, cold, alias, used и section, а также расширить возможности inline-ассемблера и решить проблемы со структурами, которые одновременно выровнены и упакованы (например, xregs_state). Из существенных проблем, требующих ручной работы, отмечается невозможность транслировать нетривиальные Си-макросы в макросы Rust и необходимость переопределения типов, так как C2Rust транслирует Си-типы в определения в пакете libc, но этот пакет нельзя использовать в модулях ядра.

orisun: opennet.ru

Fi ọrọìwòye kun