Сверхзадача. И где же она?

26 октябрь, 2011 - 13:55Андрей Зубинский

На прошлой неделе мне довелось поговорить о грустном на Дне технологий Java. Весело поговорить не получилось, увы. Но кое-что обдумалось за прошедшее время, и вот как бы в качестве более бодрой компенсации придумалась эта запись.

Мало кто замечает один вполне очевидный факт - одновременный успех Android, активность Microsoft с Windows 8, и, наконец, противостояние Oracle - Google проявляются в изменении роли платформы Java SE. Той самой Java, которую принято условно называть "клиентской". Пока не очень ярком изменении, но не заметить его уже трудно. При этом на фоне непрерывных завываний :) о мобильности, таблетах, насыщенных web-приложениях и прочем сиюминутном, судьба одной из самых развитых программных платформ окружена чуть ли не полной тишиной.

Серьёзная модификация JavaFX в версии 2.0 (фреймворка для построения графического интерфейса "модных" пользовательских приложений), произведенная в Oracle, ожидаемый и обещаемый в будущем перевод JavaFX в категорию open source, и, наконец, уже объявленная программа интеграции OpenJDK и JavaFX, - это большие события на самом деле. Очень большие.

И вот почему (естественно, это "я так думаю" ©).

Во-первых, происходящее сейчас ничем иным как "федальными войнами за будущую массовую клиентскую операционную систему" назвать нельзя. Почему феодальными? Потому что слишком много участников в этих войнах, и уж ещё больше желающих поучаствовать в них. Одна история трансформации LiMo - MeeGo - Tizen является прекрасной иллюстрацией этого неофеодализма: за буквально три года три организации и фонда трижды пытались объединить усилия разработчиков для создания клиентской ОС нового поколения. Результатом первых двух попыток фактически стала третья :)

Во-вторых, архитектура клиентской ОС, основанная на виртуализации userspace, иными словами - архитектура ОС Android, убедительно доказала свою принципиальную работоспособность даже при использовании весьма скромных по нынешним меркам вычислительных ресурсов. Это очень важный факт, потому что виртуализация и здравый скептицизм с давних времён мирно сосуществуют. Кто думает, что виртуализация - явление новое, тех могу успокоить, работающая система виртуальных машин весьма бодро чувствовала себя в 1972 году на мэйнфреймах IBM 370. И с тех пор является, как и любое техническое решение, компромиссным. Посему тот факт, что в клиентской ОС виртуализация как системный принцип, работоспособна и обеспечивает нужное пользователю, исключительно важен. Больше того, ключевой элемент виртуализации в Android, виртуальная машина Dalvik, не является "сверхпроизводительным чудом", вы можете криво усмехнуться от доменного имени этого сравнения, но поводов обвинить автора в "грубой джинсе" я лично не вижу, потому что кроме производительности в прикладной области Android (мобильные терминалы) есть ещё исключительно важные критерии (энергопотребление, например).

В-третьих, "клиентская Java", Java SE, как платформа на сегодняшний день одновременно не страдает гигантизмом, свойственным Java EE (а последняя ещё как им страдает, иначе проект Jigsaw уже давно выпилил бы из неё что-то куда более красивое, но мы этого ждём только в Java 8), и располагает фактически "сверхразвитым всем" - от доступных качественных библиотек и фреймворков чуть ли не любого назначения, от широкого спектра языков программирования (на все вкусы - от самого Java до Scala, Clojure и Бог весть чего) до самых вычурных технологических средств, практически недоступных для других платформ (не буду перечислять, их бесчисленное количество, включая отладчики с возможностью реверсивного движения против поотока исполнения кода etc).

Ничего не складывается из этих трёх вполне очевидных вещей и факта повышения активности Oracle на "клиентской стороне Java"?

У меня складывается.

Но.

Есть одно "но".

Java SE сейчас - совершенно уникальный продукт, инфраструктура, набор технологических средств и ещё много всего. С довеском в виде JavaFX 2.0 и старше - фактически идеальная инфраструктура для создания пользовательской ОС нового поколения. С учётом огромной работающей системы регенерации профессиональных кадров (посчитайте навскидку, сколько книг и на каких языках посвящены Java, прикиньте количество переизданий их, редакций и проч. - по-моему, трудно найти аналог этому громадному механизму), с учётом наличия огромного количества уже подготовленных программистов, на фоне очередного всплеска интереса среди разработчиков к Java-технологии (здесь даже при разногласиях и судебных процессах Oracle не просто должна благодарить Google за "свежую кровь" в клиентской Java, но и использовать это явление в интересах Java-сообщества, что, думаю, произойдёт обязательно), ситуацию с клиентской Java можно назвать идеальной. Причём, пожалуй, впервые в истории Java такая ситуация сложилась. Не использовать её будет непростительной ошибкой.

Так вот теперь это самое "но".

Когда-то давно Sun вынашивала планы создания пользовательского уровня ОС на базе клиентской Java - Java Desktop System. Попытка была странной, если говорить серьёзно. Что-то было понятным - например, стремление сделать "настольное" пользовательское окружение похожим на Microsoft Windows. В те годы это было вроде как нужно даже. В 2011 году, когда сама Microsoft меняет Windows до неузнаваемости, это уже никому не нужно вообще. Что-то было непонятным и тогда - например, интеграция стороннего огромного "настольного" окружения Gnome в проект. Очень странное решение. Потому что Gnome совершенно неподвластен создателям проекта, а из-за размеров и функциональности являлся как бы системоопределяющим в составе проекта. Ну, такое дело, тогда ещё было очень модно делать большие ставки на open source "настольные" проекты, сейчас к этому относятся разумнее.

Java Desktop System оказался неудачным. Но предпосылки-то никуда не делись. И даже дополнились доказательством возможности успеха. И новым крайне недостающим технологическим (JavaFX).

Иными словами, - пора Java-сообществу ставить перед собой сверхзадачу для клиентской Java. Нужна (и ведь реально нужна) клиентская виртуализированная среда, с современным GUI, слабо зависящая от лежащей ниже её системной платформы. Это не прихоть на самом деле - ослабление зависимости клиентского окружения от системного уровня, - это уже техническое требование. Посмотрите на зависимости в любом менеджере пакетов любого дистрибутива Linux. Там много ужасного на самом деле. И главное ужасное - полная асинхронность и непредсказуемость изменений во всей цепочке зависимостей. Что означает на деле труды Сизифа в условиях хаотично изменяющейся геометрии горы при наличии отсутствия пропитанных шпал вечного двигателя.

Проще говоря - технологии и условия созрели для новой Java Desktop System. Совершенно новой. Для этого есть почти всё. Есть отработанная системная "подставка" - та же ОС Linux, даже с учётом всех сложностей её как платформы, в первую очередь, - с рациональной, эффективной и управляемой на продолжительном этапе утилизацией возможностей современных аппаратных средств, особенно видеоакселераторов, JavaFX 2.0 не случайно пока не доделана для Linux :( .Есть прекрасные технологические средства, равные которым найти трудно. Есть море вылизанного, проверенного open source кода, очень качественного. Есть языки программирования на все вкусы и для всех задач. Есть архитектурные решения широчайшего диапазона - от компонетных сред до работающей модели актёров, механизмов взаимодействия на уровне Java-машин, всех мыслимых решений поддержки многопоточного программирования etc. Нет только одного - явно поставленной сверхзадачи. Которая, кстати, стимулирует (всегда стимулирует) новые идеи. А они тоже нужны как воздух. Пользовательская база 2011-го года сильно отличается от своего аналога, например, в начале 2000-х годов. Разнообразие доступных персональных вычислителей её подготовили к принятию нового. И подстегнуло это новое требовать.

Не знаю сколько ещё времени понадобится тому же Linux-сообществу, чтобы понять - дистрибутивный подход, "ведро, наполняемое каким-то дядей чужими болтами", себя исчерпал. Это уже поняли в Ubuntu, и постепенно переводят в подконтрольную себе область пользовательское окружение. Но и тут есть одно "но". Разнобой технологических средств (а разве его нет?), всевозможных тулкитов и прочего, на пользовательском уровне Linux огромен. И, понимаете, это прекрасно, конечно, что для хакерского подхода к проектированию это даёт пресловутую "свободу". Но вот пользователь хочет другой свободы - выбора качественных прикладных программ и их использования (речь идёт даже не о бесплатности, а о затратах другого рода, в первую очередь - затратах времени, бесплатная утилита, осваивать которую нужно пару лет, становится очень дорогой, для многих умных и способных людей, занятых в какой-то любой области, не связанной с хакингом - непозволительно дорогой).

Даже не знаю, в куда я всё это написал :)

Но мало ли.

Вдруг кого-то проймёт.

Уже немало.

За сим откланиваюсь.