Новости
Google разрабатывает части Android на Rust для повышения безопасности
Сегодня Google добавил третий вариант для разработчиков ОС — Android Open Source Project теперь поддерживает язык программирования Rust для разработки платформы.
Android как законченная операционная система включает в себя множество взаимодействующих компонентов. В широком смысле, это экосистема приложений, а затем и сама ОС. Выбор языка программирования для разработчика зависит от того, над какой частью Android вы работаете. Для разработчиков приложений популярными вариантами являются Java и Kotlin. У разработчиков, работающих над ОС и ее низкоуровневыми частями, до сих пор популярны C и C++. Сегодня Google добавил третий вариант для разработчиков ОС — Android Open Source Project теперь поддерживает язык программирования Rust для разработки платформы.
Ограничения C и C++
Для более низких уровней ОС Android требуются системные языки программирования, такие как C и C++. Эти языки обеспечивают разработчикам контроль и предсказуемость, что важно при доступе к низкоуровневым системным ресурсам и оборудованию.
К сожалению, C и C++ не обеспечивают гарантий безопасности памяти, что делает их уязвимыми для ошибок и проблем с безопасностью. Разработчик должен отвечать за управление памятью в этих языках, но в сложных и многопоточных кодовых базах это проще сказать, чем сделать.
C и C++ вместе дают десятки миллионов строк кода для платформы Android. Они же дают большинство серьезных ошибок, связанных с безопасностью памяти, и становятся наиболее трудным для устранения источником некорректности кода. Простого исправления этих ошибок становится недостаточно для решения проблем, и лучшим подходом было бы в первую очередь их предотвращение.
Отсутствие гарантий безопасности памяти вынуждает разработчиков запускать процессы Android в жестко ограниченных и непривилегированных песочницах. Но песочницы дорого обходятся в ресурсах, они вызывают дополнительные накладные расходы и задержку в работе. Песочницы также не устраняют уязвимости кода полностью, а их эффективность снижается из-за высокой плотности ошибок, что позволяет злоумышленникам объединять несколько уязвимостей в цепочку.
Другое ограничение, хотя и не уникальное для C и C++, но применимое ко всем проблемам безопасности памяти, заключается в том, несмотря на тестирование фактическая ошибка может остаться незамеченной. А обнаружении и исправление уже выпущенных ошибок — это еще одна задача, требующая длительного и дорогостоящего процесса, который не всегда может привести к правильному результату. Таким образом, обнаружение ошибок становится ненадежным, и предотвращение ошибок является лучшим подходом в свете этих ограничений.
Здесь на помощь приходит переход на безопасный для памяти язык, такой как Rust.
Rust и его преимущества
Rust дает гарантии безопасности памяти, используя комбинацию проверок во время компиляции для обеспечения правильного времени жизни/владения объектами и проверки во время выполнения, чтобы гарантировать, что доступ к памяти действителен. Эта безопасность достигается при обеспечении производительности, эквивалентной C и C++. Rust также снижает потребность в песочнице, предоставляя разработчикам больше свободного места для внедрения новых функций, которые являются более безопасными и легковесными.
Хотя у Rust действительно есть свои преимущества, переключить всю ОС Android на Rust в одночасье невозможно. И это может даже не понадобиться, поскольку большинство ошибок памяти Android возникает в новом или недавно измененном коде, причем около 50% из них возникли менее года назад. Google считает, что его усилия по внедрению безопасных для памяти языков лучше всего сосредоточить на новых разработках, а не на переписывании готового кода C и C++.
Rust также фокусируется на предотвращении ошибок, а не на их обнаружении, что приводит к повышению правильности кода. Он имеет несколько ключевых функций, таких как безопасность памяти, параллелизм данных, более выразительные системы типов, неизменяемые ссылки и переменные по умолчанию, более безопасная обработка целых чисел, лучшая обработка ошибок в стандартных библиотеках и многое другое.
Что означает переход на Rust для Android?
Google сообщает, что последние 18 месяцев добавлял поддержку Rust в Android Open Source Project. Но добавить новый язык на платформу Android — непростая задача. Некоторые цепочки инструментов и зависимости необходимо поддерживать, инфраструктуру тестирования и инструменты необходимо обновлять, а разработчиков необходимо обучать.
У Google есть несколько первых проектов, которыми он поделится в ближайшие месяцы. Но даже в этом случае становится ясно, что масштабирование поддержки Rust для большей части ОС — это многолетний проект.
Судя по тому, что мы видим, Google уже использует Rust в нескольких местах ОС. Новый переписанный стек Bluetooth для Android под кодовым названием «Gabeldorsche» пишется на Rust. Работа над Gabeldorsche началась примерно во времена Android 11, но до сих пор не используется. Модуль Android Keystore 2.0 написан на Rust, как и пользовательская часть драйвера IPC в Android. Хотя новый сетевой стек Fuchsia не имеет отношения к Android, он также пишется на Rust.
Для разработчиков приложений переключение на новый язык ничего не меняет в том, как нужно писать приложения или как работать с API. Этот влияет только на саму ОС. По словам члена команды по связям с разработчиками Android, Google также не планирует выпускать Rust NDK на данный момент. Поддерживаемыми языками для разработки приложений по-прежнему будут Kotlin, Java, C и C++.