Прага-1998: история прорывной технологии.

Как придумалась, а потом и воплотилась в жизнь одна из ключевых технологий, лежащих в основе антивирусного движка.

В чём секрет успеха компании?

Этот вопрос мне задают периодически, регулярно и в разных вариациях. Простого ответа на него, конечно же, нет и быть не может. Формула «как сделать максимально много и чтобы получилось хорошо» — она не бывает простой. Ну, наверное, за исключением мега-выигрыша в лотерею или внезапно свалившегося миллионного наследства. Но это не мой случай. У нас успех сложился из многих факторов, в основном – технологических. И сейчас я расскажу про одну из самых основных/базовых технологий, которая помогает нам уже много лет создавать прорывные продукты самых разных категорий, которые при этом гарантируют высочайший уровень защиты от всевозможных кибер-вредоносных угроз.

Краткое изложение последующих рассказов =>

Эта технология называется «Прага».

Почему так? – очень просто.

Она была придумана в городе Прага, где мы однажды весной 1998-го года собрались небольшой компанией попить пива и поесть чешских вкусностей подумать о перспективной архитектуре наших будущих продуктов. «Пражские посиделки» оказались чрезвычайно успешными — в результате была синтезирована новая компонентная технология, которая до сих пор продолжает эволюционировать и является «скелетом» практически всех наших продуктов. Более того, на эту «Единую Компонентную Архитектуру» (кратко «ЕКА») поглядывают и другие компании, которые столкнулись с проблемой «разноязыких» проектов и разработок, а такое случается частенько – особенно когда на сложном проекте работают независимые (или частично независимые) команды, а иногда даже компании. Или же они сливаются вместе в результате поглощений.

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

Итак, в этом году исполняется двадцать лет нашим «пражским посиделкам». Я понял это, разбирая архивы и наткнувшись на документ, озаглавленный Prague Technology Documentation и датированный двадцать вторым июня 1998 года. Как раз тогда мы задумались, как бороться с «инновационным» вирьём и решить некоторые чисто технические проблемы антивирусного движка. Однако найденный ответ оказался сильно шире, мощнее и полезней. Поэтому «Прага» во многом определила технологическое ядро наших продуктов на добрые десять лет вперёд.

С чего всё началось?

Компания была где-то посередине между этапами «гаража» — в нашем случае – второго этажа детского сада (да-да, мы в начале 1990-х снимали комнату в одном из детских садов(!) в московском районе Строгино) и стеклянного офиса. Мы успешно лицензировали наш движок ряду иностранных партнёров, на рынок уже вышла крайне удачная версия Antiviral Toolkit Pro 3.0, но технологическое будущее не было безоблачно. Две основные вещи, которые явно требовались и сулили большие трудности в воплощении – это обработка подозрительных объектов вне зависимости от места их хранения (типичный пример – «матрёшка» из вложенных объектов, то есть исполняемый файл малвары внутри архива, запакованного в другой архив), а также создание антивирусного движка, который максимально быстро обновлялся и требовал минимальных (в идеале – нулевых) изменений для портирования между платформами.

Если кто забыл, вирмейкеры образца конца девяностых были крайне изобретательны, поэтому для некоторых принципиально новых вирусов требовалось не просто обновление баз, а обновление именно самого движка. Интернет у пользователей при этом был либо никакой, либо очень медленный, так что доставить обновление весом в пару мегабайт было нешуточной проблемой. Учитывая, что Windows 98 только-только начала триумфальное шествие по планете, но отнюдь не вытеснила DOS целиком, все новшества в детекте должны были мгновенно работать и там, и там.

В общем, было над чем подумать, поэтому тёплая компания из Алексея Де-Мондерика, Андрея Крюкова, Андрея Никишина, Вадима Богданова, Ларисы Груздевой и меня десантировалась на неделю в Прагу-7 для мозгоштурма. Мы сняли конференц-зальчик в отеле и каждый день где-то с 9 до 5 рисовали и обсуждали, а затем перемещались в ресторан и бильярдную, чтобы продегустировать чешское пиво и «положить пузо на сукно».

Поработали продуктивно, и уехали оттуда с готовой концепцией. Де-Мондерик положил мысли на бумагу, с которой и начался этот блогпост. Вот она:

Крюков и Никишин продолжили обсуждать «Прагу», но по-настоящему активно её создание пошло уже в 1999 году, когда к этой команде присоединился Андрей Духвалов.

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

По сути «Прага» оказалась самостоятельно созданной объектно-ориентированной и модульной системой, в которой объекты создаются и управляются уже после запуска приложения, соблюдается иерархия объектов, а ядро обеспечивает такие функции как управление памятью и обмен сообщениями. Всё это с помощью довольно тонкой «прослойки» общается с операционной системой и пользовательским интерфейсом, поэтому в виде «пражских плагинов» оказалось возможным написать практически всё ядро антивируса.

Первую версию, готовую к использованию в продукте, Духвалов создал для AVP 4.0. Там на «Праге» ещё не было переписано всё и вся, но уже проявились сильные стороны архитектуры:

  • полностью решена проблема обработки сложных вложенных объектов. Антивирус на «пражском» движке был первым на рынке, кто легко лечил зараженные файлы внутри архивов, например, или детектировал вирусы на границе томов многотомного архива. Причем модулю детекта и лечения без разницы, где там зараженный объект был изначально – в каком архиве, на какой файловой системе, и так далее;
  • логика антивирусного движка легко обновляется с базами, причём для принятия новой логики не требуется перезапуск;
  • модули крошечные и легко адаптируемые к разным платформам. Благодаря этому шестую версию KAV, например, легко перенесли на Mac;
  • всё работает очень быстро и требует минимум памяти; «Прага» потребляла на порядок меньше ресурсов чем все существующие объектные фреймворки того времени.

Благодаря использованию «Праги» мы оказались на переднем краю IT-индустрии, поскольку модульный подход к разработке тогда был не столь развит, а у нас он получил очень эффективное воплощение. Мы потом даже получили на «Прагу» четыре американских патента – 7386885, 7730535, 7418710, 8234656.

Более того, «Прага» интегрировалась с кодом, написанным на иных принципах. Именно поэтому изначально её встроили в версию 4.0, но только для решения узкого круга задач. Там она показала себя настолько хорошо, что когда с разработкой версии 5.0 «по науке» вышли существенные проблемы, у Духвалова возникла мысль «а давай-ка сделаем новую версию целиком на «Праге». Из этой мысли и выросла революционная Шестёрка, история создания которой уже очень подробно описана.

Для того, чтобы вырастить из «антивирусного плагина» фреймворк для создания целого продукта, некоторые подходы пришлось обобщить и переосмыслить. Основной движущей силой здесь были Андрей Духвалов и Павел Межуев, без которых «Прага» не была бы пригодна для таких сложных задач.

Конечно, в мире разработки нет ничего идеального, и у «Праги» были два больших недостатка.

Во-первых, сложности в отладке. Во-вторых, сложность вхождения. Как ни крути, это – объектная система собственной разработки, накладывающая достаточно строгие требования на идеологию написания кода, да ещё писать модули поначалу нужно было на чистом Си. В общем, даже в 2002 году на собеседованиях программисты впадали в уныние от такой перспективы :) Быстро обучать людей было трудно, а разработчиков требовалось все больше. Ведь компания росла, продукты становились сложнее, нужно было запускать их на экзотических аппаратных платформах.

Поэтому, как и везде в IT-индустрии, в приоритет вышли технологичность и скорость разработки, и постепенно пришлось переходить на более известные и стандартные объектные фреймворки. Тем не менее, небольшие фрагменты на «Праге» успешно трудятся в наших продуктах до сих пор.

На самом деле, конечно, эти недостатки были чисто процессно-ресурсного характера. Их можно и нужно было устранить, поскольку преимущества внедрения «Праги» сильно перевешивали и сполна оправдывали затраченные ресурсы. «Прага» решала одну из сложнейших (и затратнейших) задач, которая стала особенно актуальной в последнее десятилетие — переносимость технологии (включая бинарную переносимость) на различные платформы. Вместо того, чтобы создавать продукт заново и с нуля на каждую операционку и процессор мы использовали готовый отлаженный движок. Эта долгосрочная R&D инвестиция (включая конференц-зал и пиво :) не только сполна окупилась, но до сих обеспечивает наше технологическое лидерство — «Единая Компонентная Архитектура» (как эволюционный преемник «Праги») используется в полный рост и мы пока не видим задач, которые она не могла бы решить. Это ещё раз доказывает, что хорошая архитектура может выдержать испытание десятилетиями. (Ну, за архитектуру! :)

Как любит говорить Граф (в миру – Алексей Де-Мондерик), очень важную роль «Прага» сыграла и совсем не в технологической плоскости. Вокруг неё естественным образом сформировалась группа вовлечённых людей, энтузиастов с горящими глазами, из которых впоследствии и выросла команда знаменитой «Шестёрки». Ну, за команду!

И за вот такой немного неожиданный юбилей нашей главной и очень прорывной технологии!

Советы