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

19 октябрь, 2004 - 23:00Андрей Зубинский
Использовать лучшее, что есть в двух операционных системах... Если речь идет о 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 вполне "идеологически самодостаточны", и для массового применения встроенного в них эмулятора другой ОС очень трудно найти нишу.