В защиту Джобса (и, отчасти, флеша)

:

Данный топик является ответом хабраюзеру Malinnikov, автору топика Стив Джобс о флеш-технологии. Прикладная риторика, на который я написал достаточно емкий ответ. Вопрос, который был мне задан, звучит как:
Вы считаете, что причины запрета флеша на айфоне технические.

Как вы тогда объясните, что Apple запретила и нативные приложения, созданные во флеше, но не требующие флеш-плеера?


За свой ответ на оригинальный топик я получил немало плюсов в карму и несколько просьб от хабраюзеров писать ответы в виде отдельных топиков. Так как ответ на вопрос получился еще более объемным, я решил последовать совету и оформить его в виде отдельного поста (добавлю стандартное «пост первый, просьба не пинать если что не так»).

И так, что же не так с нативными приложениями, сделанными с помощью CS5? Под хабракатом попробую объяснить чуть подробнее.

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

Начну издалека.

В фразе «причины запрета технические» тоже есть своего рода неопределенность. Первопричиной любых запретов (как и борьбы против этих запретов) конечно же являются деньги, а не технические проблемы. Другое дело, как конкретно вы к этому относитесь. По меньшей мере глупо ругать Эппл (Адоби, Гугл) за то, что эти корпорации занимаются своими главными делами — зарабатывают деньги.

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

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

Зато их точно волнует время жизни батареи, тормоза/глюки в поведении телефона и, пожалуй в первую очередь — понятность и предсказуемость интерфейса. Это может показаться банальным, но те принципы, которые заложены в управлении айфоном, по-настоящему гениальны. У меня перед глазами замечательный пример маленького ребенка, который по собственному желанию, еще не умея говорить, научился пользоваться айфоном лучше собственной матери (даже звонить папе/маме) — и это, уверяю вас, не от того, что мама плохо понимает возможности телефона. Тем, кто бросится мне доказвать, что по отдельности все компоненты были и до айфона, я отвечу, что кисть и краски доступны всем, однако был всего лишь один Микеланджело, один Рафаэль, один Леонардо, один Донателло. (да, я в курсе, что Донателло — скульптор, а все вместе — TMNT).

Поэтому, давайте будем считать за аксиому тот факт, что Эппл продает айфоны килограммами не за счет виртуальных качеств вроде «камера 5 мегапикселей, процессор 1 гигагерц», а за счет того, что продукт действительно хорошо сделан, найден баланс между железной и программной составляющей, т.е. телефон нельзя поделить на OS и железку, они замечательно друг друга дополняют. Приложения из аппстора весьма органично дополняют этот симбиоз, причем, заметьте, они никак не влияют ни на поведение системы, ни на ее внешний вид — на айфоне принципиально нет костылей а-ля Spb Pocket Plus, приснопамятных всем, кто знаком с виндовс мобайл. Как нет и целого класса системных программ, позволяющих, допустим, сделать из телефона веб-камеру. Несомненно, реклама играет свою роль, но на этом рынке, да в таком окружении, на голой рекламе не выедешь — печальная участь Палма тому пример.

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

А что же флеш? А флеш банально не встраивается в эту цепь. Будучи отдельной платформой, флеш является чужеродным элементом в этой экосистеме, причем, в первую очередь, по технологическим причинам. Идею быстрой смерти аппстора я даже рассматривать не буду, просто задумайтесь, почему гугл не боится за свой магазин приложений для андроида, почему на PSP все еще есть нативные игры при наличии флеша, и т.д. и т.п. Я рассмотрю всего лишь один частный пример, общие причины описал Джобс в своем письме.

Все мы знаем, что динамические языки программирования часто тащат за собой весьма солидный рантайм. Поэтому, вопрос, заданный в начале, по большому счету некорректен — «созданные во флеше, но не требующие флеш-плеера» — в случае с нативно скомпиллированным с помощью CS5 флешем рантайм это не только стандартная библиотека классов и система управления памятью, но и подсистема рендеринга векторной графики, и аудио/видео кодеки, и всякие другие мелочи до кучи. Так же, все мы знаем, что языки, основанные на сборке мусора, имеют тенденцию к повышенному расходу памяти. В итоге, даже некоторая виртуально-минималистическая программа, написанная на флеше и скомпилированная с помощью CS5 занимает весьма ощутимые (по меркам айфона) объемы как на телефоне, так и в ОЗУ. Хорошим примером явлется игра «убей таракана», показанная осенью прошлого года представителями Адоби на какой-то очередной конференции. Помимо гигантского размера для подобного приложения (около 20мб, если мне не изменяет память, а игра состоит буквально из нескольких спрайтов), она отличалась отнюдь не детскими требованиями к ОЗУ, при этом умудряясь тормозить не хуже, чем это принято делать на больших маках. Да, я в курсе, что это был результат работы бета-версии CS5, но что-то мне подсказывает (опыт общения с продуктами Адоби — ?), что мало что изменилось с тех пор.

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

Так же напомню, что памятный пункт о запрете сторонних фреймворков появился в правилах вместе с представлением четвертой версии iPhoneOS, а вовсе не перед выходом CS5, как многие уверены. Я не думаю, что Эппл хоть как-то обязан синхронизировать свои релизы с Адобовскими, тем более предварительный показ возможностей новой версии iPhoneOS весной — (уже) традиция Эппла.

Замечу, Эппл достаточно долго шел к реализации этой псевдо-многозадачности, причем медлительность наверняка была связана в первую очередь с тем фактом, что предыдущие поколения айфонов (и айподов) несут на борту всего 128 мегабайт ОЗУ, из которых разработчику остается свободными около 30 мегабайт (примерно-условно-далеко_не_всегда-масса_нюансов). Судя по всему, инженеры Эппла посчитали, что при таких ограничениях сделать хорошо работающую с точки зрения неподготовленного пользователя «многозадачность» просто не реально — вместо засыпания программы чаще всего просто заново грузились бы в память, что, согласитесь, бессмысленно с точки зрения пользователя.

В подтверждение моих слов напомню, что многозадачность в 4-й прошивке поддерживается только на последнем поколении устройств с iPhoneOS, на текущих 3Gs и айподах 3-го поколения, на борту которых 256 мегабайт ОЗУ. До поры до времени количество таких устройств на рынке было заметно меньше, чем айфонов/айподов со 128мб ОЗУ, поэтому большинство разработчиков продолжали (и до сих пор продолжают) ориентироваться на старые ограничения. Так же специально отмечу, что к ресурсам требовательны в первую очередь игры, обычные программы имеют куда более скромные аппетиты, особенно те, которые максимально используют стандартные элементы интерфейса и не везут с собой массу дополнительных ресурсов, как это происходит с играми.

И вот тут на сцене появляется неугомонная Адоби со своим вездесущим флешем, который, как мы знаем еще по десктопам, в принципе готов поглотить всю доступную память. Так же вспомним, что одна из основных претензий со стороны флешеров (и программистов вообще) к запрету на стороннии фреймворки звучит примерно как «Я хочу иметь возможность быстро сделать кросс-платформенную программу, а Эппл не уважает мой труд, мое время и требует тратить время на изучение собственного SDK», что в переводе на понятный язык должно звучать примерно как «хочу кнопку build for iphone».

Представьте себе на минутку, что Эппл все же пропустил нативно скомпилированный флеш в аппстор. Представили? Распишу наиболее вероятный сценарий, несколько апокалиптический, но тем не менее реальный:

а) Армия флешеров (а это действительно очень большая группа лиц) бросится делать софт для айфона («вау! там же реальные деньги, а не копейки от kongregate и newgrounds»). И не важно, что нормальные деньги в аппсторе зарабатывают только действительно качественные проекты, кто ж сомневается в собственной исключительности?

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

в) Что куда более важно с точки зрения Эппла — эти программы будут заметно более требовательны к ресурсам. И если в (псевдо-)однозадачной системе такие приложения врядли сильно навредят имиджу платформы, то в многозадачной среде это будет характеризоваться емким словом disaster, просто потому, что обычному пользователю по барабану, кто именно виноват в том, что его программы чаще всего перезапускаются вместо мгновенного просыпания. Раз многозадачность работает криво, значит виноват Эппл. Кривая многозадачность отрицательно влияет на удовлетворенность пользователей, что дает лишнее конкурентное преимущество (например) андроиду. Все это в конечном счете скажется на продажах Эппла, а Эппл — вполне себе капиталистическая корпорация, единственным смыслом существования которой является «делать деньги».

Резюмируя — для того, что бы добавить такую фичу, как долгожданная многозадачность, Эппл действительно вынужден оградить себя от попыток присосаться к стройной экосистеме iPhoneOS, как того хочет Адоби. Замечу, это ведь не классовая неприязнь со стороны Эппла, это вполне нормальное желание защитить то, что приносит тебе доход, причем причины такой защитной реакции вполне технически обоснованы. Я не любитель навешивать ярлыки, но в данной ситуации мои симпатии однозначно на стороне Эппла, так как Адоби банально хочет нажиться на результатах чужого труда, при этом применяя весьма грязный прием — умело манипулиря чувствами простых разработчиков, которые несколько далеки от понимания истинного положения дел.

Вы ведь только вдумайтесь, два года подряд Эппл ясно давал понять, что флеш нежелателен на айфоне, однако светлые умы в Адоби решили пойти по методу «не в дверь, так в окно». В результате нарвались на ответную реакцию и бросились в милицию с требованием жениться, так как «даме показалось, что ей строили глазки». Был бы хороший сюжет для комедии, если бы не было так грустно…

P.S.:

Дочитав до этого места въедливый читатель может спросить — а почему на айфоне вообще так мало ОЗУ? Ответ прост — любые ограничения на мобильных платформах связаны с временем жизни батареек. На первый взгляд может показаться, что ОЗУ должна оказывать несущественный вклад в общее потребление электроэнергии, например, в сравнении с экраном, однако, на самом деле это заблуждение. В современных смартфонах используется SDRAM, на айфоне это DDR SDRAM, а этот тип памяти, как известно, требует постоянного обновления заряда конденсаторов, из которых состоят ячейки памяти. Чем больше ОЗУ, тем выше расход на поддержание заряда. И если экран телефона потребляет энергию только в момент использования, а CPU может успеть заснуть и проснуться в процессе набора текста смски, то ОЗУ требует питания всегда, даже в самом глубоком сне (более подробно можно почитать на майкрософтовском Windows Mobile Blog, года 4 назад там была замечательная статья на эту тему).

Более того, то, что пользователь ощущает как «скорость» работы смартфона, процентов эдак на 50-60 обусловленно типом ОЗУ и частотой, на которой она работает. По слухам, в айпаде поставили DDR2, чем видимо и объясняется великолепная скорость работы данного устройства. А частота процессора — в большей мере маркетинговый ход, такой же, как и мегапиксели фотокамеры.

Аминь.