Содержание статьи
Шумиха вокруг того, почему ребята с форумов XDA Developers и команды типа CyanogenMod и AOKP выпускают обновления до новых версий Android быстрее самих компаний — производителей смартфонов, все не утихает. Попробую разобраться, как на самом деле происходит обновление смартфонов, и ответить уже наконец на интересующий многих вопрос.
Введение
Всем нам известна скорость, с которой появляются неофициальные порты новой версии Android после публикации ее исходных текстов компанией Google. Первые полурабочие прошивки часто выходят спустя каких-то несколько дней, а уже через месяц мы имеем доступ к полнофункциональному порту. Это то же время, в течение которого большинство производителей едва успевают решить, на какие смартфоны они планируют перенос новой версии системы, а уж сам процесс портирования обычно затягивается на срок от нескольких месяцев до полугода, а то и дольше.
При этом энтузиасты способны портировать новые версии Android даже на те устройства, которые были признаны несовместимыми с новой ОС самими же компаниями-производителями. А последние не только не делают этого, но и не объясняют, почему отказываются продолжать поддержку своих устройств. Неужели все дело в жадности компаний-производителей, стимулирующих покупателей бежать в магазин за новой моделью смартфона? Или, может быть, дело в наплевательском отношении к потребителю? Или же энтузиасты действительно настолько лучше программистов компаний-производителей? Тогда почему последние не нанимают на работу первых?
Скорее всего, все эти факторы реальны, но не думай, что они имеют сколько-нибудь определяющее значение. Дело совершенно в другом — в том, о чем просто не говорят потребителям. Это подходы к разработке ПО, а если точнее, сами причины выполнения порта и процесс его выполнения. Понять их достаточно просто, если задать соответствующие вопросы.
Вопрос первый: зачем выполняется порт?
В случае с энтузиастами все просто: развлечение или работа на имя. Человек с XDA Developers, портирующий Android на свой девайс, делает это, как говорится, just for fun. Будет ли этот порт целесообразным, сможет ли система правильно работать на данной модели, сколько сил на это придется потратить — об этом обычно не задумываются. Человек просто идет за исходными текстами и начинает работу.
Для компании-производителя все гораздо сложнее. Для ее руководства существенны множество факторов, начиная с того, стоит ли овчинка выделки (будет ли оправдано портирование Android 4/5 на девайс с 512 Мбайт памяти?), и заканчивая такими вопросами, как правильное распределение ресурсов (может быть, стоит бросить силы на как можно более быстрое выполнение порта для самых новых моделей, а не распылять на все?). В большинстве случаев это выбор — снижать расходы или сохранить лицо перед клиентами, а если точнее, удержание баланса где-то посередине.
На этом начинаются первые различия. В то время как программист-энтузиаст уже готов представить первую «альфу» (или даже «бету»), инженеры компании-производителя все еще занимаются исследованием кода нового Android и оценкой его пригодности для конкретной модели, а руководство продолжает ломать голову над стратегическими вопросами. Часто в дело вступает бюрократия, а также болезнь IT-компаний под названием «некомпетентность верхушек». Где-то все это выражено более ярко, где-то менее, но такое свойственно всем компаниям, и это нормально, на этом и держится бизнес.
Вопрос второй: как происходит портирование?
Здесь история еще забавнее. Человек, выполняющий портирование на чистом энтузиазме, не слишком часто задумывается о таких вещах, как совместимость, отсутствие мелких багов, провалы производительности в каких-то очень специфических приложениях и прочее. Все это, если и проявляется, зачищается уже после выкладывания им первых версий прошивок или не зачищается вообще (ну нет у меня драйвера камеры, что тут сделаешь). И это может занимать очень значительное время. Часто отлов мельчайших багов, не проявляющихся у 99% пользователей, может продолжаться месяцы, а многие из них не будут найдены никогда.
Для компаний-производителей процесс работы над прошивкой выглядит совершенно иначе. И начинается он с постановки задачи, суть которой в том, что новая прошивка должна быть не хуже старой. Или, говоря другими словами, установивший новую прошивку пользователь ни в коем случае не должен захотеть вернуться на старую, иначе он начнет поливать компанию грязью еще сильней, чем если бы обновление не было выпущено вообще. Прошивка должна быть полностью стабильной, со всех сторон протестированной, работать не медленнее предыдущей и оставлять лучшие впечатления от использования.
Это главная задача и, собственно говоря, сама причина выполнения порта. Там, где программист-энтузиаст может выкатить прошивку с багами, ухудшением производительности, частично неработающим функционалом и все равно получит в свой адрес благодарности и плюсы в карму, компания ни в коем случае не может допустить всего этого даже в гораздо меньшем масштабе. И чем известней бренд, тем жестче требования.
Чтобы достичь этого, необходимо соблюдение нескольких условий. Во-первых, это исходники новой версии Android и PDK (Platform Development Kit) — набор инструментов, необходимый для сборки исходников. Очевидно, все это будет доступно и для энтузиастов, но позже компаний-производителей, входящих в альянс OHA, и за исключением тех ситуаций, когда выполняющий порт человек просто берет готовую сборку от одного устройства и переносит ее на другое. Это распространенная практика в среде владельцев клонов китайских аппаратов, но это не полноценный порт.
Во-вторых, нужен набор из ядра, драйверов и низкоуровневых библиотек, необходимых для работы новой версии Android. Последние два компонента именуются слой HAL (Hardware Abstraction Level), и он может очень сильно отличаться между разными версиями системы. К примеру, слой HAL между Android 2.3 и Android 4.0 имел просто разительные отличия, поэтому первые неофициальные порты Android 4.0 были почти нефункциональны. Но где брать слой HAL? У производителей оборудования. В первую очередь это производитель процессора, точнее SoC’а, и производители всех остальных модулей: тач-скрина, сенсора камеры, датчика приближения и прочих.
Однако проблема в том, что большинство производителей SoC’ов забивают на выпуск ядра и HAL для новой версии Android. Они просто выпускают новый чип, портируют на него ядро и HAL и идут дальше, проектировать новый чип. Этим страдают и китайские Mediatek (в последнее время в меньшей степени) и Rockchip и менее китайский Broadcom (эти забивают совсем конкретно). Как следствие, не пошевелится производитель — не будет и прошивки. Исключение составляют разве что героические энтузиасты, способные создать программные прослойки для запуска нового Android на старом ядре и HAL для гораздо более низкой версии Android (так произошло, например, с Motorola Droid 2 и Motorola Defy, для которых выкатили-таки полноценный неофициальный порт Android 4).
В-третьих, нужна команда инженеров и тестировщиков, одни из которых будут заниматься портированием прошивки на конкретное устройство, другие — тестированием прошивки на производительность и совместимость с приложениями, третьи — оценивать общие впечатления от использования. Часто командам придется действовать в кооперации для нахождения наиболее приемлемого способа решения очередной технической головоломки. Все это очень длительный и кропотливый процесс, особенно когда речь заходит о том, чтобы, например, выполнить порт Android 4/5 на устаревший смартфон.
К примеру, чтобы обеспечить работу Ice Cream Sandwich на Xperia Play, компании Sony пришлось приложить немало усилий, оптимизируя буквально все компоненты ОС, дабы свести потребление памяти к минимуму и предложить пользователю такой же комфорт, как при использовании Android 2.3. К слову сказать, в то время уже существовал неофициальный порт Android 4 без всех этих модификаций и он был вполне работоспособен, но не давал такого же эффекта, как от использования Android 2.3. Вроде бы все хорошо, а свободной памяти все равно мало, фоновые приложения быстрее выгружаются из памяти, некоторым играм не хватает оперативки, другие вообще не работают.
Чтобы обеспечить нормальное функционирование всех игр, Sony пришлось всесторонне тестировать чуть ли не все тайтлы из маркета, а при возникновении проблем связываться с каждой компанией — разработчиком сбойной игры и совместно искать решение проблемы. Стоит ли говорить, насколько это трудоемкий и затягивающий разработку процесс. А при этом требовалось еще и тестирование приложений и проверка новой прошивки на фокус-группе, которая должна была ежедневно пользоваться обновленным смартфоном на протяжении какого-то времени.
В конце концов из-за небольших проблем в общем впечатлении от использования и совместимости с некоторыми играми компании пришлось отказаться от официального OTA-обновления смартфона, и она просто выложила последнюю бету в открытый доступ. Любой владелец Xperia Play мог скачать ее и воочию убедиться в превосходной стабильности и производительности, однако для Sony весь процесс, по сути, оказался пустой тратой времени.
Вопрос третий: когда прошивка становится доступна пользователям?
Энтузиаст всегда имеет очень большое преимущество перед компанией-производителем, так как может поделиться прошивкой уже на ранней стадии работы, благодаря чему баги будут выявлены очень быстро, а к разработке смогут присоединиться другие разработчики.
У компании-производителя таких преимуществ нет. От начала и до конца разработка ведется закрыто, и только после преодоления большого количества проблем и доведения прошивки до почти приемлемого состояния они могут поделиться бета-версией с небольшим количеством тестеров. Другими словами, там, где у программистов-энтузиастов есть тысячи советчиков и тестеров самой разной квалификации по всему миру, у компании — только собственные ресурсы. Само собой, такое положение вещей тоже затягивает разработку.
Ну и наконец, представь, что при всем при этом компании еще необходимо натянуть на новую версию ОС собственную оболочку, реализовать фирменную функциональность, которая будет отличать «их Android» от всех остальных андроидов, и ты получишь те самые полгода, а может, даже и год.