В коде Chromium разрешили использовать язык Rust
Язык программирования Rust включили в число используемых в коде проекта Chromium. Существующий код пока не планируют переписывать на Rust, но допустима интеграция в кодовую базу сторонних библиотек, написанных на Rust.
В сборочную систему добавили инструментарий для компиляции кода на языке, проведения тестов и интеграции компонентов с кодом на C++.
Ожидается, что код на Rust появится в составе выпусков Chrome в следующем году.
К претендующим на интеграцию в кодовую базу Chromium сторонним библиотекам на Rust предъявляется ряд требований. Так, они должны превосходить аналоги по скорости, потреблению памяти и стабильности или быть единственными реализациями определённой технологии.
Библиотеки на Rust также допустимо использовать, если функциональность может выполняться в привилегированном процессе или когда использование даёт возможность снизить риск возникновения ошибок по сравнению с другими библиотеками или кодом на C++.
Разработчики пока не решили, какие именно библиотеки могут войти в состав Chromium.
Решение о включении Rust приняли в рамках инициативы по предотвращению появления ошибок работы с памятью в кодовой базе Chrome. По статистике, 70% опасных и критических проблем с безопасностью в Chromium вызваны такими ошибками.
В Rust безопасная работа с памятью обеспечивается во время компиляции через проверку ссылок, отслеживание владения объектами и учёт времени жизни объектов (области видимости), а также через оценку корректности доступа к памяти во время выполнения кода.
Также язык предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Применение Rust позволит добиться более простого и безопасного соблюдения «правила двух», которое применяется Google для поддержания безопасности кодовой базы. Любой добавляемый код должен подпадать не больше, чем под два условия из трёх: работа с непроверенными входными данными, использование небезопасного языка программирования (C/C++) и выполнение с повышенными привилегиями. Таким образом, код для обработки внешних данных должен либо быть урезан до минимальных привилегий, либо быть написанным на безопасном языке.