
В течение последних нескольких лет на многих Chromebook можно было устанавливать Google Play и запускать Android-приложения. Это позволило Chromebook стать чем-то большим, чем просто продвинутыми веб-браузерами. Теперь Google собирается внести серьезные изменения в поддержку Android-приложений в Chrome OS, что может привести к долгожданной функции.
История Android в Chrome OS
Около четырех лет назад Google создала способ запускать Android-приложения в браузере Chrome, названный Android Runtime for Chrome (ARC). Это было разработано с учетом Chrome OS, но разработчики быстро поняли, что его можно использовать для запуска Android-приложений в Chrome на любой настольной платформе.
Хотя это работало достаточно хорошо, Google хотело чего-то более полезного и специфичного для Chrome OS. Таким образом, они начали разработку следующего поколения ARC, «ARC++», в соответствии с классической схемой именования разработчиков. ARC++ глубоко интегрировал Android Runtime с Chrome OS, позволяя использовать такие функции, как Google Play. Именно так Android-приложения работают на Chromebook сегодня.
ARC++ стал возможен отчасти благодаря тому, что Chrome OS, как и Android, основан на ядре Linux. Для повышения безопасности ARC++ фактически работает в «контейнере», что является способом изоляции Android-частей от остальной части Chrome OS. Хотя эти усилия, безусловно, помогают, команда Chrome признала, что есть возможности для улучшения и потенциальные уязвимости.
Мы стараемся довольно сильно их изолировать (используя пространства имен, seccomp, alt syscall, SELinux и т. д.), но, в конечном счете, у них есть прямой доступ ко многим системным вызовам и интерфейсам ядра, поэтому ошибка там может быть достигнута через код, скомпилированный с NDK Android.
Чтобы узнать немного больше об ARC++, есть отличный объяснительный материал о том, как он графически связан с Chrome OS, на LWN, от Дэвида Ревемана, который когда-то был членом команды Chrome, а затем перешел в Fuchsia.
Linux в Chrome OS — это другое
В прошлом году Google предприняла невероятные усилия в Chrome OS, чтобы сделать Linux-приложения доступными для установки и использования (часто называемые Crostini). Однако это оказалось гораздо сложнее, чем казалось. Конечно, если подумать, Chrome OS основана на Linux, что означает, что запускать Linux-приложения на ней должно быть относительно просто.
Вместо этого команда Chrome решила создать виртуальную машину (или VM) для запуска Debian (дистрибутив Linux) и интегрировать эту VM с «хостом» Chrome OS. Хотя они могли бы использовать существующие технологии виртуальных машин от таких компаний, как QEMU или VirtualBox, они решили, что лучше создать специализированные инструменты с нуля, названные «crosvm» и «Termina».
Было довольно много причин для использования виртуальной машины, но главной из них была безопасность. Прямой доступ к ядру Linux Chrome OS создал бы больше возможностей для вредоносного кода или даже вирусов.
В случае с Android Google контролирует экосистему приложений через Google Play, что обычно означает, что приложениям там можно доверять. И если вы хотите устанавливать Android-приложения из сторонних источников, вам нужно перевести устройство в режим разработчика, который позволяет выполнять потенциально небезопасные действия.
В Linux, где Google не имеет такого уровня контроля, не было способа ограничиться только доверенными приложениями. Использование виртуальной машины решает эту проблему, поскольку если вы установите вредоносное приложение, вы можете просто выключить VM, очистить ее и начать заново, не затрагивая Chrome OS в целом.
Интеграция виртуальной машины с Chrome OS таким образом, чтобы Linux-приложения чувствовали себя «как дома» на Chromebook, не обошлась без трудностей. Например, значительная часть недавних усилий была направлена на создание поддержки GPU для более графически насыщенных Linux-приложений (и потенциально игр).
Представляем ARCVM
Официально Google «не планирует» вносить какие-либо изменения в статус-кво Android-приложений в Chrome OS. Однако под поверхностью команда Chromium прилагает усилия, чтобы поддержка Android-приложений в Chrome OS стала больше похожа на их поддержку Linux-приложений.
Усилия, метко названные ARCVM (сокращение от ARC Virtual Machine), на основе имеющихся свидетельств, похоже, направлены на использование работы, проделанной над проектом Crostini, путем запуска Android через ту же VM Termina. Перейдя на виртуальную машину, поддержка Android в Chrome OS сможет использовать те же функции безопасности и возможность легкого сброса в случае возникновения проблем.
Надлежащая изоляция Android-приложений от Chrome OS в целом создает для Google потенциал разрешить установку Android-приложений из сторонних источников без перехода в режим разработчика. Возможность установки приложений из сторонних источников является долгожданной функцией пользователей Chrome OS, поскольку многие приложения, помеченные как «несовместимые» с Chromebook, на самом деле работают нормально при установке из сторонних источников. Это также сделает сторонние магазины приложений, такие как Aptoide, доступными в Chrome OS.
Кроме того, разработчики Android-приложений смогут устанавливать Android Studio на Chromebook, разрабатывать свои приложения и тестировать их на устройстве, не находясь в режиме разработчика. Учитывая недавний акцент Google на «безопасной разработке» через Chromebook, это кажется наиболее вероятной движущей силой усилий ARCVM.
Однако, как и другие проекты в стадии разработки, обнаруженные в Chromium, есть вероятность, что проект ARCVM может быть полностью отменен, как и проект Campfire. После создания рабочего прототипа им придется взвесить плюсы и минусы, чтобы увидеть, перевешивают ли повышенная безопасность и возможность установки приложений из сторонних источников влияние, которое это может оказать на производительность бюджетных Chromebook.
Поскольку разработка ARCVM все еще продолжается, и это ни в коем случае не подтвержденный проект, невозможно сказать, когда, если вообще когда-либо, мы увидим его на наших устройствах. Моя личная догадка — либо конец этого года, либо около запуска Android Q в Chrome OS.