Apple, Flash и Adobe

IT мир последнюю неделю полнится флеймом на тему Apple и Adobe. Если кто не следит за процессом, поясню — очередная версия iPhone OS так и не собралась поддерживать Flash, при этом в очередной редакции соглашения разработчика специально внесен пункт об обязательном использовании стандартных средств разработки Apple-то есть на идее Adobe компилировать Flash в код для исполнения на iPhone можно ставить жирный крест.

Мы, собственно, уже обсуждали в последнем «Радио-Т» эту тему, но уже после этого я прочел несколько постов и, в частности, на Хабре, по мотивам которых захотелось высказаться.

Главный пункт, который, видимо, кажется вполне приемлемым разработчикам, но который задел меня сильнее всего, вот:

Чем возможности аппаратуры HTC Hero отличаются от iPhone? А от Nokia N900? Только прошу не сравнивать операционки, размеры экранов или наличие клавиатуры. Я прошу задаться вопросом «Что может делать iPhone такого, чего технически не мог бы сделать телефон на базе Android?». Правильный ответ — возможности аппаратуры идентичны.

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

Это же совершенно ясно! Идеальный вариант для разработчика — написать приложение, тыкнуть кнопку «получить версии для разных устройств», и счастливо зарабатывать на результате. Любые различия платформ порождают массу проблем с разработкой и поддержкой кода! Только представьте, что вам приходится переписывать вашу игру с Actionscript на С++, Java, Objective-C… а потом ещё и сопровождать все четыре версии кода, параллельно улучшая, исправляя ошибки и т. д.

Поэтому индустрия разработки ПО всегда поощряла создание инструментов для быстрого переноса приложений с одной платформы на другую с минимальными доработками. Примеров — масса: Java, Mono, OpenGL, Qt, HTML, CSS, Javascript… этот список можно продолжать очень долго.

Что мы видим в процитированном отрывке? Я вижу простую вещь — желание разработчика сделать поменьше, а получить побольше. Я это желание вполне понимаю, но одобрить не могу. Идея разработчика «не сравнивать операционки, размеры экранов или наличие клавиатуры» вообще представляется крайне странной — предлагается не учитывать при разработке приложения аппаратные особенности или стандартный интерфейс ОС? Поправьте меня, но ведь в результате мы получим приложение, которое будет работать под Android, iPhoneOS, Symbian, Windows Mobile — и ни в одной из систем пользователи приложения не увидят привычного для указанной системы интерфейса. Я видел такое у Opera Mini и мне кажется весьма символичным, что новая версия Opera Mini под Android — это не кроссплатформенная java-программа, а native application.

Индустрия ПО, конечно, всегда что-то поощряла, но по факту, я подозреваю, апологеты кроссплатформенности вряд ли смогут назвать достаточно убедительные примеры приложений, которые хорошо работают и правильно выглядят в разных операционных системах. Firefox? Не забудьте уточнить, с какой версии версия под MacOS научилась правильно рендерить шрифты. Что-нибудь, написанное на Java? Увы, оно выглядит, конечно, одинаково в любой ОС, но это «одинаково» — одинаково ужасно. HTML/CSS/JavaScript? Да они иначе отрабатываются разными браузерами под одной OS, куда уж говорить о разных операционках?

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