Поддержка Rust для ядра Linux столкнулась с критикой Торвальдса

Линус Торвальдс провёл рецензирование патчей c реализацией возможности создания драйверов на языке Rust для ядра Linux, и высказал некоторые критические замечания.

Наибольшие претензии вызвала потенциальная возможность ухода в panic() в ошибочных ситуациях, например, в ситуации нехватки памяти, когда операции динамического распределения памяти, в том числе и внутри ядра, могут завершиться ошибкой. Торвальдс заявил, что подобный подход в ядре принципиально недопустим и при непонимании этого момента он может полностью отвернуть (totally NAKed) любой код, который попытается использовать подобный подход. С другой стороны, разработчик, занимающийся патчами, согласился с данной проблемой и считает её решаемой.

Ещё одной проблемой стали попытки использования вычислений с плавающей запятой или 128-битными типами, что не является допустимым для таких окружений, как ядро Linux. Это оказалось более серьёзной проблемой, так как в данный момент базовая (core) библиотека Rust неделима и представляет собой один большой blob — в ней нет возможности запросить только некоторые из возможностей, предотвратив использование той или иной проблемной функциональности. Решение проблемы может потребовать внесения изменений в компиляторе rust и библиотеки, при том, что на данный момент у команды ещё нет стратегии, как реализовать модульность библиотек языка.

Кроме того Торвальдс отметил, что предоставленный пример драйвера — бесполезный и посоветовал приложить в качестве примера какой-нибудь драйвер, решающий одну из реальных задач.

Дополнение: Компания Google заявила о своём участии в инициативе по продвижению поддержки Rust в ядро Linux и привела технические аспекты целесообразности внедрения Rust для борьбы с проблемами, возникающими из-за ошибок при работе с памятью. Google полагает, что Rust уже готов присоединиться к Си в качестве языка для разработки компонентов ядра Linux. В статье также приведены примеры использования языка Rust для разработки драйверов ядра, в контексте их использования в платформе Android (Rust признан официально поддерживаемым языком для разработки Android).

Отмечается, что Google подготовил начальный прототип написанного на языке Rust драйвера для механизма межпроцессного взаимодействия Binder, который позволит провести детальное сравнение производительности и безопасности реализаций Binder на Си и Rust. В текущем виде работа ещё не завершена, но уже почти для всех базовых абстракций функциональности ядра, необходимых для работы Binder, подготовлены прослойки для использования этих абстракций в коде на языке Rust.

Источник: http://www.opennet.ru/opennews/art.shtml?num=54970