Cygwin

Cygwin — бесплатная среда с открытым исходным кодом, реализующая Unix-подобную среду и командный интерфейс (CLI) для операционных систем на базе Microsoft Windows. Также проект включает репозиторий программного обеспечения с множеством пакетов с открытым исходным кодом. Cygwin позволяет компилировать и запускать исходные коды, предназначенные для Unix-подобных операционных систем, на Windows. Кроме того, Cygwin обеспечивает интеграцию с приложениями, созданными специально для Windows.

Эмулятор терминала mintty является основным интерфейсом для работы с окружением. Структура каталогов установки Cygwin имитирует корневую файловую систему Unix-подобных систем с такими папками, как /bin, /home, /etc, /usr и /var.

Cygwin выпускается под лицензией GNU Lesser General Public License версии 3[3]. Изначально Cygwin была разработана компанией Cygnus Solutions[4],[5] впоследствии приобретённой Red Hat (ныне часть IBM), для переноса GNU toolchain на Win32, в том числе пакета компиляторов GNU Compiler Collection. Вместо переписи инструментов для работы в среде Win32 была реализована POSIX-совместимая среда в виде DLL-библиотеки[6].

Девиз проекта — «Get that Linux feeling — on Windows» («Ощути Linux — на Windows»), хотя сам Cygwin не содержит Linux[7].

Общие сведения
Cygwin
Тип POSIX-совместимые утилиты, POSIX-библиотека, стандартная библиотека C, слой совместимости
Авторы Стив Чемберлен, Cygnus Solutions
Разработчики Cygnus Solutions, Red Hat, волонтёры проекта Cygwin
Написана на C, C++
Операционная система Microsoft Windows
Первый выпуск 1995
Аппаратная платформа Microsoft Windows
Последняя версия
Репозиторий cygwin.com/git/newlib-cy…
cygwin.com/git/newlib-cy…
cygwin.com/git/newlib-cy…
Лицензия GPLv3, LGPLv3[2]
Сайт cygwin.com (англ.)

История

Cygwin начал разрабатываться в 1995 году Стивом Чемберленом, инженером Cygnus Solutions, который заметил, что Windows NT и 95 используют формат объектных файлов COFF, поддерживаемый в GNU для x86, а также библиотеку newlib. Чемберлен предположил, что возможно ретаргетировать GCC и создать кросс-компилятор, генерирующий исполняемые файлы под Windows. Впоследствии был разработан прототип; Чемберлен запустил bootstrap компилятора в среде Windows для эмуляции Unix и запуска скриптов автоконфигурации GNU.

Изначально проект назывался Cygwin32[5]. Позже, после регистрации Microsoft товарного знака Win32, числовая часть была убрана, и название стало просто Cygwin.

В 1999 году Cygnus выпустила Cygwin 1.0 как коммерческий продукт[8]. Последующие версии распространялись уже только как open source.

В период с 1996 по 1999 год руководителем проекта был Джеффри Ноэр[9][10]. Кристофер Фейлор возглавлял проект с 1999 по 2004 год; он покинул Red Hat и стал со-руководителем с Коринной Виншен[11][12]. С середины 2014 года по настоящее время (по состоянию на сентябрь 2024 года) проект возглавляет Коринна Виншен[13].

С 23 июня 2016 года библиотека Cygwin версии 2.5.2 распространяется по лицензии GNU Lesser General Public License версии 3[14].

Описание

Cygwin выпускается в двух вариантах: полной 64-битной версии и облегчённой 32-битной, поддержка которой прекращена после последнего релиза в 2022 году[15]. Cygwin включает библиотеку, реализующую системные вызовы POSIX с помощью системных вызовов Windows для запуска программ, эквивалентных приложениям для Unix, и инструментарий GNU (в том числе GCC и GDB). Программистами были портированы X Window System, K Desktop Environment 3, GNOME[16], Apache, TeX и др. Cygwin позволяет устанавливать inetd, syslogd, sshd, Apache и другие демоны как стандартные службы Windows. Программы Cygwin имеют полный доступ к Windows API и другим библиотекам Windows.

Программы Cygwin устанавливаются с помощью программы «setup»[17], которая скачивает их из репозиториев через Интернет.

Библиотека Cygwin API лицензируется по GNU LGPL версии 3 (или более поздней) с разрешением связывания с любым свободным ПО, лицензии которого соответствуют определению Open Source[18].

Cygwin состоит из двух основных частей:

  1. Динамически подключаемая библиотека, реализующая стандартную библиотеку C, которая служит слоем совместимости POSIX API;
  2. Набор программных инструментов и утилит, придающих системе Unix-подобный интерфейс[19].

Cygwin поддерживает POSIX-совместимые символьные ссылки, представляя их в виде текстовых файлов с системным атрибутом. В версии 1.5 симлинки представлялись как ярлыки Windows Explorer, однако это было изменено в пользу производительности и соответствия POSIX. Cygwin также распознаёт точки подключения NTFS и символьные ссылки как POSIX-совместимые симлинки, но не создаёт их. Поддерживается POSIX API для работы с ACL[20].

Технические детали

Версия команды mount, реализованная в Cygwin, позволяет монтировать пути Windows как «файловые системы» в Unix-подобном адресном пространстве. Начальные точки монтирования настраиваются в /etc/fstab, синтаксис очень похож на Unix, только вместо устройств указываются пути Windows. Файловые системы можно монтировать в двоичном (по умолчанию) или текстовом режиме, в последнем происходит автоматическое преобразование перевода строк LF и CRLF (только для файлов, открытых без явной спецификации режима).

В версии 1.7 реализована полноценная поддержка POSIX локалей, по умолчанию используется UTF-8.

Системный вызов fork полностью реализован, но оптимизация copy-on-write невозможна[21][22][23].

По умолчанию пользовательский интерфейс Cygwin — оболочка bash, работающая в терминале mintty[24]. Также реализована поддержка псевдотерминалов (pty), и в состав дистрибутива входят различные эмуляторы терминала на их основе, включая rxvt, urxvt, xterm. Версия GCC для Cygwin включает расширения для создания DLL для Windows, в том числе указание типа приложения (оконное или консольное). Поддержка компиляции программ, не требующих POSIX-совместимости, раньше входила в стандартный GCC, но с 2014 года предоставляется в виде кросс-компиляторов проекта MinGW-w64.

Пакеты программного обеспечения

Базовый дистрибутив Cygwin занимает около 100 МБ[25], включает оболочки bash (для пользователя) и dash (установка), а также основные файловые и текстовые утилиты. Дополнительные пакеты доступны для опциональной установки через стандартную программу установки («setup-x86_64.exe» — 64 бит)[26]. В рамках проекта Cygwin Ports разрабатывались дополнительные пакеты, не входящие в официальный дистрибутив. Среди них были GNOME, K Desktop Environment 3, СУБД MySQL, язык программирования PHP. Впоследствии большинство портов были переняты волонтёрами как официальные пакеты, а Cygwin Ports более не поддерживается. Дистрибутив включает GTK+ и Qt.

Проект Cygwin/X позволяет запускать графические программы под Unix с выводом интерфейса на рабочий стол Windows как локально, так и удалённо.

Примечания

Ссылки