C++ против Rust: Windows решает, какой язык прокачает ее драйверы

C++ против Rust: Windows решает, какой язык прокачает ее драйверы

Rust лидирует, но есть свои нюансы.

image

На платформе Github появился код от Microsoft, который позволит разработчикам создавать Windows-драйверы на языке Rust. Это важный шаг на пути к повышению безопасности операционной системы.

Еще в 2019 году исследователи из Microsoft обсуждали методы устранения уязвимостей на ранних этапах. Особое внимание уделялось языкам программирования, обеспечивающим безопасное управление памятью. В числе лидеров оказался Rust, изначально разработанный командой Mozilla.

Rust не только экономит память, но и предотвращает ошибки, которые могут возникнуть при одновременном доступе нескольких потоков к одним и тем же данным.

В 2022 году Марк Руссинович, главный технический директор Azure, подчеркнул, что нужно отходить от создания новых проектов на C/C++ и активнее использовать Rust, особенно в случаях, когда требуется высокая производительность без автоматической сборки мусора.

Большая часть действующих систем Windows написана на C и C++. Многие современные компоненты переписываются и оптимизируются, но основной код остается прежним. Например, в инструментах для создания драйверов, таких как Windows Driver Kit .

С Rust разработчики смогут создавать драйверы как для WDM (Windows Driver Model), так и для WDF (Windows Driver Framework). Но стоит учитывать, что проект все еще находится на ранней стадии и пока не предназначен для коммерческого использования.

Ранний код в новом репозитории Microsoft содержит комментарий: // FIXME: Should this trigger Bugcheck via KeBugCheckEx?

Одна из главных сложностей — обработка ошибок. В отличие от других языков, Rust не использует классическую схему исключений. Вместо этого он сообщает о возможных проблемах через переменную "Result" и прекращает работу в критических ситуациях, активируя режим "panic".

Это серьезный недостаток, особенно если речь идет о разработке ядра системы. Основатель Linux, Линус Торвальдс, когда-то говорил, что код ядра должен отличаться от пользовательских инструментов. Если ядро сталкивается с нехваткой памяти, это ни в коем случае не должно вызывать крах системы. В таких случаях ядро должно корректно обработать исключение и вернуть соответствующий статус.

Тем не менее, для специалистов переход к Rust кажется перспективным шагом. В целом прогнозы положительные, поэтому остается только наблюдать за тем, как сработает новый метод.

Если вам нравится играть в опасную игру, присоединитесь к нам - мы научим вас правилам!

Подписаться