Недавно стало известно о том, что команда разработчиков Windows 11 занимается новым типом работы — переписывает ряд модулей ядра и системных библиотек операционной системы на Rust. При этом работа уже в разгаре, это не просто анонс проекта или планы на будущее — реализация идет полным ходом. Зачем корпорации все это понадобилось?
Что все то значит?
О том, что Microsoft переписывает ряд элементов ядра и библиотеки на Rust, стало известно не от каких-то анонимных источников в компании. Об этом заявил Дэвид Уэстон (David Weston), вице-президент Microsoft по безопасности, на конференции по BlueHat IL 2023. Вот видео с этим интересным заявлением.
В частности, топ-менеджер компании сообщил, что код, который переписывается командой, попадет в ядро операционной системы в течение нескольких недель или месяцев. Он также заявил, что считает все это «классной идеей». Вероятно, уже сейчас в Windows 11 на компьютерах пользователей есть какие-то модули, переписанные на Rust, который является типобезопасным языком программирования.
Зачем компании это понадобилось? Ответ прост — по данным самой корпорации, примерно 70% уязвимостей, которые выявлены в программных продуктах корпорации за последние пару десятков лет, базируются на ошибках управления оперативной памятью.
Кстати, корпорация Microsoft далеко не единственная, кто использует Rust/переводит свои продукты на этот язык. Например, многие производители автомобилей, даже аэрокосмические компании пишут на этом языке критически важные элементы программных продуктов. Ранее представители Microsoft заявляли, что новый код все чаще будут писать на Rust, и реже — на C и C++.
Разработчики, поклонники Rust, считают, что если язык действительно «пойдет в широкие массы», то со временем ПО будет становиться надежнее, а баги встречаться реже. Конечно, совсем от них избавиться не удастся, но количество неприятных инцидентов снизится.
Безопасная работа с памятью обеспечивается в Rust во время компиляции посредством проверки ссылок, отслеживания владения объектами и учета времени жизни объектов (области видимости). Дополнительно — через оценку корректности доступа к памяти во время выполнения кода. Кроме того, Rust предоставляет средства защиты от целочисленных переполнений и требует обязательной инициализации значений переменных перед использованием. А еще он лучше обрабатывает ошибки в стандартной библиотеке и применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Что уже сделано?
«Производственные эксперименты» с Rust в Microsoft стали реализовать не сейчас, а еще летом 2019 года. Тогда один из представителей команды разработчиков Hyper-V (системы аппаратной виртуализации для x64-систем на основе гипервизора) сообщил, что ведет работу по переводу одного из низкоуровневых компонентов системы на Rust. Какой именно компонент — так и не рассказали, но работа была выполнена еще в 2019 году.
Дэвид Уэстон заявил, что один из системных вызовов полностью переписан на Rust и уже есть в ядре Windows 11. К сожалению, он не рассказал о том, какой именно из системных вызовов имеет в виду, но, в целом, это не так и важно, главное — работа ведется.
Сейчас команда занимается «преобразованием некоторых из внутренних типов данных С++ в эквивалентные из Rust» (The basic goal here was to convert some of these internal C++ data types into their Rust equivalents).
Кроме того, Уэстон осветил еще один интересный момент — сейчас код одной из основных подсистем Windows, Win32k GDI, переводится на новый язык. Эта подсистема отвечает за отрисовку графики и текста приложениями. В компоненте уже около 36 тыс. строк Rust-кода. Но на компьютерах пользователей обновленной подсистемы пока нет — она дорабатывается и тщательно тестируется.
Кроме того, переписывается и еще один критически важный компонент — это DWriteCore – реализация DirectWrite. Речь идет об API библиотеках DirectX для высококачественной отрисовки текста. Здесь выполнен еще больший объем работы, чем в предыдущем случае — в компоненте уже 152 тыс. строк реализованы на Rust. Еще 96 тыс. — на С++.
Результаты тоже уже есть. По словам представителей Microsoft, повысилась не только защищенность компонентов, но и увеличилась их производительность при выполнении некоторых операций. Так, прирост производительности в шейпинге, по словам разработчиков, составляет 5-15%, в зависимости от самой операции.
Что касается всей ОС, то ее компания не планирует переводить на Rust целиком и полностью. В компании заявили, что здесь играет роль защиты нативного кода ОС.
Не Microsoft единой
Кроме редмондской корпорации, Rust привлек внимание и других крупных технологических компаний. Например, в 2021 году Google сделала важный шаг, объявив о включении языка программирования Rust в число языков, которые допускаются для разработки платформы Android. Да, еще в 2019 году компилятор Rust включили в дерево исходных текстов Android, но это была экспериментальная поддержка.
Возможно, эти тексты тоже вас заинтересуют:
→ Межпланетная станция JUICE следует к Ио, Ганимеду, Европе и Каллисто. Чем они интересны?
→ Как эффективно делиться результатами своей работы? О «хвастовстве» здорового человека
→ Простая процедурная генерация мира, или Шумы Перлина на Python
По словам представителей Google, Rust добавили в список языков разработки Android для усиления защищенности последнего, плюс для продвижения приемов безопасного программирования и повышения выявления проблем при работе с памятью в Android. Около 70% из всех опасных уязвимостей, которые выявлены в Android, вызваны ошибками при работе с памятью. Использование Rust дает возможность снизить риск появления уязвимостей, которые вызваны ошибками при работе с памятью, включая обращение к области памяти после ее освобождения и выход за границы буфера.