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 состоит из двух основных частей:
- Динамически подключаемая библиотека, реализующая стандартную библиотеку C, которая служит слоем совместимости POSIX API;
- Набор программных инструментов и утилит, придающих системе 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 как локально, так и удалённо.