В кодовую базу ядра Linux, на основе которой формируется релиз 6.18, принята реализация механизма межпроцессного взаимодействия Binder, написанная на языке Rust. Binder используется в Android для организации взаимодействия между процессами и удалённого вызова методов (один процесс Android может вызвать метод или функцию в другом процессе Android, используя Binder для идентификации, вызова и передачи аргументов между процессами). Код Binder был переписан на Rust в рамках проекта по усилению защищённости, продвижению приёмов безопасного программирования и повышению эффективности выявления проблем при работе с памятью в Android (около 70% из всех опасных уязвимостей, выявленных в Android, вызваны ошибками при работе с памятью). Использование Rust позволило решить некоторые проблемы с которыми сталкивались разработчики Binder, включая ошибки, связанные с подсчётом ссылок, блокировками и проверкой границ, а также значительно уменьшить сложность обработки ошибок. Реализация Binder на Rust аналогична по функциональности с изначальным вариантом на языке Си, проходит все тесты AOSP (Android Open-Source Project) и может использоваться для создания рабочих редакций Android-прошивок. Несмотря на продвинутые возможности и поддержку объектов со сложной семантикой владения, драйвер на Rust получился меньше варианта на Си - 5.5 против 5.8 тысяч строк кода. В описании коммита автор упоминает следующие мотивы для переписывания Binder:
Источник: https://www.opennet.ru/opennews/art.shtml?num=64092
- Binder, развивается уже 15 лет и за это время его функциональность и сложность значительно возросли - проект находится на стыке всех компонентов Android и охватывает множество задач, выходящих за рамки IPC: корректный анализ и преобразование содержимого транзакций, которые могут содержать несколько объектов разных типов (например, указатели, файловые дескрипторы), взаимодействующих друг с другом; контроль размера пулов потоков в пользовательском пространстве и обеспечение назначения транзакций потокам таким образом, чтобы избежать взаимных блокировок при исчерпании потоков в пуле; отслеживание счётчиков ссылок объектов, совместно используемых несколькими процессами, корректно пересылая изменения счётчиков ссылок между процессами; обработка многочисленных сценариев возникновения ошибок и совмещение 13 различных блокировок, 7 счётчиков ссылок и атомарных переменных. При этом выполнять подобные задачи он должен максимально быстро и корректно.
Источник: https://www.opennet.ru/opennews/art.shtml?num=64092