Незадолго до начала Google I/O разработчики Android анонсировали инициативу под названием Treble. Ее суть сводится к тому, чтобы разделить Android на две части, которые можно будет обновлять независимо друг от друга и таким образом облегчить портирование новых версий Android на уже выпущенные смартфоны. Попробуем разобраться, что это значит на деле и какую проблему Google все же пытается решить.
 

Как было раньше

Однажды я уже писал о том, почему разработчики кастомных прошивок успевают портировать новую версию Android на смартфоны быстрее, чем сами компании — производители смартфонов. Кроме пофигизма, свойственного некоторым производителям, основных проблем три:

  • внедрение собственных модификаций в Android и прохождение сертификации модифицированной ОС в Google требует времени;
  • обновление определенных моделей смартфона может быть невыгодно с точки зрения бизнеса;
  • новая версия Android требует обновленные драйверы, разработкой которых занимаются производители чипсета и других компонентов смартфона. Если производители не выпускают обновленные драйверы, компания — производитель смартфона не может портировать новую версию ОС.

С первой проблемой Google по понятным причинам особенно ничего сделать не может. Вторую проблему они попытались решить с помощью security-апдейтов, которые хоть и не ускоряют обновление смартфона до новой версии Android, но хотя бы позволяют производителям залатать дыры в старых версиях Android, приложив минимум усилий.

Третья проблема представляет для нас наибольший интерес. Дело в том, что Android, как и многие другие продукты Google, очень долгое время развивался в режиме вечной беты. Это значит, что Android менялся. Не только и не столько в плане интерфейса, сколько в плане внутренней архитектуры.

В Android никогда не было устоявшегося обратно совместимого интерфейса между системой и драйверами. В большинстве случаев нельзя было просто взять новую версию Android и «посадить» ее на драйверы и ядро Linux от старой версии. Почти всегда что-нибудь да отваливалось.

Требовались обновленные драйверы, разработкой которых занимался производитель железа, а вовсе не производитель смартфона. Поэтому, если производитель чипсета, камеры или Wi-Fi-адаптера по тем или иным причинам переставал поддерживать старое железо (что происходит очень часто, а в случае с такими компаниями, как Mediatek, — постоянно), полноценный порт новой версии Android становился невозможен.

Иногда, правда, бывали исключения, когда операционку можно было обновить, не обновляя драйверы (например, в обновлении Android 2.2 -> 2.3 и 4.1 -> 4.2 интерфейс между железом и системой почти не менялся), но чаще новая версия Android требовала обновления драйверов и проприетарных библиотек. Наиболее яркий пример: обновление Android 2.3 -> Android 4.0, когда Google переделала половину системы. Также можно вспомнить переход на Camera2 API, Vulcan API, требование поддержки модуля TEE для хранения ключей шифрования, аппаратную поддержку шифрования.

Создатели кастомных прошивок, конечно, искали обходные пути, чтобы заставить новую версию Android работать на старых драйверах. В дело шли любые приемы от простого «тупо не работает, забейте» до различных программных прослоек, обеспечивающих работу на старых драйверах. Так, в кастомных прошивках для Xiaomi Redmi 1s есть прослойка, которая позволяет использовать камеру в Android 7.1.1, хотя драйверы для нее застряли еще на уровне версии 4.4.4.

Однако для компании — производителя смартфона такой подход неприемлем. Устройство с выполненным подобным образом портом может просто не пройти сертификацию Google, а если нет сертификации, магазин приложений устанавливать нельзя. Кроме того, такие прослойки не обеспечивают новую функциональность, которая может требоваться Android для корректной работы (например, поддержка новой версии OpenGL, возможности которой Android использует для создания новых эффектов анимации).

 

Как будет теперь

К счастью, Google наконец-то решила остановить эту вакханалию и стандартизовать-таки программный интерфейс между драйверами и Android. Это и есть инициатива Treble, и она будет воплощена в жизнь уже в Android 8.0 (Android O). Суть здесь очень проста и уже должна быть понятна: для портирования новой версии Android теперь надо будет всего лишь портировать новую версию Android, и она корректно заработает на уже имеющихся драйверах и той версии ядра Linux, с которой смартфон был выпущен на рынок.

Так было...
Так было…

...а так будет
…а так будет

Но это еще не все. Google заявляет, что уже ведет работу с поставщиками оборудования, чтобы включить части закрытых драйверов в основную кодовую базу Android, так что портировать Android будет еще проще. А если верить Romain Guy, отвечающему за графическую подсистему Android, то начиная с версии Android 8.0 пользователи даже смогут обновлять графические драйверы через Google Play!

 

Почему они не сделали этого раньше?

Скорее всего, потому, что система Android только недавно превратилась в операционку, способную использовать возможности железа на полную катушку. Например, Camera2 API, позволяющий создавать профессиональные приложения для фото- и видеосъемки, появился только в Android 5.0. Поддержка AAudio API, инструмента создания профессиональных приложений для разработки звука, заявлена только в Android O. Vulkan API для создания высокопроизводительных 3D-приложений появился в Android 7.0.

Если бы Google реализовала прослойку Treble в более ранних версиях, она бы собственноручно затормозила развитие Android, так как новые возможности просто нельзя было бы использовать на устаревших драйверах.

1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Конкурс хаков: пишем на PowerShell скрипт, который уведомляет о днях рождения пользователей Active Directory

В компаниях часто встречается задача уведомлять сотрудников о приближающихся днях рождения…