LINUXTALKS.CO

В кодовой базе Chromium разрешено использование языка Rust

 ,

L


0

1

Компания Google объявила о включении языка программирования Rust в число языков, допустимых в коде проекта Chromium. Существующий код пока не планируют переписывать на Rust, но отныне будет разрешена интеграция в кодовую базу сторонних библиотек, написанных на Rust. В сборочную систему уже добавлен инструментарий для компиляции кода на языке Rust, проведения тестов и интеграции компонентов на Rust с кодом на C++. Появление кода на Rust в составе выпусков Chrome ожидается в следующем году.

К претендующим на интеграцию в кодовую базу Chromium сторонним библиотекам на Rust предъявляется ряд требований, например, библиотека должна превосходить аналоги по скорости, потреблению памяти и стабильности или быть единственной реализацией определённой технологии. Библиотеки на Rust также допустимо использовать когда функциональность может выполняться в привилегированном процессе или когда использование библиотеки даёт возможность снизить риск возникновения ошибок по сравнению с другими библиотеками или кодом на C++. Какие именно библиотеки могут войти в состав Chromium пока не решено.

Решение принято в рамках инициативы по предотвращению появления ошибок работы с памятью в кодовой базе Chrome. Судя по предоставленной два года назад статистике 70% опасных и критических проблем с безопасностью в Chromium вызваны ошибками при работе с памятью. Применение языка Rust, который сфокусирован на безопасной работе с памятью и обеспечивает автоматическое управление памятью, позволит снизить риск появления уязвимостей, вызванных такими проблемами как обращение к области памяти после её освобождения и выход за границы буфера.

Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами и учёт времени жизни объектов (области видимости), а также через оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

Применение Rust даст возможность добиться более простого и безопасного соблюдения "правила двух", применяемого Google для поддержания безопасности кодовой базы. В соответствии с данным правилом любой добавляемый код должен подпадать не больше, чем под два условия из трёх: работа с непроверенными входными данными, использование небезопасного языка программирования (C/C++) и выполнение с повышенными привилегиями. Из этого правила следует, что код для обработки внешних данных должен либо быть урезан до минимальных привилегий (изолирован), либо быть написан на безопасном языке программирования.

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

Для упрощения интеграции кода на Rust с существующим кодом на C++ и обхода связанных с интеграцией рисков и ограничений, в настоящее время решено ограничиться однонаправленным взаимодействием - обращением из С++ к Rust (т.е. код на Rust может лишь вызываться из кода C++ через функции API, но не смешиваться с кодом на C++), что также даст возможность держать под контролем дерево зависимостей. Вторым ограничением является поддержка только сторонних библиотек, поставляемых в форме отдельных компонентов, не привязанных к Chromium и имеющих API, ориентированный на выполнение конкретных задач.

Кроме применения Rust для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти (use-after-free), начиная с выпуска Chrome 102 в коде на С++ вместо обычных указателей началось применение типа MiraclePtr (raw_ptr). MiraclePtr предоставляет обвязку над указателями, выполняющую дополнительные проверки обращения к освобождённым областям памяти и аварийно завершающую работу в случае обнаружения подобных обращений. Влияние нового метода защиты на производительность и потребление памяти оценивается как незначительное.

// cc-by opennet.ru
// converted with crypt’s opennet autoreposter

>>> Подробности

★★☆☆☆

Интересно, как это все проявится в потреблении ресурсов. По моим скромным наблюдениям, Chromium жрет меньше, нежели Firefox.

odalist    
★★★★★★★
Linux / Firefox
Ответ на: комментарий от odalist

у фф были блокировки, когда от 200+ вкладок. хром просто лучше тянул нагрузку. а памяти - пофигу. у меня своп 64 гига на SSD.

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от odalist

как на freebsd перешел, так пришлось:(( она своп жрет, как не в себе. ну линукс тоже, но не так.

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 1)

FreeBSD / Chrome
Ответ на: комментарий от Kaschenko

для каких-то операций, возможно, резерв.

при том, что у меня в своп уже утекло 60, всеравно держит свободной памяти 2.

Mem: 7339M Active, 11G Inact, 4435M Laundry, 7337M Wired, 1488M Buf, 1769M Free
ARC: 2584M Total, 1860M MFU, 330M MRU, 11M Anon, 26M Header, 358M Other
     1024M Compressed, 3128M Uncompressed, 3.06:1 Ratio
Swap: 64G Total, 60G Used, 4370M Free, 93% Inuse

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от posixbit

теперь это смогу делать только корпорации

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

ну там просто алгоритм 1:1 половина в паяти, половина в своп или как-то так.

Ну да. Это я понял. Что интересно, это то, что при аналогичных нагрузках, FreeBSD работает шустрее…Вот например, она, при сильных нагрузках, жрет свап, но на отзывчивости системы это не сказывается. А вот Линукс притормаживает.

odalist    
★★★★★★★
Linux / Firefox
Ответ на: комментарий от odalist

алгоритмы вытеснения совсем разные. я че-то пытался читать, но все забыл.

вот сейчас, если я не разружу своп, то через 4 гига система встанет колом.

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от odalist

я так понимаю, freebsd легче, потому что кодовая база меньше. меньше сложных наворотов на все возможные случаи применения, как в линуксе. но недостатки UNIX, как ОС пре-десктопной эры, сохраняются. все процессы в системе равны. и что плохо в отличие от линукса, отсутствует приоретизация по IO для юзера.

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от odalist

такая новость тут была… я было обрадовался… во FreeBSD решили добавить hammer2! … но только на чтение… такой fail

hammer2, как ZFS, но гораздо легче. какой смысл только на чтение… тем более, что в NetBSD полноценно… не понимаю.

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

hammer2

Ну да. Читал, что это хорошая файловая система.

odalist    
★★★★★★★
Linux / Firefox
Ответ на: комментарий от odalist

Это разве буржуин.. На лоре один чувак вывод htop постил.
У него там Threadripper на 64 потока и 256 гигов рамы..

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от Minona

да я тоже жалею, что в свое время не разорился еще на 32 гига. мат.плата поддеживает даже 256, а вот гоняться за сертифицированной ddr3 не очень.

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 1)

FreeBSD / Chrome
Ответ на: комментарий от Minona

У него там Threadripper на 64 потока и 256 гигов рамы..

Серверная система. Наверно…

Это разве буржуин

По сравнению с моими скромными четырьмя гигами, он буржуин :)

odalist    
★★★★★★★
Linux / Firefox
Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=90