Обзоры
То ли Winix, то ли Undows…

То ли Winix, то ли Undows…



Использовать лучшее, что есть в двух операционных системах… Если речь идет о Unix-совместимой ОС, то здесь желающему последовать такому достойному призыву приходят на помощь различные эмуляторы платформы Windows. Да и пользователи самой ОС Windows не обойдены вниманием "эмуляторостроителей".



Не маргинальности ради…

Возможно, кому-то этот раздел статьи покажется ненужным. Возможно. И все-таки написать его надо было давным-давно. Поэтому, даже если вы не согласны с автором статьи (что совершенно нормально), попробуйте все же задуматься над сказанным здесь.

Итак, прежде чем поспешить установить на свой компьютер что-то из кратко рассмотренного в последующих разделах, постарайтесь сами себе ответить на очень неприятный, но важный вопрос "Зачем мне это надо?". Дело в том, что современные пользовательские операционные системы, прошедшие долгую эволюцию (да-да, речь идет именно о пресловутых ОС семейства Windows, достигших уровня исключительно сложных систем, поддерживающих, например, бинарную совместимость со своими предшественницами) вполне самодостаточны. Для них создано и портировано столько программного обеспечения, что говорить о нехватке чего-либо трудно (единственное, пожалуй, чего не хватает, — это времени, чтобы просто ознакомиться хоть с незначительной толикой уже имеющихся программ). И если вам нужны возможности ОС Unix в Windows просто для того, чтобы "отличаться", лучше сразу оставить это пустое занятие. Также не очень хорош такой подход для знакомства даже с утилитарным инструментальным набором Unix-совместимых ОС: все-таки платформа, даже тщательно упрятанная за самыми мощными надстройками над ядром ОС Windows, дает о себе знать. Поэтому для изучения подходит только установленная Unix-совместимая операционная система. Для автоматизации повседневной работы в ОС Windows более чем достаточна, к примеру, входящая в ее комплект подсистема WSH (ну а многочисленные "родные" и портированные развитые средства скриптинга смело можно назвать даже избыточными). И все-таки есть области применения, где Unix-эмуляция вполне разумна и полезна. Это, в частности, рабочие станции и системных администраторов гетерогенных сетей, и инженеров (научных работников), использующих отработанные бесплатные инструментальные средства GNU.

Microsoft Windows SFU

Об этой разработке мы уже говорили, но без нее наш обзор был бы неполным.
Более того, с нее мы начинаем — не из-за прихоти автора или действия на него
каких-то загадочных сил, а ввиду исключительности SFU. В отличие от конкурирующих
продуктов, SFU — надстройка непосредственно над ядром ОС Windows, во многом аналогичная,
скажем, Unix-совместимой подсистеме Mac OS X — Darwin, надстроенной над ядром
Mach. Что означает: после установки Windows Services For Unix ваш компьютер превращается
в гибрид рабочей станции Windows и "почти совсем Unix". SFU, в свое
время приобретенная Microsoft у компании Interix (более точно можно говорить о
слиянии Interix и Microsoft), на сегодняшний день бесплатна — установочный файл
системы размером почти 228 MB загружается по адресу www.microsoft.com/windows/sfu/.
Для SFU портировано большое количество GNU- и BSD-утилит, доступных с сайта Tool
Warehouse сообщества пользователей этой системы,
здесь же на форумах можно получить квалифицированную помощь по вопросам адаптации
исходных текстов для сборки Unix-программ в SFU. Немалый размер дистрибутива системы
— расплата за полноту SFU, которой для превращения Windows-компьютера в полноценную
рабочую станцию Unix не хватает разве что сервера X Window. Но у "Unix-полноценности"
SFU есть неожиданная обратная сторона. Так, пользователи Unix-совместимых ОС не
найдут в SFU, например, привычные командные интерпретаторы — вместо модных bash
и tcsh здесь использован настоящий классический Korn Shell — ksh, который нечасто
встречается в качестве основного shell в дистрибутивах легально бесплатных ОС.
Естественно, иерархия системных каталогов SFU отражает специфику именно ОС Windows
и ни в коей мере не соответствует никаким спецификациям или стандартам мира Unix.
Кроме того, SFU исключительно тесно интегрирована с Windows, что особенно ярко
проявляется в сетевых аспектах применения рабочей станции под управлением этой
ОС (так, стандартная в Unix сетевая файловая система NFS в SFU допускает аутентификацию
службой Active Directory). Все сказанное означает, что SFU — отличное подспорье
для тех пользователей и администраторов, кто одинаково хорошо знает две платформы
— Unix и Windows и кому они действительно нужны одновременно. Неопытным Unix-пользователям
начинать с SFU не стоит, даже несмотря на отличную сопровождающую документацию:
эта система сложна и требует тщательного изучения всех нюансов как ее инсталляции,
так и эксплуатации.


U/WIN

К сожалению, эта система, относящаяся к условному классу "надстроек
над пользовательской библиотекой", доступна не всем нашим читателям. Ее 90-дневную
пробную версию (работающую без ограничений) можно получить со страницы проекта
на сайте AT&T.
Бесплатную лицензию на право использования U/WIN могут иметь учебные заведения
и исследовательские организации (процесс получения лицензии в этом случае приятен
еще и тем, что дает возможность пообщаться по электронной почте с легендарным
Unix-гуру — самим Дэвидом Корном).

В основе U/WIN лежит библиотека подпрограмм, разработанная с применением стандартного
для Windows Win32 API и библиотек С от Microsoft. По сути, эта библиотека представляет
собой виртуальный системный программный интерфейс POSIX-совместимой операционной
системы (реализованный двумя динамически загружаемыми библиотеками — posix.dll
и ast.dll). Такой подход, принятый командой разработчиков под руководством Д.
Корна, позволяет использовать U/WIN во всех ОС семейства Windows — начиная от
Windows 3.1 и заканчивая Windows 2003 Server. U/WIN содержит почти 200 стандартных
Unix-утилит, есть для этой системы и небольшое количество портированных
приложений
.

Следует заметить, что U/WIN — проект, застывший в своем развитии. Последние изменения в дистрибутиве произошли более чем год назад, коммерческая поддержка системы прекращена. Возможно, кому-то покажется, что немаловажную роль в этом сыграли "освобождение" SFU и наличие еще одного бесплатного конкурента такого класса… Однако Microsoft приняла решение о бесплатном распространении SFU намного позже того, как динамика развития U/WIN уже оставляла желать лучшего, а с прочими конкурентами данная система сосуществовала вполне мирно благодаря более высокому качеству реализации.

Cygwin (и не только)

В принципе, если в описании (да и названии) U/WIN заменить "Unix" на "Linux", можно получить с приемлемой для журнальной статьи точностью общую характеристику этой системы. В ее основе также лежит эмулирующая системные вызовы POSIX-совместимой ОС библиотека (cygwin1.dll). И разработана эта библиотека с применением Win32 API — также, как и ее аналоги в U/WIN. Поскольку мы второй раз об этом говорим, стоит заметить — в принципе, не очень важный с точки зрения пользователя нюанс "происхождения" главного компонента системы позволяет отделить полноценные ОС типа SFU от эмуляторов — системообразующие компоненты SFU применяют только вызовы ядра ОС Windows (справедливости ради следует сказать и о том, что "полноценность" SFU имеет и свои недостатки — хотя бы то, что для работоспособности подобной системы требуется "базовая" ОС определенного класса, например из семейства Windows NT).

Естественно, "Linux-происходжение" Cygwin в первую очередь сказывается на простоте освоения этой системы пользователем, прошедшим школу Unix-совместимых ОС на основе ядра Linux. В отличие и от SFU, и, тем более, от U/WIN, Cygwin — проект достаточно динамично развивающийся. На момент написания статьи версия 1.5.11 (номер версии всей системы в Cygwin "привязан" к версии основной ситемообразующей динамической библиотеки) включает в себя и все необходимое для эмуляции в ОС Windows графической рабочей станции Unix (X-сервер и библиотеки Xlib), и огромное количество портированных пакетов.

В отличие от SFU, где используется традиционный для ОС Windows способ инсталляции, Cygwin предлагает пользователю более привычный для ОС Unix механизм установки небольшого инсталлятора, позволяющего определить перечень необходимых пакетов с последующей автоматической их загрузкой с одного из серверов проекта. После этой процедуры следует уже собственно установка, допускающая вторичный выбор конфигурации. Такой подход дает возможность, например, пользователям с dialup-соединением не тратить слишком много времени и средств на получение минимального, но вполне работоспособного и полезного набора программ.

По качеству сопровождающей документации Cygwin, к сожалению, далеко до своих конкурентов.
Если вы сконфигурировали и установили систему, это вовсе не означает, что для
каждой установленной утилиты найдется справочная страница. С этим можно было бы
мириться, если бы не одно "но" — отсутствие man-страниц для специфических
("ни рыба ни мясо" — "ни Windows, ни Unix") утилит — малоприятный
недостаток. Кроме того, вполне сносная онлайн-документация на эту систему не входит
в базовый дистрибутив и недоступна с помощью программы-установщика, поэтому инсталляцию
Cygwin стоит предварить именно тщательным изучением локальной копии руководства
пользователя (доступной в PDF-формате, например по этому адресу: cygwin.com/cygwinugnet/cygwinugnet.pdf.gz).

Кроме Cygwin существует еще одна, правда, фактически не выделенная в самостоятельную подсистему Unix-эмуляции, разработка. Это "минимальная система", MSYS, окружение, на базе которого строится инструментальный набор MinGW (Minimalistic GNU for Windows, "минималистский набор GNU-утилит для Windows"). На самом деле MSYS — давнее ответвление проекта Cygwin, создатели которого пошли своим путем. В основе системы — также библиотека POSIX-эмуляции, использующая Win32 API. На сегодняшний день MSYS содержит практически все утилиты GNU, и единственным серьезным ее отличием от Cygwin можно, пожалуй, считать ориентированность сообщества разработчиков и пользователей MSYS более на создание программного обеспечения в ОС Windows с применением инструментального набора GNU, чем на создание "полноценного эмулятора Unix". Соответственно, в комплекте MSYS нет реализации X Window.

Самые маленькие…

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

Главным в перечне таких полезных программ будет, несомненно, обширный инструментальный
набор, предлагаемый проектом GnuWin32.
Он состоит из нескольких десятков наиболее часто употребляемых Unix-утилит, ориентирован
на использование в комплекте со стандартным командным процессором ОС Windows (cmd.exe)
и не располагает "естественной" версией shell, заимствованной из мира
Unix. Любителей пробовать все и вся и при этом не вчитываться в документацию следует
предупредить — ни в коем случае не допускайте подобной "смеси" между
Cygwin и GnuWin32, при которой разделяемые библиотеки двух инсталляций попадут
в один каталог. В таком случае возможны различные нарушения работоспособности
обеих систем.

На основе GnuWin32 энтузиастами создано несколько полезных "самоделок",
основное отличие которых от базовой разработки — введение в состав дистрибутива
командного процессора. Так, небольшой набор UnixUtils
и собранный на его основе дистрибутив UnixKit
предлагают пользователю известную командную оболочку zsh. Оба комплекта включают
в себя минимальные средства интеграции с ОС Windows (примитивные утилиты манипуляции
системным буфером копирования). К сожалению, об уровне документирования этих "самоделок"
говорить вообще не приходится, потому как с ними даже не поставляются man-страницы
к входящим в комплект утилитам. И все-таки иногда готовое изделие стоит того,
чтобы поработать над заготовкой с напильником. Тем более что для пользователя,
имеющего работающую Unix-совместимую ОС, не составит труда "вытащить"
из нее недостающее в UnixUtils. А начинающим пользователям, не желающим по каким-то
причинам связываться с SFU или Cygwin, можно порекомендовать устанавливать отдельно
— документированные порты утилит проекта GnuWin32, "естественную" Windows-версию
командного интерпретатора zsh из одного из приведенных комплектов и руководство
по zsh — с сайта www.zsh.org.

Интерпретируя все

В отличие от всех перечисленных выше программных систем и инструментальных
наборов, среда кросс-платформенного скриптинга Ch компании SoftIntegration
использует в качестве ситемообразующего компонента не библиотеки, а… интерпретатор
языка, очень близкого к стандартному С (точнее, фактически почти ISO C99 стандартного
С). Что, впрочем, совершенно не мешает распространяемой легально бесплатно стандартной
версии Ch размером почти 25 MB обеспечивать пользователя более чем сотней популярных
Unix-утилит и собственным командным интерпретатором (не путать со знаменитым csh
из мира Unix!), язык которого одновременно совместим, естественно, со стандартным
С и оптимизирован для интерактивных применений за счет многочисленных конструкций
и встроенных функций сверхвысокого уровня. При этом Ch можно считать одним из
самых быстрых в приведенном списке эмуляторов. Качество сопроводительной документации
Ch заслуживает "отлично", равно как и его программная реализация. Как
это ни странно, но именно Ch стоит рекомендовать начинающим в качестве наименее
болезненного и затратного способа освоения Unix-подобных систем. По крайней мере,
в среде Ch можно совершенно безопасно и безнаказанно "порезвиться" и
на утилитарном уровне ОС Unix, и на уровне С-программ с их подводными камнями
указателей. "В нагрузку" к этим удовольствиям Ch предлагает весьма развитые
механизмы построения интерактивных скриптов с графическим пользовательским интерфейсом
(при этом скрипты будут кросс-платформенными).

"Мелочи", без которых трудно обойтись

В авторском списке таких "мелочей" первое место занимает очень
симпатичный и полезный набор утилит под названием Outwit.
Эти крохотные программки, "родные" для ОС Windows, созданы на основе
Unix-идеологии — каждая из них выполняет крайне ограниченный перечень функций.
Так, утилита winclip, осуществляющая доступ к системному буферу копирования (clipboard)
ОС Windows, позволяет читать или изменять его содержимое, записывать результат
операции в файл или на вход другой программы с использованием стандартного в ОС
Unix синтаксиса. Программа отлично работает как с Unicode-текстом, так и с растровыми
картинками, помещенными в clipboard. Утилита winreg дает возможность получить
доступ по чтению и записи к реестру ОС Windows как локальной, так и удаленной
машины, команда docprop "вытаскивает" из структурированных OLE-документов
всю метаинформацию (можно ее считать этаким сверханалогом Unix-утилиты file, несмотря
на совершенно различные принципы работы и выдаваемое количество информации), readlink
используется для разрешения имен, на которые ссылаются объекты пользовательской
оболочки Windows.

Хотя во всех перечисленных пакетах есть консольные версии знаменитых Unix-инструментов
"на каждый день", стоит присмотреться и к их более интерактивным аналогам.
Утилита baregrep
представляет собой GUI-вариацию на тему своего аналога командной строки — grep
и красиво "интегрируется" в окружение, сформированное любым утилитарным
набором из раздела статьи "Самые маленькие…" и средствами outwit.
Способности принимать из командной строки шаблоны поиска и копировать в clipboard
его результаты, над которыми пользователь может интерактивно выполнить процедуры
сортировки по различным критериям, делают baregrep весьма привлекательным инструментом.
Равно как и особенность ее исполнения — эта программа не требует инсталляции.
Еще одним полезным дополнением, без сомнения, "растущим из Unix", является
красивая утилита поиска-замены ReplaceEm.
С ее помощью выполняются операции поиска по шаблонам, заданным регулярными и диапазонными
выражениями, с заменой найденных фрагментов текста как в единичных файлах, так
и во множествах файлов. Арсенал таких "интерактивных" исполнений классических
Unix-утилит пополнит и программа FreeDiff
— аналог знаменитой diff.

Пользователям, выбравшим Cygwin, можно порекомендовать обратить внимание на замену
стандартной консоли Windows — разработку проекта Console.
Эта программа отлично функционирует именно с утилитами Cygwin и позволяет улучшить
Unix-эмуляцию в Windows, по крайней мере внешне (шутка). С "родными"
для Windows приложениями Console ведет себя, мягко говоря, странно (в частности,
при выполнении в ОС Windows XP SP2). Если же вы предпочитаете старые "сугубо
настольные" версии Windows (95, 98, ME), можете попробовать использовать
прототип Console — программу eConsole.
Она, конечно, работает и под управлением Windows 2000, и под XP, но в этих системах
ее применение не кажется рациональным.

В завершение…

Ситуация с Unix-эмуляцией в ОС Windows складывается весьма забавная. Мощнейшая система Windows SFU стала легально бесплатной и как-то замерла в своем развитии на версии 3.5, U/WIN фактически не развивается, MSYS вообще не позиционируется создателями как самостоятельный продукт, маленькие "самоделки" и разрозненные утилиты, даже самые удачные, на таком общем фоне глаз не радуют. Единственный активно развивающийся проект — Cygwin. Эти факты могут ровным счетом ничего не значить, а могут и подтверждать соображение, высказанное в начале статьи: современные ОС семейства Windows вполне "идеологически самодостаточны", и для массового применения встроенного в них эмулятора другой ОС очень трудно найти нишу.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: