Эпитафия Flash. Часть 2

Развитие событий: «Одноклассники» сделали windows-заповедник для вымирающих игр на Flash (6 февраля 2018)

«Роем!» продолжает публиковать эпитафию Flash за авторством CEO Game Insight Анатолия Ропотова. Во второй части Ропотов пишет о любви и ненависти.

Эпитафия Flash. Часть 1

Продукты

Несмотря на ненависть к интерфейсу Adobe Flash, он влюбился в технологию в 2001-ом году, делая на неё неимоверную ставку следующие 15 лет. От мини-игр до целых платформказино и, конечно же, социальных игр, достигающих сотен миллионов игроков, – он был всем обязан Flash. Она была той технологией, которая позволяла выпустить большой полноценный продукт за 1-2 месяца и достичь 95% пользователей в интернете. Технология определяла продукт и в первый раз с середины девяностых была вновь чистым холстом нового формата для всех создателей.

Уж сколько раз за эти годы завистливые враги пытались выкорчевать Flash из веба, пытаясь ввести общий «открытый стандарт для мультимедии». Векторную графику и анимацию для браузеров хоть и стандартизировали в 2001-ом году, почти 10 лет она работала по-разному во всех браузерах и безбожно тормозила, ведь, в отличие от Flash, она рендерилась софтварно в неакселерированном окне самого браузера. «Но зато по стандарту и без плагинов», как говорили «стандартизаторы» веба в те дни, желающие поставить «галочку опенсорсности» любой ценой, не понимая приоритетов восприятия конечного пользователя. Лишь в наши дни, буквально в последние два года, развитие браузеров, операционных систем и качество изоляции ошибок драйверов дошло до того, что страницы на вебе даже с самым сложным многослойным композитингом прямо с WebGL-контентом, прозрачностями, видео и SVG-анимациями не просто шикарно начало акселерироваться и рендериться на компе, но даже и на мобилках.

Вряд ли кто помнит Macromedia Director-контент, использующий Direct3D (или OpenGL?) в Internet Explorer и сразу выбивающий драйвера в системе до BSOD. Вряд ли кто помнит попытки внедрения SVG+JavaScript для замены Flash и все корявые тулзы того времени, не покрывающие и на 5% нужд воркфлоу настоящих дизайнеров. Чего только безумное не делалось в то время для форсированного создания опенсорс экосистемы и противостояния Macromedia!

Но Flash выживала все эти годы в то время, как браузеры кидались друг в друга какахами, устраивая войны стандартизации. Каждый так и норовил расширить спецификации HTML на свой лад, одновременно отвергая общую цель стандартизации. Первой одумалась и переродилась Mozilla с Gecko, а затем пришёл Google Chrome, взявший по иронии WebKit (уместная шутка — Apple пропатчил KDEшный KHTML под свой BSD!). До того, как эти два layout engine не стали доминировать, масштабы катастрофы были огромны: холивар браузерных идеологий спускался на уровень рендера отступов абзацев и стилей фонтов. Каждый норовил создать свой собственный HTML-тэг «под соусом инноваций» и побесить как W3C, так и конкурентов. Но, как ни смешно, мир обязан современному интернету благодаря самой революционной технологии от Microsoft — Dynamic HTML, появившейся именно в Internet Explorer.

Flash за те годы стремительно развивалась независимо от распрей браузеров. Она переизобретала себя много раз, став более снисходительной к разработчикам, которым нужен был «язык программирования», а не просто «скрипты для художников». Со второй попытки в Flash 6, ActionScript 2 позволил разработчикам писать осмысленный ООП-код средней паршивости даже во внешнем в IDE. (Flash до версии 6 не позволял делать 20% действий кодом из внешних файлов.) Все онлайн-казино ранних 2000-ых, все социальные игры конца 2000-ых были обязаны ей своему существованию. Даже энтерпрайз ненадолго склонился перед её братом Adobe Flex, принёсшим, наряду с годным MXML для создания веб-приложений, такие инновации, как бесплатный компилятор для командной строки (и серверов!).

И хоть мы уже давно не смотрим векторные мультики и перешли в эру стриминг-видео, мы должны благодарить её и за это. До Flash просмотр видео представлял из себя процесс. Долгое скачивание монструозного RealMedia-плеера заканчивалось просмотром пары минут размытой квадратной мути с булькающим звуком — настолько плохие веб-кодеки использовались в конце 90-ых. Для дистрибуторов контента её развивающаяся технология прогрессивного стриминга видео, наряду с годным DRM, была настолько крута, что в конце концов всё-таки убила каждый монструозный видео-плеер и плагин, включая WMV/Windows Media Player, QuickTime и многих-многих других. YouTube обязан Adobe Flash жизнью. "Секретным соусом" Macromedia / Adobe всегда были качественные кодеки, качественные authoring тулзы (в том числе - сторонние), и стриминговые серверы, вроде Flash Media Server, и открытых реализаций, вроде Red5.

С появлением социальных игр в 2008-ом году, Flash был глорифицирован настолько, что ассоциировался одновременно с тремя самыми позитивными эмоциями десятилетия: музыкой, видео и теперь играми.

Заря заката

Но в начале 2010-ых всё поменялось. Темпы разработки браузеров раскочегарились так быстро за счёт многоядерных процессоров, что уже тянули десяток табов с быстрыми, высокопроизводительными виртуальными машинами JavaScript, изолированными в своих процессах. Браузеры перестали спорить про принцип подсчёта отступов в тэгах и наконец-то начали соревноваться друг с другом в инновационных фичах: кто быстрее отпарсит и запустит JS-код, кто быстрее отрендерит эту огромную картинку, кто хитрее произолирует процессы и защитится от краха плагинов. И на фоне этой гонки вдруг оказалось, что её, Flash, было слишком много. Теперь любой глюк рекламного блока с SWF-файлом выбивал браузер намертво, в то время, как JavaScript больше не мог нанести такого урона и максимум ронял один таб.

Как только её не потрепали годы. Она теперь растолстела, инсталлируя антивирусник McAffee и прочий треш. Она была на каждом сайте в таком количестве, что её начали за это ненавидеть все, ведь теперь она сосала ресурсы в каждом табе. Архитектура ActiveX плагина Flash, использующегося в Internet Explorer, была построена так, что она, в первую очередь, резервировала все системные ресурсы, чтобы быть готовой отрисовать новый фрейм контента в любой момент с задержкой лишь в пару миллисекунд. Она знала, как рендерить контент на 60 кадрах в секунду, и для плавного видео и аудио жрала все ресурсы процесса про запас, нехотя отдавая их самой системе. Открывая менеджер задач, можно было только дивиться, как легко она съедала «99% ресурсов». И если это было неважно на настольных компьютерах, то такой подход был неприемлем ни на ноутбуках (а тогда наступала эра нетбуков!), ни на мобилках, которые активно появлялись, – она высасывала их батареи на раз! В то же время некоторые изменения в деприоритизации работы Flash в контейнерах NPAPI (самая древняя плагинная архитектура от Netscape) заставили YouTube начать нещадно лагать в многотабовых браузерах, и у конечных пользователей первый раз за годы начали накапливаться негативные чувства к Flash, которые, к счастью, были хотя бы решаемы «переходом на другой браузер».

Несмотря на все попытки создать «Flash Lite» и покорить мобильные платформы J2ME (и BREW в штатах) в середине 2000-ых, эта стезя была недостижимой для Adobe. Никому не было понятно, что же вкладывалось в термин «Lite". Заход Flash был попыткой поставить галочку «я сделяль» малой ценой, ведь микроскопические Flash-файлы для мобилок, по идее, просто должны были работать. Однако вместо шикарных killer apps, к которым мы так привыкли во времена FWA, начали появляться лишь корявые пошаговые мини-игры (а-ля Sokoban) и еле рендерящийся тормозящий, плохо растеризованный, уже неплавный и невекторный контент. Создатели Flash-контента понимали, как он склеится на больших мониторах, однако переход на малюсенькие экраны застал их врасплох. Невозможность навести на что-то мышкой упорно заставляла их перепридумывать подход к навигации кнопками, а сотни разных разрешений и соотношений сторон экрана с плохим разрешением подкосили всё начинание. Разработчики начали пытаться распространять десятки вариаций своего контента, а это было именно то, от чего Flash Lite грозился избавить всю J2ME индустрию, погрязшую в сотнях JAR-билдов для каждого устройства от Nokia, Siemens и прочих.

Пока многие думали, что мобильный веб органически эволюционирует из WAP XHTML-страниц во что-то большее сродни iMode в Японии (про что я написал отдельный материал), тихо подкрался iOS. Никто не предполагал, что кто-то всерьёз вставит полноценный desktop-браузер в мобилы, и многоходовочка Apple с многолетним развитием KHTML в WebKit чётко начала восприниматься как gamechanger! Никто не думал, что мобильная операционная система сможет полноценно показывать десктопный контент на мобильных экранах без изменений. Все логические аргументы - «сайты толстые и тяжёлые», «там же вообще нужно мобильное видео», «у Nokia это плохо получается», «а как же Flash» — не волновали Apple, ведь она уже играла 10 лет "в долгую" и была готова играть "в долгую" ещё следующие 10 лет.

iOS стал тем проклятием Adobe, где все скопившиеся проигранные битвы Flash стали неразрешимы. Технология попала в такое положение, где её ядро, её основные заветы и постулаты были совершенно нерелевантны, неуместны и чужды. И вместо того, чтобы адаптироваться, она объявила войну самой платформе. Потрясающие технологи Android использовали её как разменную карту в маркетинге против самой большой и амбициозной войны операционок, развернувшейся со времён «PC vs Mac». Весь мир начал настраиваться против неё, пока она проигрывала настоящую информационную войну, к которой Adobe оказалась не готова.

Flash умирает. Почему это плохо?

Мобилы

Steve Jobs знал, как бы (не) работала Flash на iOS. Его официальный месседж гласил: Flash не «open», не про «full web», в нём нет «reliability, security & performance», ничего хорошего с «battery life» не будет, он не про «touch». И в конце добавил: «нет Adobe».

И если тогда эти воинствующие месседжи звучали в сердцах Flash разработчиков как оправдания, как какая-то ненависть по отношению к Flash, то теперь, сквозь годы, можно оглянуться и сказать: все были просто упёртыми и не ощутили той самой смены поколений, которую Flash смогла когда-то принести в Web. У Adobe было 3 года для того, чтобы адаптироваться к современным реалиям, но они не просто не справились с этим вызовом, они дисконтировали всё своё сообщество талантливейших multimedia-разработчиков, подменяя понятия, обманывая их в ожиданиях, уверяя, что всё "ок", и кормя негодными завтраками. Им это долго сходило с рук, и, начиная с 2014 года, несколько других технологических компаний пошли по этой же скользкой тропинке (о них я напишу в ближайшие годы, когда заря от заката будет полыхать для всех более явно). Самым ярким состоявшимся примером для всех стал Intel, долго придерживающийся идентичной позиции относительно мобильных технологий и в пух и прах проигравший такую же битву.

Тем не менее, давайте объективно оценивать происходящее в то время с Flash и конкретно Adobe AIR — технологией, которая обещала запаковать «старый Flash» на новый лад. Принимая решения о портировании первых наших социальных игр в Game Insight под мобильные платформы, мы потратили тысячи часов на многогранное изучение проблем и ограничений потугов Adobe в их мобильном направлении, параллельно вкладываясь в версии игр на других, более стабильных технологиях. И мы, имея опыт разработки «в прошлых жизнях» как под телефоны, STB, так и под консоли, видели, что Adobe тупо не "отдупляет", что делает и происходит.

Помимо технических ограничений (полное непонимание модели менеджмента памяти и компрессии текстур), которые так важны для игр, были и более пространные идеологические проблемы. В первую очередь, требования к точности дизайна интеракций с контентом во Флэше создают неразрешимые проблемы на уровне взаимодействия с объектами на сцене (основная сущность Flash). В ДНК Flash заложены эффекты для наведения на кнопки, вся красота идеологического взаимодействия с объектами невозможна без мышки с суперточными кликами. По тем же причинам, почему не взлетел Flash Lite, в бОльшей части контента, пересобранного с Adobe AIR, было невозможно наслаждаться качественным контентом на весь экран: растровые картинки при downscale выглядели ужасно (и дефалтные фильтры были подобраны неправильно), а смена парадигмы aspect ratio и навигации усложняла восприятие конечным пользователем ещё сильнее. Дефалтные семплы и примеры, на базе которых Adobe предлагал всем строить приложения для iOS, были настолько далеки от interaction guidelines, созданных Apple, что было не смешно, а грустно. И если enterprise разработчики пожали бы плечами и увеличили размеры контролсов Flex, совсем не похожих на компоненты iOS, то дизайнеры Flash — это упорство и отвага, бойцы несуществующего сопротивления, которое отвергли все парадигмы интеракций и попытались придумать свой мир, который совсем не был похож на то, чего ждали пользователи Apple (да и если честно, то и Android).

Как Microsoft завоевала СССР, а Apple не смогла

Steve был готов получить порцию негатива за «неподдержку» Flash, но не в его стиле было объявлять создателей контента, которые должны были прийти на его платформу главной проблемой. Mixed message — Flash плохой, а для "мобил" контент должен быть адаптирован качественно с нуля - был «неровно» воспринят фанатами. Часть из них поверила Steve и бросилась в омут Obj-C и вернулась в середину девяностых, когда снова можно было выжимать максимум интерактивности на новой платформе с нуля. Разработчики получали чистый кайф от «обнуления»: на платформе не было никаких приложений, правила ещё написаны не были и они в первый раз почувствовали дух дикого запада за многие десятилетия. Однако вторая часть приверженцев Flash ушла, что называется, в защиту и многие годы отрицала происходящее.

Steve не спешил говорить плохие слова в адрес Google, чьи активно продвигаемые рекламные блоки на Flash были самой большой проблемой веба для всей экосистемы, включая для самого Google, который надеялся, что плагин Flash на Android будет, в первую очередь, рендерить рекламу. Ну а дальше - уже история, плагин пропал с мобил, а спустя несколько лет Google запер плагин Flash в тормозящей темнице PPAPI (об этом — в следующем материале).

Послание Steve про Flash было услышано лагерем Adobe не просто неправильно, а action plan был неадекватен. В ответ на Adobe has been painfully slow to adopt enhancements to Apple’s platforms вместо каких-то внятных действий был выпущен сборщик-экспортер SWF файлов сразу в IPA (aka iPhone app/iOS Package), причём в т. ч. - для "Винды". Есть причины, почему такое решение просто-напросто не могло работать нужно (и это будет в следующей части материала), ведь многие потерянные разработчики до сих пор верят, что это Apple виноват в том, что он «отключил» свет Flash на своей платформе.

Cпустя 5 лет после прихода Adobe AIR, можно по-прежнему услышать: «я жалею лишь об одном - что связался с их неадекватными обещаниями». Adobe не понял правила игры и подвёл и своё комьюнити, и платформу.

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

  • Ответить

    Хорошая эпитафия. Жаль флеш, жаль что адоб убила формат. Не понимаю, чем swf хуже svg+js, неужели нельзя было открыть формат и сделать урезанную версию для мобильных устройств… лет пять-шесть занимался программированием на флеше на любительском уровне, очень хорошая и понятная среда для создания интерактивных легких открыток. Огромная экосистема, учебники, уроки, стаковерфлоу, низкий порог вхождения для непрограммистов. Даже осилил AS3 (AS2 все же попроще). Но увы. Пересесть на canvas+js+html+svg так и не смог, да и тупит эта технология нещадно. Жаль, очень жаль.

  • Ответить

    Посмотрел несколько уроков по Adobe Edge, еще раньше тыкал Google WebDesigner. Насколько же убогий инструментарий и технология. Очень хочется надеяться, что кто-то из крупных гигантов индустрии договорится и сделает открытый стандарт векторной анимации, свободный от ненужных функций и адекватный требованиям безопасности. Flash 2 или что-то вроде, с нуля или при помощи реверс-инжиниринга SWF. Да, анимация в SVG или canvas есть, и ее можно даже пощупать в текстовом редакторе, но толку-то?