Недавно Евгений Касперский опубликовал в своем блоге запись «Призраки вирус-оперы, или Ситхи Ассемблера«, посвященную сверхкомпактным и мощным вредоносным приложениям, обнаруженным недавно, но написанным в стиле 15-летней давности. Мой возраст позволяет помнить этих парней и их блестящую работу – речь ведь не обязательно о создателях вирусов, они были лишь частью программистского сообщества, специализировавшегося на «ручном» написании кода и программировании на ассемблере. Это похоже на Джедаев и Ситхов из мира «Звездных войн» – существ, чье оружие, лазерные мечи, было крайне специфическим и, несмотря на это, воспринималось всеми остальными героями как одно из самых мощных (кроме шуток, спросите Йоду). Увы, похоже, людей, которые помнят этих мастеров-программистов, осталось трое (я, Касперский и Билл Гейтс). А если серьезно – в сегодняшнем мире, где драйвер мышки занимает 50 мегабайт, довольно трудно вообразить, на что способен хакер старой школы при совсем небольшом количестве выделенных ресурсов. Поэтому я решил показать, о чем говорит Евгений, на несколько ином примере – а вы уж решайте, насколько плохи новости об «олдскульных» авторах заразы.
Калькуляторы под нагрузкой
В 1992 году компьютеры не были «мультимедийными» и представляли собой скорее калькулятор с большим экраном. На подавляющем большинстве из них не было ни микрофонов, ни приличной возможности воспроизводить звук – и, конечно, забудьте о веб-камерах. Там даже мышка была далеко не всегда, и первая сколько-нибудь популярная версия Windows, 3.1, вышла аккурат в середине весны. Но существовало несколько групп энтузиастов, которые любили трудные программистские задачи: использовать всю доступную память, систему команд процессора, а главное – каждый такт его мощности, чтобы выжать из компьютера 100% того, на что он способен. И в отсутствие звуковой карты, 3D-акселератора и всего того, что сегодня есть в каждом смартфоне, они заставляли те «калькуляторы» рисовать сложную 3D-анимацию с музыкой и спецэффектами и делать другие вещи, на первый взгляд невозможные. Демонстрация невозможного очень логично и кратко называлась «демо». Чтобы создать ее, нужно было быть действительно творческим человеком, в деталях, в том числе недокументированных, знать принципы работы системы, пить много кофе или чего покрепче, а главное – иметь заоблачный IQ. Само это движение, позже названное «демосценой», зародилось в середине восьмидесятых, но по законам эволюции рано или поздно его участникам потребовалось соревноваться между собой. Так родились фестивали-конкурсы создателей «демо», одним из крупнейших и самым известным стал The Assembly, впервые проведенный в 1992 году.
Future Crew вернулись из будущего
В 1992 году группа скандинавских программистов под названием Future Crew вместе с друзьями из групп Complex и Amiga организовали мероприятие под названием The Assembly, чтобы показать миру результаты своей впечатляющей работы на Ассемблере и посоревноваться за звание «Лучший кодер года».
Вообще говоря было несколько номинаций, но самыми интересными, примерно как «Лучший фильм» и «Лучший режиссер» на «Оскаре», стали звание «Лучшая демо для ПК», аналогичные титулы для платформ Amiga и C64, а также отдельная (и особенно интересная нам сегодня) номинация «Демо размером менее 64 килобайт для ПК». В первых номинациях требовалось продемонстрировать максимум возможностей платформы, которые можно выжать при помощи оптимального, артистичного даже, программирования. Последняя была непроста – на хранение всей программной части, всех графических и звуковых элементов отводилось всего 64 килобайта. Это, безусловно, побуждало к элегантному и экономному программированию – ведь в объем, в котором сегодня еле помещается картинка среднего размера, создатели «впихивали» мини-фильм длительностью несколько минут.
В 1992 году в соревновании победила группа Future Crew с демо Unreal. Название было выбрано не зря – до тех пор никто не мог выжать из компьютера подобные графические эффекты: рендеринг сцен в трех измерениях и реальном времени, сложные физические вычисления и моделирование потоков света и т.п.
А самое интересное – все-все-все для запуска демо, включая музыку, помещалось в 1 Мб! Достичь этого можно было, только мастерски программируя на Ассемблере – за внешней простотой этого языка скрывается дьявольская его сложность и трудоемкость при написании больших программ, трудно не допустить ошибок. Вот что по этому поводу говорили мне ребята из Future Crew:
Обучение программированию демо – долгий и сложный процесс. Чтобы научиться как следует, уходят годы. Можно начать с языка высокого уровня (Паскаль или Си), а затем начинать эксперименты с Ассемблером. На то, чтобы все освоить, уходит много времени, много экспериментов, и способов сократить срок не существует. Основное занятие – понять, что вы сделали, потом менять программу и следить, что получается, и набирать опыт в том, как лучше всего решать те или иные задачи. Обучение качественному программированию требует терпения, энтузиазма и тучу времени!
Те, кто тогда участвовал в соревнованиях, стали Источником Вдохновения для разработчиков позднейших приложений. Нет, у них не крали идеи, но принимали на вооружение сами подходы к решению проблем и творческое видение. Из вдохновения Assembly выросли ВСЕ современные игры, продукты Adobe для работы с видео и графикой, прогнозы погоды, GPS-приложения и Google Earth – вся многомиллиардная индустрия компьютерной визуализации.
1993 – год Second Reality и Eclipse
Успех Assembly был так велик, что на следующий год число посетителей и количество работ на конкурсе удвоилось (этот тренд сохранялся многие годы, и с 1999-го The Assembly проводится на крупнейшем футбольном стадионе Хельсинки). На нем снова – совершенно заслуженно – победила работа Future Crew. Демо «Вторая реальность», Second Reality, подняла планку качества на огромную высоту и существенно повлияла на мир программирования.
Если графика вас не впечатляет, стоит вспомнить, что демо создавалась ДО появления самого первого процессора Intel Pentium и работала на компьютерах x486 БЕЗ графического ускорителя. Second Reality глубоко впечатлила жюри и все программистское сообщество, показав, чего можно достичь профессиональной работой с Ассемблером и минималистичным подходом, – скомпилированные файлы демо занимали около 1,5 Мб. Создатели, Future Crew, стали всемирно известны.
Это видео «За кулисами Future Crew» времен создания Second Reality.
В 1994 году первое место заняла демо Verses от группы EMC
Они продемонстрировали, что физические вычисления для реалистичного отображения воды и морфинг 3D-объектов вполне могут быть сделаны с помощью процессора Pentium.
А победителя в номинации 64 кб, Airframe группы Prime, можно назвать мамой и папой современных 3D-авиасимуляторов.
Просто чтобы показать, как быстро эволюционировал код с развитием компьютеров, приведем всех победителей с 1995 по 2012 год:
Победитель Assembly 1995: Stars группы NoooN
Победитель Assembly 1996: Machines of Madness группы Dubius
Победитель Assembly 1997: Boost группы Doomsday
Победитель Assembly 1998: Gateways группы Trauma
Это, кстати, предшественник визуального решения World of Warcraft и всех 3D MMORPG.
Эра тотального 3D
В 1999 году появился массовый видеоакселератор от 3DFX, изменив графику навсегда. И демо Virhe группы MatureFunk выжало из новой технологии все, чуть не взорвав мозг первых зрителей:
Assembly по-новому
С 2000 года правила немного изменились – пропало деление по платформам Amiga, PC и C64. Демо стали соревноваться в категориях Combined demo, Oldschool demo и 64kb limit intro. Последняя ушла в историю с 2010 года, но в конце поста вы увидите несколько по-настоящему фантастических примеров того, что может сделать гуру-кодер на Ассемблере всего с 64 кб.
Вот список победителей в категории Combined demo, где продемонстрировано высочайшее мастерство владения Ассемблером:
Победитель Assembly 2000: Spot группы Exceed
Эти впечатляющие световые эффекты – не забывайте! – созданы на технологиях тринадцатилетней давности!
Победитель Assembly 2001: Lapsuus группы Maturefurk
Победитель Assembly 2002: Liquid… Wen? группы Haujobb
Подчеркну еще раз, что основная причина компактности демо и причина восхищаться ими в том, что это не записанное заранее видео, а результат проводимых в реальном времени вычислений.
Победитель Assembly 2003: Legomania группы Doomsday.
Скажите «привет» основным консольным 3D-играм :).
И, я думаю, именно тогда родилось видение, каким будет Nintendo Wii:
Победитель Assembly 2004: Obsoleet группы Unreal Voodoo:
Первый приз Assembly 2005 получила демо Iconoclast группы ASD:
В 2006 году демо Starstruck группы Black Lotus снова совершила переворот
Создатели вышли на новый уровень сложности в программировании графики. Я бы сказал, планка снова поднялась, и сильно:
В 2007 году победила LifeForce группы ASD:
Еще одна фантастически красивая работа
2008 – год под знаком Эпсилон
A точнее – демо Within Epsilon группы Pyrotech:
Победитель 2009 года
И мой личный фаворит – Frameranger, созданная объединенными усилиями групп Fairlight, CNCD и Orange:
Победитель Assembly 2010: Happiness is right around the bend группы ASD
:
Победитель Assembly 2011 – Spin группы ASD:
А завершает этот ряд феноменальная работа 2012 года Spacecut групп Carillon и Cyberaid CNCD:
64 килобайта как вызов мастерству
Просто для понимания того, что девальвированные почти до «ничто» 64 килобайта – это очень много для профессионала, приведу несколько лучших примеров демо в категории «до 64»:
Che Guevara группы Fairlight – 2005 год:
Ну а тремя годами позже, в 2008 году, та же группа показала, до чего отточила навыки за это время и умудрилась запихнуть в 64 кб вот такое демо, заслужившее первый приз в категории – Panic room:
Но лучшее компактное демо за всю историю соревнований – это работа 2010 года X marks the spot группы Portal process:
А теперь вернемся к дню сегодняшнему. Все эти демо, особенно 64-килобайтные, показывают, каких результатов может достичь талантливый программист старой школы, если задастся целью, и если он является мастером Ассемблера, что не слишком распространено в наши дни, когда продукты создаются в визуальных средах и на языках высокого уровня абстракции – Java, и им подобных.
Представьте себе на минутку, что такой программист или группа вроде Future Crew бросает все эти упражнения с 3D и направляет всю энергию и энтузиазм на создание маленького приложения, которое крадет вашу финансовую информацию или помогает изменить калибровку промышленного оборудования – от центрифуги до ядерного реактора. Что думаете, у них получится? Насколько большим будет это приложение, с учетом их успехов на ниве 64к? Найдут ли они путь обойти защиту, встроенную в продукты Microsoft или Apple? Достаточно ли у них денег, если они успешно проводили мероприятие с бесплатным входом на 5000 посетителей в течение 20 лет?
Я не буду отвечать на эти вопросы. Сделайте это сами. Но когда я слышу от кого-то: «мой компьютер не требует защиты», я вспоминаю Second reality и начинаю молиться.
К счастью, ребята из Future Crew и сегодня очень заняты. Конечно, демо были увлечением молодости, а сегодня они заняты серьезным бизнесом. Как группа Future Crew не выпустили ничего после музыкального редактора Scream Tracker 3 (декабрь 1994 года), и, хотя официального роспуска не было, пути ребят разошлись во второй половине девяностых. Но частично или целиком из бывших участников Future Crew состоят многие известные и сегодня проекты: Futuremark (тесты 3DMark), Remedy (игры Max Payne, Death Rally, Alan Wake), Bugbear Entertainment (FlatOut, Glimmerati, Rally Trophy), Bitboys (компания-производитель графического оборудования, в дальнейшем купленная ATI), и т.п.
Хочется сказать им спасибо – они изменили мир, и показали, сколь многое возможно, если как следует подумать и приложить усилия. Это же видение мы используем при разработке Kaspersky Internet Security. Спасибо за вдохновение, ребята. И я искренне надеюсь, что ни один программист, когда-либо участвовавший в The Assembly не использовал свои знания и навыки для недобрых дел.