Microsoft запустила экспериментальный проект по разработке собственного языка программирования Verona, основанного на Rust. По данным CNews, Microsoft планирует переписать на новом языке некоторые низкоуровневые компоненты ОС Windows 10, чтобы сделать систему надежнее.
Зачем это нужно
Microsoft хочет создать новый язык программирования для разработки низкоуровневых компонентов. Сейчас они написаны в основном на С и С++. Основная цель – сделать компоненты устойчивыми ко взлому.
Экспериментировать будут с частью ОС, правда, какие именно компоненты затронут, неизвестно. Но, по словам инсайдеров, впоследствии все компоненты, которые атакуют особенно часто, могут переписать с нуля на новом языке программирования. Это сделает Windows гораздо безопаснее.
Чем плохи С и С++
С и С++ универсальны. Они сочетают возможность высокоуровневой разработки и функции непосредственной работы с фундаментальными компонентами (памятью, процессами, потоками, адресами и т.д.).
Но в то же время у С и С++ есть множество потенциальных и реальных проблем. Очень многое здесь отдается на откуп программисту. Особенно часто сложности возникают при работе с оперативной памятью.
Около 70% уязвимостей связаны в ошибками контроля памяти
Специалист Microsoft Мэттью Миллер заявил, что 70% уязвимостей в ПО компании, найденных за последние 12 лет, связаны с ошибками контроля памяти. Часто программы падают, обращаясь к адресу памяти после его освобождения. Нередки и выходы за границы буфера, дедлоки (взаимная блокировка ресурсов параллельными потоками), утечки памяти, которую выделили динамически, но забыли освободить.
В С и С++ нет многих встроенных инструментов, которые появились в других языках – например, проверка выхода за границы массива. Такие вещи реализовали в стандартных и пользовательских библиотеках, но с ними приходится жертвовать производительностью. Сборщика мусора (механизма, который удаляет ненужные программе объекты) в С и С++ тоже нет.
Особенности нового языка
Сам язык с нуля Microsoft разрабатывать не планирует. За основу взяли Rust – достаточно молодой проект Mozilla, создателя браузера Firefox.
Главное отличие нового языка от Rust – в модели владения. В Rust используется модель на базе единичных объектов, в новом языке будут оперировать группами объектов.
Принцип владения в новом языке также предполагает автоматическое управление памятью. Закрывая возможность манипулировать памятью вручную, создатели языка избавляют разработчиков от снежного кома потенциальных проблем.
В оригинальном Rust нет сборщика мусора – это сделано для повышения производительности, к тому же за счет модели владения объектами сборщик попросту не нужен. В новом языке сборщик мусора могут реализовать, но с минимальным ущербом для производительности.
Исходные коды наработок Microsoft планирует открыть для изучения и распространять под свободной лицензией Apache 2.0. На Github уже появился репозиторий Verona, но он пока пуст.
Эксперименты с Rust
Microsoft заинтересовалась Rust несколько месяцев назад. Тогда инсайдеры заявили, что компания хочет использовать язык, чтобы переписать несколько своих продуктов.
Разработчик системы аппаратной виртуализации Hyper-V Адам Берч в ноябре заявил в корпоративном блоге, что переписывает на Rust с нуля некий низкоуровневый компонент Windows. На тот момент был не завершен, но Берч положительно оценил опыт работы в нем.
Разработчик отметил, что в Rust, конечно, нет некоторых возможностей, к которым он привык в С. Он предположил, что компания сможет их добавить. Но в целом перевести кодовую базу компонентов системы на Rust и создать решения с «чистыми интерфейсами» не составит труда.
Применение Rust
Rust призван закрыть критические уязвимости в Firefox. Код браузера включал более 4 млн строк на С++, и именно они в основном провоцировали утечки данных и падения.
Rust изначально создавался с прицелом на параллельное выполнение задач и безопасность. Mozilla в рамках проекта Quantum полностью переработала архитектуру Firefox и перевела многие компоненты браузера на Rust. Кроме того, язык использовали для создания движка HTML-рендеринга Servo для Firefox.
Вскоре проектом заинтересовались и другие гиганты. Известно, что Rust используют Google, Facebook, Amazon, Dropbox, Fastly, Baidu.
Ведущий инженер Intel Джош Триплетт заявил: его компания заинтересована в развитии Rust, чтобы он мог конкурировать с С. А разработчик ядра Linux Грег Кроа-Хартман пообещал не препятствовать включению в ядро системы фреймворков для создания драйверов на Rust.