Сотворение виртуальной машины
Уже в начале шестидесятых портфолио IBM насчитывало десятки различных систем. Каждое новое поколение разительно отличалось от предыдущего. Покупатели рвали на себе волосы в тщетных попытках поспеть за всеми инновациями и требованиями нового железа. Кроме того, в те годы еще была актуальна парадигма «один компьютер за один присест выполняет только одну задачу». Вам нужно больше? Будьте добры прибегнуть к пакетной обработке (batch processing), когда одно задание выполняется на ЭВМ вслед за другим без вмешательства оператора. Неудобно, правда? Но специалисты IBM не считали это проблемой. Большая часть пользователей их машин принадлежала к научному сообществу. Им вполне хватало.
Но разнообразие систем понемногу начало досаждать IBM. Компания приняла решение заместить свой технологический зоопарк новым мейнфреймом S/360, который ко всему прочему обладал бы обратной совместимостью. Предполагалось, что компьютер будет однопользовательским и сможет работать с пакетами задач.
К первому июля 1963 года эта концепция развалилась. MIT анонсировал Project MAC — Mathematics and Computation, а не то, о чем вы могли бы подумать. Более поздняя расшифровка этого названия звучит как Multiple Access Computer. Финансировался проект щедрым грантом DARPA объемом в $2 млн — средства были выделены в том числе на изучение особенностей и перспектив компьютеростроения — в основном, в области разработки операционных систем, искусственного интеллекта и теории вычислений. А новый грант — это новые задачи. И, соответственно, новый компьютер, который сможет с ними справиться. MIT требовалась не простая, а многопользовательская машина. Первое, о чем подумали инженеры — «почему бы не заказать готовый компьютер у GE или IBM?». Однако IBM на тот момент пребывала в уверенности, что спроса на машины с разделением времени практически нет. А модифицированную под все хотелки версию стокового IBM-компьютера в MIT покупать не хотели. GE, напротив, с удовольствием приняла предложение MIT и решилась взяться за разработку многопользовательской машины.
И тут оказалось, что спрос на такие машины на рынке есть. Притом весьма солидный — даже в Bell Labs заинтересовались в их приобретении. Тревожный звоночек.
В ответ на предложения от MIT и Bell Labs в IBM была срочно разработана и выпущена CP-40. Это первая операционная система, которая реализовывала полную виртуализацию. CP-40 была предназначена специально для IBM S/360 model 40 и поддерживала до 14 виртуальных машин c 256 Кб виртуальной памяти одновременно.
Параллельно с CP-40 была разработана программа CMS. Она обеспечивала среду для запуска приложений и взаимодействия с пользователями. Изначально она проектировалась как отдельная ОС, способная работать на “голом” оборудовании или в паре с CP-40. Позже систему оптимизировали для виртуальной среды, и возможность работать на железе она потеряла.
CMS была крохотной интерактивной ОС для одного пользователя. Вся магия виртуализации обеспечивалась именно CP. Суть в том, что CP запускалась на мейнфрейме и создавала N-ное количество виртуальных машин под управлением CMS. Первый релиз CP/CMS состоялся в 1968-ом году, а к 1972-му на рынок была выпущена ее стабильная версия.
Традиционно компьютеры с тайм-шерингом поровну делили между несколькими пользователями процессорное время, память и прочие ресурсы. Характерный пример — ОС MultiCS, разработанная в MIT для Project MAC. Позднее она была передана в Bell Labs, где впоследствии «эволюционировала» в Unix.
Подход CP был существенно проще и удобнее для пользователя: каждый, кто садился за компьютер, получал свою собственную «машину». Выгода заключалась в том, что виртуальные машины имели доступ сразу ко всем ресурсам мейнфрейма, а не «запирались» в урезанном выделенном сегменте. Кроме того, это было более безопасно и надежно: никто не мог «залезть» в чужую ОС или «уронить» сразу весь мейнфрейм.
Вслед за CP-40 была разработана ОС CP-67. Именно ее можно назвать первым «промышленным гипервизором». Позднее CP-67 эволюционировала в VM/370 для мейнфрейма S/370.
Переносимость программного обеспечения
Чуть выше мы упомянули Unix. Несмотря на то, что эта ОС не умеет запускать гостевые операционные системы, она подойдет для иллюстрации другого свойства ПО.
Unix умеет в виртуализацию на уровне пользователя или рабочего пространства. Несколько человек делят между собой процессор, память, жесткий диск и прочие ресурсы, но каждый из них имеет собственный профиль, независимый от всех прочих.
В зависимости от конфигурации системы пользователь может установить собственный набор дополнительного ПО и управлять политиками безопасности. Но не только этим славна Unix — де-факто, это первая операционная система, открывшая дорогу к виртуализации приложений.
Все ее предшественники писались на голом языке ассемблера, что намертво привязывало их к конкретному компьютерному железу. В то же время C, на котором была написана Unix, позволял портировать ее на любой компьютер с куда меньшими усилиями. Достаточно было переписать специфичные участки кода и перекомпилировать ОС для новой платформы. Переносимость сделала Unix самой популярной системой своего времени.
Виртуализация приложений
Любой искушенный пользователь Unix, владеющий компиляторами C, мог без труда запустить любую программу на любом компьютере. Удобно? Почти. Осталось найти способ переносить приложения между компьютерами, минуя процесс компиляции. То есть, виртуализировать их.
В 1990 году Sun Microsystems запустила проект Stealth. Он был инициирован инженерами компании, которым не нравился подход Sun к использованию API C и C++. Они были уверены в том, что есть лучший способ писать и запускать приложения. Проект несколько раз переименовывали — среди версий были даже экзотичные Oak и Web Runner. Как вы уже наверняка догадались, в 1995 году проект достиг релиза под окончательным именем Java.
Планировалось, что наибольшее применение Java найдет во всемирной паутине. Интернет — это колоссальная сеть, состоящая из компьютеров, работающих под разными операционными системами. Платформа, которая позволит запускать одни и те же приложения на всех этих машинах без необходимости переписывать и перекомпилировать их, была обречена на успех. В 1996 году в свет вышел Java Development Kit (JDK).
Java был уникален в своем роде. Можно было запустить написанную на нем программу на любом компьютере с установленной бесплатной Java Run-Time Environment (JRE).
Говоря упрощенно, Java работает так: сначала написанная программа компилируется в Java Byte Code. Это своеобразный язык-посредник, с которым умеет работать JRE. Непосредственно в момент запуска программы JRE компилирует программу из байт-кода для целевого железа. Программисту не надо заботиться о том, для какого «железа» и какой ОС он пишет код, а пользователю не приходится заниматься компиляцией.
JRE включает в себя массу компонентов, наиболее интересным из которых является Java Virtual Machine. Любое приложение запускается именно в ней. Можно представить себе JVM как очень маленькую ОС, созданную для того, чтобы запускать Java-приложения. Заботы о портировании JVM для всех мыслимых устройств Sun/Oracle берет на себя. Тем не менее, этот подход имеет известные ограничения.
Широкое распространение аппаратной виртуализации
Как было сказано выше, IBM первой применила концепцию виртуальных машин в коммерческой среде. Виртуальные машины, подобные тем, что запускались на мэйнфреймах IBM, до сих пор где-то используются, хотя большинство компаний отказались от мейнфреймов.
Еще в январе 1987 года Insignia Solutions продемонстрировала программный эмулятор под названием SoftPC. Он позволял запускать приложения DOS на рабочих станциях под управлением Unix. Это был невероятный цифровой подвиг. В то время ПК, способный запустить MS-DOS, стоил порядка $1500, а использование SoftPC «обходилось» всего в $500.
К 1989 году Insignia Solutions выпустила версию SoftPC для Mac. В этой версии была добавлена возможность запускать приложения Windows. К 1994 году Insignia Solutions начала продавать свое программное обеспечение с разными предустановленными операционными системами — в том числе с SoftWindows и SoftOS/2.
Успех SoftPC вдохновил и других игроков. В 1997 году Apple создала программу под названием Virtual PC и начала распространять ее через компанию Connectix. Virtual PC, как и SoftPC, позволял пользователям запускать копию Windows на Mac, это позволило обойти проблему несовместимости программного обеспечения. А в 1998 году была основана всемирно известная компания VMware. Год спустя на рынок вышла первая версия VMware Workstation. Сначала она была доступна только в Windows, но позже добавилась поддержка других операционных систем.
VMware достойна упоминания хотя бы потому, что на данный момент это безусловный лидер рынка виртуализации. В 2001 году VMware выпустила два новых продукта для корпоративного сегмента: ESX Server и GSX Server. GSX Server позволял пользователям запускать виртуальные машины поверх существующей операционной системы, например Microsoft Windows. Это так называемый гипервизор 2-го типа. ESX Server, гипервизор 1-го типа, не требует наличия ОС-хоста.
Гипервизоры 1-го типа намного более эффективны, поскольку для их работы не требуется выделять ресурсы на запуск «основной» системы. Кроме того, они традиционно более гибки в настройке.
После выпуска ESX Server в 2001 году в корпоративном сегменте наметился экспоненциальный рост интереса к виртуализации. VMware добавила много дополнительных продуктов для улучшения функционала ESX Server.
На рынке есть и другие поставщики ПО для виртуализации. В 2003 году Microsoft приобрела Connectix, и Virtual PC была переиздана. Сначала под брендом Microsoft Virtual PC 2004, затем — Microsoft Virtual Server 2005.
В 2007 на рынке виртуализации появился еще один игрок — Citrix Inc. Компания приобрела XenSource, платформу виртуализации с открытым исходным кодом, созданную в 2003 году, и вскоре после этого переименовала продукт в XenServer.
Публикация приложений
Во времена UNIX доступ к опубликованным приложениям можно было получить через Telnet, а затем SSH.
Windows и OS/2 не давали удаленного доступа к приложениям без использования сторонних инструментов. А существовавшее специализированное ПО было доступно только одному пользователю за раз.
Кому-то в IBM пришла в голову идея создать многопользовательский интерфейс для OS/2, однако боссам компании идея не пришлась по вкусу. В 1989 году Эд Лакобуччи ушел из IBM и основал собственную компанию под названием Citrus. Вскоре компания была переименована в Citrix, комбинацию Citrus и Unix.
Citrix лицензировала исходный код OS/2 через Microsoft и приступила к созданию программного расширения для нее. Два года спустя OS/2 таки получила многопользовательский интерфейс MULTIUSER.
В 1991 году Microsoft объявила об окончании поддержки OS/2, и Citrix пришлось свернуть проект. Однако полученный опыт позволил переориентироваться на создание подобного ПО, но уже для Windows.
В 1993 году Citrix приобрела Netware Access Server у Novell. В 1995 году этот продукт начал продаваться под именем WinFrame. WinFrame представляла из себя Windows NT 3.5 с возможностями удаленного доступа. Сразу несколько пользователей могли одновременно подключиться к ней для удаленного запуска приложений.
Во время разработки WinFrame для Windows NT 4.0 Microsoft отказала Citrix в лицензии, и продукт по соглашению сторон был интегрирован в Windows NT 4.0 в качестве набора служб терминалов. Citrix согласилась не создавать конкурирующий продукт, но получила возможность расширить функциональные возможности служб терминалов.
Виртуальные рабочие столы
Виртуальные рабочие столы в их современном понимании — это весьма молодая тема. В чем-то их концепция похожа на то, что IBM предложила в далеких 1960-х. Каждый пользователь получает собственную выделенную ОС и может делать в ней всё, что ему заблагорассудится, не подвергая опасности других пользователей в системе.
Переход от виртуальных рабочих столов на мэйнфреймах к виртуальным рабочим столам в том виде, в каком мы их знаем сегодня, на самом деле произошел только в 2007 году, когда VMware представила свой продукт для VDI. В принципе, сотрудники компаний и ранее могли пользоваться виртуальными рабочими столами в качестве основного ПК, но это было сопряжено с массой административных сложностей. А появление Virtual Machine Manager и аналогичных продуктов дало мощный старт целому направлению в области виртуализации.
В будущих статьях мы подробно рассмотрим самые интересные аспекты истории виртуализации — поговорим и о железе, и о знаковых программных решениях.