لينڪس ڪنيل ۾ مورچا ڊولپمينٽ اوزار شامل ڪرڻ جي مسئلي تي بحث ڪرڻ جي تجويز

Ник Десанье (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» تيار ڪيل لينڪس ڪرنل لاءِ لوڊ ڪرڻ لائق ماڊيولز لکڻ لاءِ ٽول ڪٽ Rust ٻوليءَ ۾، سيڪيورٽي کي وڌائڻ لاءِ انٽرفيس ۽ ڪرنل ڍانچي مٿان خلاصي پرت جو هڪ سيٽ استعمال ڪندي. پرت خودڪار طور تي ٺاهيل آھن موجوده ڪنييل ھيڊر فائلن جي بنياد تي استعمال ڪندي استعمال ڪندي bingen. ڪلنگ کي پرت ٺاهڻ لاء استعمال ڪيو ويندو آهي. interlayers کان علاوه، گڏ ڪيل ماڊل استعمال ڪندا آهن staticlib پيڪيج.
  • Исследователи из Китайского университета в Гонконге ترقي ڪرڻ проект для разработки на Rust драйверов для встраиваемых систем и устройств интернета вещей, который также использует bindgen для генерации прослоек на основе заголовочных файлов ядра. Фреймворк позволяет добиться повышения безопасности драйверов без внесения изменений в ядро — вместо создания в ядре дополнительных уровней изоляции для драйверов, предлагается блокировать проблемы на этапе компиляции, применяя более безопасный язык Rust. Предполагается, что подобный подход может оказаться востребован производителями оборудования, разрабатывающими проприетарные драйверы на скорую руку без проведения должного аудита.
  • Разработчики фреймворка C2Rust для трансляции Си-кода на Rust, پورو ڪريو эксперименты по преобразованию модулей ядра с минимальными ручными правками. Из проблем отмечается применение во многих частях ядра кода, в котором используются расширения GCC, пока не поддерживаемые в C2Rust. Для решения данной проблемы в C2Rust планируется добавить поддержку GCC атрибутов inline, cold, alias, used и section, а также расширить возможности inline-ассемблера и решить проблемы со структурами, которые одновременно выровнены и упакованы (например, xregs_state). Из существенных проблем, требующих ручной работы, отмечается невозможность транслировать нетривиальные Си-макросы в макросы Rust и необходимость переопределения типов, так как C2Rust транслирует Си-типы в определения в пакете libc, но этот пакет нельзя использовать в модулях ядра.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو