Как маркетологи убили Android

Наверное, все пользователи и разработчики уже заметили, в какую сторону движется развитие Android. Присущие ОС открытость и широкие возможности медленно исчезают, а список запретов постоянно пополняется. Может показаться, что причина тому — возрастающие требования безопасности, но если разобраться в ситуации, то все оказывается несколько сложнее.

Закат Android

Скажу честно: я всегда с теплотой отзывался об Android и почти всегда переходил на сторону ее разработчиков в спорах «у вас там все тормозит и течет». Несмотря на множество технических проблем, ставших следствием ориентированности ОС на устройства типа BlackBerry и спешки с выпуском ОС, в целом Android был действительно грамотно спроектированной системой с массой интересных технических решений, впоследствии позаимствованных Apple.

Просто вдумайся: самая ранняя версия ОС уже включала в себя изолированные песочницы для запуска приложений, общесистемный IPC для передачи данных между приложениями и вызова их функций, гранулярный контроль полномочий, реализованный в едином компоненте, регистровую виртуальную машину в противовес пожирающей память стековой виртуальной машине Java, модульную систему синхронизации с различными сетевыми сервисами (в том числе сторонними).

Первая версия Android из коробки имела все средства для создания сложных систем автоматизации (привет, Tasker), альтернатив системным приложениям (домашний экран, почтовый клиент, СМС-мессенджер, диалер, браузер, клавиатура — все это можно заменить), приложений класса настольных (торрент-клиенты, HTTP/FTP-серверы, менеджеры файлов, среды разработки, приложения для синхронизации данных).

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

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

С точки зрения здравого смысла смартфоны от Apple для такого пользователя предпочтительнее. Большая компания, собравшая в своих стенах лучшие умы планеты, гораздо надежнее, чем сам пользователь, позаботится о его данных, времени работы от батареи и о том, какие приложения стоит использовать, а какие лучше обходить стороной.

Проблема только в том, что Apple — прямой конкурент Google, а слишком богатая возможностями и открытая платформа в этой конкуренции сослужит плохую службу. Больше возможностей — более высокая вероятность проблем. Хочешь устанавливать приложения откуда угодно? Получи малварь в нагрузку. Хочешь поменять звонилку? Жди перехвата звонков и слива данных. Хочешь приложения класса десктопных? Попрощайся с батарейкой и получи бэкдор, который сделает со смартфоном все, что будет угодно.

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

Борьба за файлы

Ярчайший пример — карты памяти. С ними всегда были две проблемы:

  1. карта памяти может быть извлечена и вставлена в другое устройство;
  2. другое устройство зачастую ничего, кроме FAT32, не поддерживает.

Как результат, нельзя просто так взять и разграничить права доступа к файлам на карте памяти (все приложения могут получить доступ ко всем файлам), нельзя взять и зашифровать содержимое карты памяти — другое устройство не сможет ее прочитать.

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

А вот дальше в офисы Google, судя по всему, завезли порошок и мозг инженеров пошел в разнос. Сначала появился фреймворк SAF (Storage Access Framework), отдавший ОС задачу выбора файлов на карте памяти с возможностью фильтровать то, что не должно быть видно всем. Затем стало необходимо подтверждать права на чтение/запись карты памяти. Затем появился безоговорочный запрет на прямую запись во внешнюю карту памяти, а также способ подключить карту памяти как внутреннее хранилище с форматированием в ext4 и шифрованием (в другие устройства уже не вставишь). Закончилась история подсистемой Scoped Storage, которая точно так же отграничивает данные одних приложений от других в весьма извращенной манере.

И все это сосуществует в одной системе в 2019 году, когда карта памяти уже, по сути, не нужна и большинству пользователей не пригождается. Но бороться с утечками хоум-видео и интимных фоточек почему-то по-прежнему необходимо.

Ненавистный пользователями экран Storage Access Framework
Ненавистный пользователями экран Storage Access Framework

Борьба за конфиденциальность

Ладно, карты памяти — больная тема, и здесь у сторонников идеи все запретить наверняка найдутся аргументы в пользу всех этих мер. Но что ты скажешь про доступ к истории звонков и СМС? В Android есть вполне себе легальный API, позволяющий любому приложению прочитать журнал звонков и содержимое СМС. Страшно? Конечно, поэтому начиная с Android 6 эти API защищены с помощью прямого запроса полномочий у пользователя.

Казалось бы, проблема решена, но Google на этом не остановилась. В прошлом году ввели новые правила размещения приложений в Google Play: если программа не относится к диалерам, СМС-мессенджерам, ассистентам, инструментам синхронизации данных или автоматизации действий, то доступ к этим API запрещен. То есть вместо того, чтобы провести аудит приложений и выкинуть из магазина те, что используют API не по назначению, Google просто вырубила целый лес полезнейших инструментов и посеяла в разработчиках сомнения («А стоит ли мне вкладывать силы и деньги в разработку приложения, если в один прекрасный момент Google убьет используемый им API?»).

А самое смешное в этой истории, что в Android до сих пор существуют API, позволяющие перехватить управление почти любым приложением (Accessibilty Service) и рисовать поверх экрана других приложений (SYSTEM_ALERT_WINDOW). Причем рисовать могут любые установленные из Google Play приложения и никакие запросы полномочий им делать не нужно.

Те самые правила размещения приложений
Те самые правила размещения приложений

Борьба за батарейку

Ладно, закончим пока с защитой данных и перейдем к сохранению батарейки. Как я уже говорил, Android проектировался как операционка, которая налагает крайне мало ограничений на разработчиков. Система останавливала приложения, переходившие в фон, но в то же время открывала им доступ к целому букету средств для выполнения действий в любое время: тут и вейклоки, и фоновые сервисы, и задания по расписанию. Если пользователь подходил к выбору приложений ответственно, это не создавало никаких проблем. Грамотные разработчики не злоупотребляли фоновым исполнением и при этом могли создавать действительно полезные инструменты вроде систем удаленного управления устройством, серверных приложений, систем автоматизации.

Разумеется, рядовые пользователи не оценили такой свободы и получили резкий расход заряда аккумулятора из-за сотен и тысяч установленных приложений, каждое из которых могло в любой момент запустить фоновый сервис. Меньше всего повезло пользователям из Поднебесной, где нет Google Play, но есть огромное количество низкокачественных приложений. Ситуация была настолько катастрофической, что каждый первый китайский производитель начал встраивать в свои прошивки функции подавления фоновой активности приложений, действующие так агрессивно, что это отражалось на работе многих известных приложений. Особо отметилась в борьбе за батарейку Huawei, смартфоны которой легко живут от одного заряда два дня, но превращают использование сторонних приложений в мучение.

Топ-10 магазинов приложений в Китае
Топ-10 магазинов приложений в Китае

Со временем в гонку включилась сама Google, но выбрала гораздо более гуманные методы. Так, в Android 4.4 появилась система подавления работы фоновых приложений, но вместо тупой блокировки работы фонового исполнения ОС вычисляла наиболее прожорливые приложения и ограничивала время их работы. В Android 6.0 добавили подсистему Doze, которая переводила устройство в режим энергосбережения спустя час бездействия устройства. Как и в предыдущем случае, работа приложений не подавлялась полностью, а приглушалась на определенные промежутки с выделением квантов времени для исполнения. Наконец, в Android 9.0 появился запрет на работу фоновых сервисов, но с несколькими оговорками: сервисы могут работать некоторое время после ухода приложения в фон или после получения приложением push-уведомления (ограничение не касается «видимых» (foreground) сервисов). В то же время была разработана функция Adaptive Battery, использующая нейронную сеть, чтобы предсказывать, какие приложения будут нужны пользователю в каждый момент времени, и подавлять работу неиспользуемых приложений.

В этом случае Google сработала действительно хорошо и не создала серьезных проблем пользователям. Пинать их можно только за слишком медленную реакцию. В то время пока инженеры Google делали вид, что проблемы не существует, другие компании уже успели «исправить» ее с помощью кувалды.

Китайская кувалда

В баг-трекере Android есть показательный тикет, из которого можно узнать много интересного о том, как действуют китайские производители, чтобы защитить пользователей от «плохих» приложений. Здесь и полный запрет на пробуждение устройства, и запрет на отправку широковещательных интентов (системные сообщения) при выключении экрана (для приложений не из белого списка), запрет на старт видимых сервисов, и ограничения на запуск конкретных функций телефона. Этим грешат практически все китайцы: Huawei, Xiaomi, Oppo, OnePlus, Nokia, на телефонах которой работает якобы чистый Android, и даже не очень китайский Samsung.

Насколько сильно производители влияют на работу сторонних приложений, источник: dontkillmyapp.com
Насколько сильно производители влияют на работу сторонних приложений, источник: dontkillmyapp.com

Борьба с Open Source

Google всегда преподносила открытый исходный код в качестве одного из главных преимуществ Android как платформы. Исходный код доступен всем, его можно изменять для своих нужд без необходимости платить лицензионные отчисления.

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

Более того, то, что сегодня принято называть словом Android, — это не совсем открытый исходный код. Поверх AOSP также работают сервисы Google, которые, помимо системы синхронизации с облаком, включают в себя, например, такие важные компоненты, как сервис push-уведомлений и система определения координат по сотовым вышкам и точкам доступа Wi-Fi. Google Assistant, который сегодня стал одной из важнейших функций смартфона, также полностью закрыт и не включен в AOSP. Другие важные функции ОС также могут быть временно или постоянно закрыты и заблокированы, как, например, подсистема Digital Wellbeing, которая появилась в Android 9 и стала доступной сторонним разработчикам только в Android 10. Система Motion Sense не просто закрытый компонент, доступный только пользователям Pixel 4, — она недоступна для сторонних разработчиков (у нее нет открытого API).

Почему все это так важно? Ведь Google не берет дополнительных денег за все эти функции, они доступны на всех сертифицированных устройствах, а тот же Motion Sense закрыт по вполне понятной коммерческой причине. Да просто потому, что большинство этих компонентов требуют установки тех самых сервисов Google, которые автоматически привязывают твой смартфон к корпорации. Хочешь конфиденциальности? Установи чистую сборку AOSP и готовься к тому, что часть приложений на ней не заведется, а остальные будут работать некорректно («Хм, у тебя тут нет сервиса push-уведомлений, так что не видать тебе уведомлений»).

Открытый Android настолько же открытый, как Telegram. Да, исходники его клиента доступны, но без сервера они бесполезны и отстают на десяток версий от официального клиента.

Борьба с разработчиками

В разделе, посвященном конфиденциальности, я уже коснулся того, насколько наплевательски Google относится к разработчикам. С помощью одного-единственного решения они разом угробили множество приложений и оставили программистов, вложивших силы и деньги в развитие своих проектов, не у дел. Точно так же они поступают с разработчиками, которые нарушили какие-то не очень четко сформулированные правила, с разработчиками, которые просто не удосужились прочитать новые правила размещения приложений, с теми, кто использовал не совсем те изображения в качестве скриншотов, кто рекламировал собственные приложения. Бам! И твое творение просто исчезает из магазина приложений, а на email приходит сообщение с объяснением причины в две-три строки. В первый раз тебя простят и позволят восстановить приложение, во второй тоже, а на третий раз твой аккаунт просто уничтожат без возможности создать новый.

А самое печальное во всей этой истории, что ты абсолютно беззащитен и не имеешь права голоса. В свое время я был искренне поражен тем, насколько команда G Suite, имеющая претензии к использованию сервиса Gmail в моем приложении, может быть терпеливой и умеющей идти на диалог. Несмотря на то что на все мои вопросы они давали стандартизированные ответы с задержкой в две недели, в сравнении с командой Google Play они обеспечивали просто превосходный сервис поддержки. Серьезно, даже такой вид диалога был чем-то гораздо большим, чем диалог с поддержкой Google Play.

Google — компания, построенная на идее автоматизации всего и вся. Автоматическое таргетирование рекламы, автоматическое ранжирование результатов, автоматические подсказки Google Assistant, автоматические шаблонные ответы на вопросы и претензии. Хочешь, чтобы с твоей проблемой разобрались, — будь разработчиком приложения с многомиллионной аудиторией, иначе ты заслуживаешь общения только с ботом.

А еще Google — это компания, которая очень любит плодить сущности. Вспомни историю с мессенджерами, когда Google каждые два года выкатывала новую систему обмена сообщениями и закрывала старую. Вспомни историю всех свернутых проектов компании. Внутри Android происходит ровно то же самое. Любая идея быстро внедряется и становится частью API, а через пару-тройку релизов объявляется устаревшей. Google может представить Android Architecture Components как спасение всех разработчиков от ада, который сама же создала, и через год приступить к разработке Jetpack Compose, который должен будет спасти тех, кого не успели спасти в предыдущий раз. Они могут объявить JobScheduler Святым Граалем и единственной правильной системой выполнения фоновых задач, а через два года призвать всех разработчиков мигрировать на WorkManager. Сегодня тебе разрешено читать карту памяти, а завтра ты будешь обязан переделать все свое приложение на новый API.

Если ты приходишь в разработку для Android в 2019 году, большую часть времени ты потратишь не на изучение API и особенностей платформы, а на то, чтобы отсеять весь балласт устаревших технологий и подходов и понять, как и почему следует делать правильно в этом году. 90% ответов на Stack Overflow окажутся неверными, половина официальной документации будет советовать плохие решения, половина примеров устареет. С одной стороны тебе будут кричать про RxJava/RxKotlin, с другой рассказывать про Kotlin Coroutines, и никто не расскажет, как правильно. Потому что даже Google не знает, как правильно.

Что с этим всем делать? Ничего, придется учиться у веб-разработчиков принимать анархию как данность.

Выводы

В YouTube можно найти выступление разработчиков Android, посвященное текущей ситуации с доступом к файлам. Там они прямо говорят, что в будущем в Google Play появится новое правило размещения приложений: любые файловые менеджеры должны будут проходить дополнительную проверку перед публикацией.

Эта история показывает, что «закручивание гаек» продолжится и в будущем мы увидим все новые и новые запреты. И если у тебя есть аргумент, что это хорошо и это тот самый путь Apple, к которому надо стремиться, то спешу разочаровать. Google не Apple, а открытый Android — это не всесторонне закрытая iOS. Android уже живет своей жизнью в Китае, а после запрета устанавливать сервисы Google на смартфоны Huawei фрагментация только усилится. Если Google Play станет жестко зарегулированной платформой, вскоре у нее появятся сильные конкуренты, которые сделают свободу, вседозволенность и лояльное отношение к разработчикам своей маркетинговой фишкой. А это, в свою очередь, приведет к еще большей фрагментации.

А проиграют в итоге все. И Google, и разработчики, и пользователи.

Источник — xaker.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*