Altiris SVS: забудем о DLL Hell

30 июнь, 2006 - 13:37Игорь Дериев

Технологии виртуализации сегодня имеют все шансы стать привычными атрибутами едва ли не любого компьютера, в том числе персонального. Конечно, весьма заманчиво приобрести одну систему, а работать, как будто их у вас две. При этом нередко вне нашего внимания остается тот факт, что полноценная виртуальная машина требуется далеко не всегда – для решения многих задач достаточно эмуляции лишь части ее аспектов или подсистем. В таких случаях разумнее применять более простые, но не менее эффективные инструменты.

Термин software virtualization (или application virtualization) не так уж и нов, а решения подобного класса уже какое-то время присутствуют на рынке. Достаточно сказать, что одно из последних приобретений Microsoft – компания Softricity – работала именно в этой области. Однако нельзя не заметить определенную двусмысленность или даже противоречивость данного словосочетания. Действительно, чаще всего под виртуализацией подразумевается программная имитация некоторого оборудования, но чем подменить код приложения? Забегая вперед, можно было бы с натяжкой апеллировать к тому, что виртуализованные программы распространяются «предустановленными» в специальных контейнерах, но если вдуматься, то обычные инсталляционные модули (скажем, .MSI) не менее абстрактны.

На самом деле в отношении software virtualization правильнее было бы говорить о виртуализации среды исполнения – адресного пространства, файловой системы и управляющих структур ОС (реестра в случае Windows). Обычно это реализуется с помощью особого системного драйвера-фильтра, который перехватывает определенные типы запросов от ПО и подставляет необходимые данные – реальные или виртуальные. Подобные механизмы достаточно давно используются в самых различных решениях – мониторах активности, деинсталляторах, системах безопасности, основанных на концепции «песочницы» (sandbox). Тем не менее – и тому есть немало примеров – оригинальная рекомбинация старых идей нередко позволяет добиться совершенно новых интересных результатов.

Предметом настоящей статьи является ПО Software Virtualization Solution (SVS) 2.0 от компании Altiris, ориентированное на персональное применение. Впрочем, персональность здесь понимается в том смысле, что SVS не интегрировано с какими-либо серверными решениями (хотя подобные технологии встроены в некоторые корпоративные продукты Altiris). Однако архитектура SVS, поддержка WMI и наличие интерфейса командной строки дают возможность довольно эффективно решать различные задачи системного администрирования. Кроме того, сообщество пользователей SVS (Altiris Juice, juice.altiris.com/svs) предлагает ряд дополнительных инструментов, даже подключаемый модуль для интеграции с Microsoft SMS.

К сути

Altiris SVS забудем о DLL Hell
Редактор слоев прекрасно демонстрирует основные концепции SVS: все файлы приложения хранятся в виртуальных папках, имена которых описываются внутренними переменными

Основу функционирования SVS составляют так называемые виртуальные пакеты (VSP, Virtual Software Package), представляющие собой наборы файлов и ключей реестра. Один из самых простых и очевидных способов их получения – мониторинг стандартной процедуры установки ПО, который осуществляется из административной консоли SVS. Пакеты можно создавать и вручную, причем в них допускается размещать и данные (в том числе и исключительно их). При этом VSP хранятся в специальной папке, минимально защищенной от посторонних глаз. Безусловно, разработчики могли бы воспользоваться и какими-то более серьезными механизмами в духе rootkit, однако до сих пор из подобных экспериментов ничего хорошего не выходило. Кроме того, пакеты можно превращать в архивы (VSA, Virtual Software Archive) для транспортировки на другие машины. Собственно, подобный метод распространения ПО является одной из основных задач SVS, а дополнительная переносимость обеспечивается благодаря всемерному использованию системных переменных (вроде %windir%).

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

Кроме того, каждый слой состоит из двух подслоев: предназначенного только для чтения и перезаписываемого. Первый образуется в процессе создания VSP, второй отражает «жизнедеятельность» виртуализованного ПО и содержит настройки, подгружаемые модули, документы и т. д. Такая структура дает возможность при необходимости мгновенно возвратить слой в исходное состояние.

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

Назначение SVS

Исходя из вышесказанного достаточно легко представить и некоторые сценарии применения виртуализованного ПО. Независимые слои позволяют мирно сосуществовать нескольким версиям одного и того же файла (причем так, будто бы они находятся в одном и том же месте), т. е. им, в принципе, не страшны явления вроде DLL Hell. Благодаря этому можно:

  • спокойно экспериментировать с любыми обновлениями или системными заплатками. Деактивация соответствующего слоя гораздо проще и эффективнее стандартных механизмов System Restore;
  • параллельно использовать разные версии одного и того же ПО, не боясь нарушить их работоспособность (для целей тестирования, обучения пользователей и т. д.);
  • работать с заведомо несовместимыми между собой (практически по любым причинам) прикладными программами, в том числе одновременно;
  • обеспечить относительно защищенную среду для выполнения неизвестных приложений и интернет-программ, в первую очередь браузеров (на уже упоминавшемся ресурсе Altiris Juice придуман даже способ виртуализации Internet Explorer). В этом случае весь загруженный контент, в частности ActiveX-элементы и spyware, остается внутри слоя и может быть легко уничтожен.
Altiris SVS забудем о DLL Hell
Altiris SVS забудем о DLL Hell
Административная консоль представляет собой оболочку для быстрого выполнения основных операций с пакетами, наиболее тонкие функции доступны только из командной строки

Есть, однако, и определенные ограничения. Так, с SVS несовместимы приложения, устанавливающие системные драйверы. Впрочем, в корпоративной среде использование подобного ПО все равно обычно выходит за рамки дозволенного сотрудникам. Проблемы возникают и в том случае, если в процессе инсталляции требуется перезагрузка, но для многих ситуаций энтузиасты из Altiris Juice уже нашли обходные пути. Кроме того, SVS не работает в защищенном режиме Windows.

Стоит также обратить внимание на предельную простоту архитектуры SVS – фактически ее центральным звеном является единственный драйвер размером 160 КВ. С одной стороны, это оказывает минимальное воздействие на систему (в первую очередь на ее производительность), но с другой, – не обеспечивает полноценной виртуализации, особенно в контексте безопасности. Скажем, попавший в один из слоев «троянец» не сумеет самостоятельно перезаписать важные файлы или ключи реестра, но вполне сможет воспользоваться OLE или различными технологиями межпроцессного взаимодействия, применяемыми в том числе для обхода персональных брандмауэров. Другие решения класса software virtualization (например, от Softricity) больше похожи на обычные «песочницы» и лучше подходят в ситуациях, когда на повестке дня стоит именно безопасность, но, естественно, также не лишены недостатков.

Заключение

Похоже, что в ближайшее время интерес к технологиям software virtualization будет расти, и вовсе не из маркетинговых соображений. Системы вроде SVS позволяют просто решить многие насущные проблемы, в частночти пресловутую DLL Hell, с которой разработчики из Microsoft бились в каждой версии Windows (и, к их чести, в конце концов достигли определенных успехов). Соответственно, не первый раз приходится констатировать, что многими благами, обещанными в будущем, на самом деле можно воспользоваться уже сегодня, если со знанием дела подойти к подбору технологий и инструментов.