रस्टमा लिनक्स कर्नेलका लागि सुरक्षित ड्राइभरहरू लेख्नको लागि फ्रेमवर्क

Джош Триплет (Josh Triplett), работающий в компании Intel и входящий в комитет, курирующий развитие Crates.io, в своём выступлении на конференции Open Source Technology Summit परिचय рабочую группу, нацеленную на доведение языка Rust до паритета с языком Си в области системного программирования.

В рабочей группе, которая находится в процессе создания, разработчики Rust совместно с инженерами из компании Intel подготовят спецификации с определением функциональности, которую необходимо реализовать в Rust для системного программирования. Системное программирование часто требует низкоуровневых манипуляций, таких как выполнение привилегированных процессорных инструкций и получение детальных сведений о состоянии процессора. Из уже развиваемых для Rust подобных возможностей отмечается поддержка неименованных структур, объединений (union), ассемблерных вставок (макрос «asm!») и формата чисел с плавающей запятой BFLOAT16.

Джош считает, что будущее системного программирования за Rust, а язык Си в современных реалиях претендует на место, которое в прошлые годы занимал Ассемблер. Rust
не только избавляет разработчиков от свойственных языку Си проблем, возникающих из-за низкоуровневой работы с памятью, но и предоставляет возможность применения при разработке современных парадигм программирования.

समयमा छलफलहरू प्रदर्शन
Джоша была высказана идея добавления в ядро Linux возможности разработки драйверов на языке Rust, что позволит с минимальными усилиями создавать безопасные и более качественные драйверы, избавленные от таких проблем, как обращение к области памяти после её освобождения, разыменование нулевых указателей и выход за границы буфера.

Грег Кроа-Хартман (Greg Kroah-Hartman), отвечающий за поддержку стабильной ветки ядра Linux, выразил готовность добавить в ядро фреймворк для разработки драйверов на языке Rust, если он будет обладать реальными преимуществами по сравнению с Си, например, будет предоставлять безопасные обвязки над API ядра. Кроме того, Грег рассматривает данный фреймворк только как опцию, не активную по умолчанию, чтобы не включать Rust в число сборочных зависимостей к ядру.

Оказалось, что несколько команд уже работают в данном направлении. Например, разработчики из компании «Fish in a Barrel» तयार रस्ट भाषामा लिनक्स कर्नेलका लागि लोड गर्न मिल्ने मोड्युलहरू लेख्नको लागि टुलकिट, सुरक्षा बढाउन इन्टरफेस र कर्नेल संरचनाहरूमा सार तहहरूको सेट प्रयोग गरेर। उपयोगिता प्रयोग गरेर अवस्थित कर्नेल हेडर फाइलहरूमा आधारित तहहरू स्वचालित रूपमा उत्पन्न हुन्छन् bingen। तहहरू निर्माण गर्न क्ल्याङ प्रयोग गरिन्छ। इन्टरलेयरहरूको अतिरिक्त, एसेम्बल मोड्युलहरूले स्टेटिकलिब प्याकेज प्रयोग गर्दछ।

समानान्तर विकास गर्दैछ ещё один проект, сосредоточенный на разработке драйверов для встраиваемых систем и устройств интернета вещей, который также использует bindgen для генерации прослоек на основе заголовочных файлов ядра. Фреймворк позволяет добиться повышения безопасности драйверов без внесения изменений в ядро — вместо создания в ядре дополнительных уровней изоляции для драйверов, предлагается блокировать проблемы на этапе компиляции, применяя более безопасный язык Rust. Предполагается, что подобный подход может оказаться востребован производителями оборудования, разрабатывающими проприетарные драйверы на скорую руку без проведения должного аудита.

Не вся задуманная функциональность пока реализована, но фреймворк уже вполне пригоден для работы и использован для написания рабочего драйвера для Ethernet-контроллера LAN9512 USB, поставляемого в плате Raspberry Pi 3. В качестве эталонной реализации при написании Rust-драйвера был использован существующий драйвер smsc95xx, написанный на языке Си. Отмечается, что размер модуля и накладные расходы от runtime-компонентов при разработке драйвера на Rust незначительные, что позволяет применять фреймворк для устройств с ограниченными ресурсами.

स्रोत: opennet.ru

एक टिप्पणी थप्न