Недавно стало известно о том, что команда разработчиков 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) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
