Содержание статьи
Open Source Android
Google всегда позиционировала Android как открытую альтернативу господствовавшим в момент ее появления на рынке Windows Mobile и Symbian. Чуть ли не сразу после выпуска первого смартфона для разработчиков ADP1 (T-Mobile G1) компания выложила в свободный доступ почти все исходники операционной системы, начиная от модифицированного ядра Linux и заканчивая набором встроенного ПО.
Впоследствии такая модель распространения привела к появлению большого числа различных модификаций не только от энтузиастов, но и от компаний — производителей смартфонов. Почти каждый производитель старался выделить свой смартфон среди других и добавлял в прошивку дополнительный функционал, изменял внешний вид и поведение системы. Множество энтузиастов взялись за развитие свободных прошивок на основе официальных исходников, и некоторые из них достигли в этом деле превосходных результатов (достаточно вспомнить хотя бы CyanogenMod и Paranoid Android).
Количество модификаций росло, производители все глубже внедряли в ОС собственный функционал, пересаживали пользователей на собственные сервисы, и в определенный момент в Google пришли к выводу, что, если ничего не предпринимать, они потеряют контроль над своей же операционной системой. Первым шагом в решении этой проблемы стало доведение Android до такого уровня, чтобы необходимость в модификации не возникала. Так появился интерфейс Holo в Android 4.0, Project Butter в Android 4.1, шторка с панелью быстрых настроек и множество других модификаций, которые хотели видеть юзеры и поэтому применяли в своих прошивках производители смартфонов (с выходом Android L эта тенденция стала заметна даже блондинкам).
Второй шаг заключался в создании такой экосистемы, при которой Android становился бы бесполезным без сервисов поисковика. Google с самого начала делила Android на две части: AOSP, то есть та часть Android, исходники которой находились в открытом доступе, и так называемые Google Apps — набор закрытых приложений, которые дополняли AOSP и завязывали его на Google. Но если раньше Google Apps составляли лишь небольшое количество приложений (маркет, Gmail, YouTube...), без которых можно было вполне обойтись, то сегодня это большой кусок самой ОС.
Сейчас это не только маркет и Gmail, но и рабочий стол, клавиатура, камера, Google Now вместе с поисковым движком, диалер, приложение для обмена SMS (да, скоро останется только Hangouts). Это многочисленные API, в том числе для доступа к картам, поисковику, движку распознавания речи и распознавания лица. Это множество низкоуровневых библиотек и сервисов.
Как и раньше, в составе AOSP сохранились открытые варианты этих компонентов, но подавляющее большинство из них более не развивается. API устарели или фрагментарны, клавиатура не поддерживает метод ввода swype, камера не умеет делать сферические панорамы, экран блокировки не поддерживает функцию распознавания лица, а поисковый движок в прямом смысле находится в состоянии развития Android 1.5 — стоит только взглянуть на «заглушку» поисковика в некоторых свободных прошивках. Это не что иное, как реализация поиска в первых версиях Android, интерфейс которого даже не привели к виду Android 4.X.
Но самое главное, что сегодня Google Apps — это не просто приложения, это часть API операционной системы, которые необходимы внушительному числу приложений сторонних разработчиков. Без Google Apps перестают работать приложения, использующие функцию отображения положения объектов на карте, без Google Apps не работают внутриигровые покупки в приложениях, функции поиска, авторизация через аккаунт Google.
С каждым релизом Android состав Google Apps все больше расширяется, а количество возможностей для создания полноценного форка ОС, совместимого со сторонними приложениями, уменьшается. Все больше компонентов системы «закрываются», все меньше остается путей для расширения возможностей системы сообществами CyanogenMod и других свободных прошивок. Хочешь, чтобы команда CyanogenMod добавила в Google Now возможность настройки распознаваемых команд? Забудь. Хочешь swype в расширенной клавиатуре CyanogenMod? Забудь. Хочешь рабочий стол в стиле Google Home, но с возможностями настройки? Забудь. Забудь, забудь, забудь.
Хакер #187. Обходим Blizzard Warden
Apache License Version 2.0
Но и это еще не все. На самом деле в Android изначально заложено все, чтобы в любой момент сделать его закрытым. AOSP распространяется под тремя открытыми лицензиями: GPL, BSD и Apache 2.0. Первая покрывает только ядро и очень небольшое количество низкоуровневых компонентов (wpa_supplicant, например), вторая — большую часть низкоуровневых компонентов системы, третья — всю остальную часть ОС (больше 90% кода).
Во всех этих лицензиях есть существенные отличия, однако для нас важно лишь то, что закрыть исходники повторно не допускает только GPL. Код, лицензированный под BSD и Apache, может быть без всяких последствий переведен в разряд закрытых в любой момент. Именно поэтому производители почти всегда открывают код ядра для своих смартфонов и никогда не открывают код самой прошивки. Они имеют право так поступать.
И хоть в этой модели лицензирования нет никакого заговора (лицензия Apache выбрана для того, чтобы производитель мог вносить правки, не разглашая применяемых в них технологий), она дает Google огромные возможности регулирования всей экосистемы. Компания уже использовала их для закрытия Android 3.X, для перевода стандартных приложений в разряд закрытых (в рамках Google Apps), для выпуска Android L Preview.
В теории лицензии BSD и Apache могут позволить Google сделать гораздо больше. Например, разделить ОС на две ветки: полноценную закрытую и урезанную открытую. Или держать код новой версии ОС закрытым настолько долго, насколько вздумается. Ну или наладить кооперацию с избранными производителями устройств с целью дать им возможность получить доступ к коду раньше других (в сущности, с производителями девайсов линейки Nexus это уже работает). Вариантов можно придумать массу — столько, на сколько хватит фантазии. Сомнительно, что Google действительно будет применять их на практике, но все возможности для этого у нее есть.
Closed doors development
Другой способ взять власть в свои руки, которым успешно пользуется Google, — это закрытая модель разработки. Одна из ключевых особенностей классической модели Open Source заключается вовсе не в наличии исходников как таковых, а в том, что на процесс разработки продукта может повлиять практически любая заинтересованная сторона, главное — чтобы она смогла убедить в необходимости изменений других разработчиков. В такой модели исходники открыты на всем протяжении жизни продукта, а не только от релиза к релизу.
В случае с Android вся власть сконцентрирована в одних руках. Руках самой Google. Разработка ведется за закрытыми дверями, и никто не знает, в какую сторону Google решит развивать систему, никто не сможет предложить свои идеи и ожидать, что они будут реализованы в следующем релизе системы. На бумаге, конечно, существует специально созданный для этих целей альянс производителей OHA, однако, судя по всему, он носит номинальный характер и нужен только для того, чтобы, спрятавшись от глаз публики, обсуждать тенденции развития с крупными производителями гаджетов.
Всем остальным же приходится ждать релиза новой версии ОС и надеяться, что в результате переговоров с условной Samsung Google наконец‑то реализует функционал, который действительно нужен пользователям. А пока получается, что таким функционалом занимаются исключительно разработчики кастомных прошивок, у которых модель разработки по‑настоящему открыта и каждый может предложить идею или код с ее реализацией.
Binary blobs
Драйверы — еще одна серьезная проблема «открытости» Android. Железячные компании, клепающие чипы для мобильной техники, очень и очень неохотно открывают драйверы для своего оборудования, прикрываясь пресловутыми коммерческими тайнами. Собственно, «неохотно» здесь не совсем подходит, а лучше сказать — не открывают вовсе.
В среднестатистическом Android закрытыми могут быть: драйвер видеоадаптера, драйвер камеры, драйвер тачскрина, драйвер Wi-Fi-адаптера и GSM-модуля, драйверы всех датчиков и сенсоров, демон rild, отвечающий за связь с сотовой сетью, библиотека OpenGL ES, библиотека вывода видео и аудио, библиотека ускорения воспроизведения видео. Часто это бинарные блобы, либо встроенные в код ядра Linux, либо распространяемые в виде библиотек без исходников.
По большому счету это нормальная ситуация, к которой все привыкли. Проблемы она создает только тогда, когда производитель смартфона/планшета отказывается от поддержки устройства и остается надеяться лишь на энтузиастов, которые портируют новый Android на девайс годичной давности. Дело в том, что внутренне Android меняется куда стремительнее внешних изменений, видимых пользователям. В системе постоянно меняются внутренние API, заменяются низкоуровневые компоненты, объявляются устаревшими части системы, появившиеся два релиза назад.
Как в такой ситуации, когда код большинства драйверов и половины системных библиотек закрыт, портировать новую версию Android? Правильно, костыли и всяческие ограничения функциональности. Отсюда и появляются нестабильности и ошибки в кастомных прошивках.
Replicant
Собственно, все, что я сказал до этого, лишь присказка, ну или введение, которое должно прояснить смысл существования таких проектов, как Replicant, F-droid, сторонних реализаций маркета и других «игрушек для чудаковатых гиков». Все эти проекты направлены в первую очередь на избавление Android от проприетарных компонентов и их замену на открытые аналоги. Рядовому пользователю такая задача может показаться глупой тратой времени, но одного лишь факта обнаружения бэкдора в GSM-модуле смартфонов Samsung разработчиками Replicant достаточно для того, чтобы эта прошивка имела право на существование (да, в Replicant бэкдор заблокирован).
Итак, что же такое Replicant? Это прошивка на базе Android, избавленная от всех проприетарных компонентов, включая драйверы, службы и приложения Google. В качестве базы прошивки выступает CyanogenMod, а вместо Google Play используется маркет F-droid, содержащий только открытые приложения. Официально прошивка доступна для следующих устройств: HTC Dream / HTC Magic, Nexus One, Nexus S, Galaxy S/S2/S3, Galaxy Note, Galaxy Nexus, Galaxy Tab 2, Galaxy Note 2 и полностью свободного смартфона GTA04.
Проект постоянно развивается и, кроме того, включен в список приоритетных для Фонда свободного ПО (а значит, получает финансирование), но развитие идет не так быстро, как можно было бы ожидать. Последняя версия прошивки базируется на Android 4.2 (CyanogenMod 10.1), а часть функционала недоступна. Например, в случае со смартфоном Galaxy Nexus не работают Wi-Fi, Bluetooth, NFC, 3D-ускорение, камера и аппаратное декодирование видео. Все эти компоненты распространяются в виде закрытых драйверов или загружаемых в периферийные чипы firmware, разработать качественные открытые аналоги для которых пока не удалось.
Ситуация с другими смартфонами ненамного лучше. Во всех них недоступна та или иная часть функциональности смартфона. Одна из немногих вещей, которую удалось заставить работать, — это GSM-модуль, для чего для каждого из смартфонов с нуля была разработана реализация слоя RIL, отвечающего за общение с модемом по выделенной шине. В ходе такой разработки как раз и был найден тот самый самсунговский бэкдор (или баг).
В данный момент Replicant, конечно же, не предназначен для применения обычными юзерами, но некоторые из его компонентов уже перекочевали в CyanogenMod и другие прошивки. Кроме того, наработки проекта могут быть использованы для создания по‑настоящему открытого и защищенного от прослушивания и управления современного смартфона (возможно, кто‑то создаст такой проект на Kickstarter). Пока же порт Replicant доступен для единственного открытого, но безнадежно устаревшего смартфона GTA04.
F-Droid
В качестве предустановленного маркета в Replicant используется F-Droid, разработанный для публикации исключительно открытых приложений. В настоящее время в каталоге F-Droid насчитывается более 1100 наименований, среди которых можно найти такие известные приложения, как Adblock+, ADW.Launcher, AndroidVNC, Apollo, ConnectBot, FBReader, DashClock, Firefox, VLC, Wikipedia и многие другие.
Конечно, это не Google Play с его миллионом приложений и даже не Amazon Appstore, но это по‑настоящему открытый маркет, в каждом приложении которого можно быть уверенным на 100%. В данный момент это всего лишь воплощенная в реальность идея иметь открытый Android с открытыми же приложениями, но до репозиториев настольного Linux с их сотнями тысяч открытых приложений ему еще очень далеко.
Мобильные ОС с открытой моделью разработки
- Firefox OS — операционка развивается командой Mozilla, однако весь процесс разработки прозрачен, и при желании на него можно повлиять.
- Sailfish OS — развивается командой бывших сотрудников Nokia на основе MeeGo, разработчики активно сотрудничают с сообществом, код открыт на всем протяжении разработки.
- Plasma Active — основана командой KDE (графическая среда для Linux/UNIX), код открыт на протяжении разработки, принимаются предложения и код от независимых разработчиков.
- Tizen — ОС от Intel и Samsung, развиваемая под покровительством Linux Foundation, код открыт на протяжении разработки, патчи принимаются на основе голосования участников разработки.
- CyanogenMod — репозиторий, в котором идет развитие прошивки, открыт для всех, патчи от сторонних разработчиков принимаются с большой охотой, решение о переработке компонентов прошивки принимается путем голосования.
info
Название Replicant — это отсылка к фильму/книге Blade Runner («Бегущий по лезвию»), где так именовали андроидов.
info
В 2011 году корпорация Google подарила разработчикам Replicant два смартфона Google Nexus One, чтобы последние смогли тестировать свою прошивку, не опасаясь «убить» свои собственные смартфоны.
MicroG
А как быть с несовместимостями, вызванными отсутствием пакета приложений и библиотек Google? В Replicant данная проблема не решена вообще, но это не вызывает сложностей, так как приложения из F-Droid не зависят от проприетарных компонентов Google. Для всех остальных (тех, кто использует, например, 1Mobile Market) предлагается открытая альтернатива gapps под названием MicroG от независимого разработчика mar-v-in с форумов XDA-Developers.
MicroG состоит из нескольких компонентов. Ключевой из них — GmsCore, открытая реализация Google Play Services, фреймворка, который позволяет приложениям использовать функции Google Play. Второй компонент — Maps API v2, реализация API для доступа к Google Maps, которая обманывает приложения, подсовывая им карты OpenStreetMap (которые зачастую даже лучше гугловских). В состав также входят сервис NetworkLocationProvider, позволяющий определять местоположение по IP-адресам (используется открытая база), FakeStore, представляющий собой пустышку, заставляющую приложения думать, что на устройство установлен Play Store, и даже открытый аналог самого магазина приложений под названием Phonesky (в оригинале у гугла клиент Play Store носит то же название).
Последний, однако, использовать не рекомендуется, так как Google явно запрещает работать со своим репозиторием приложений сторонним клиентам. В качестве кары за это может быть заблокирован аккаунт. В остальном же MicroG — это прекрасная альтернатива для тех, кто не хочет связывать с себя с Google и АНБ, но вынужден использовать приложения, завязанные на его сервисы.
Выводы
Модель развития Android — это поистине потрясающая находка Google. Они умудряются успешно развивать систему, которая при внешней открытости включает в себя множество проприетарных компонентов, развивается единственной компанией за закрытыми дверями и полностью ей подчинена. Я ни в коем случае не пытаюсь очернить Google и ее подходы к развитию Android. В конце концов, эта компания создала потрясающую операционную систему, в развитие которой были вложены миллионы долларов, и все это досталось нам задарма вместе с исходным кодом. Но, как говорится, если уж назвался конем — полезай в стойло.