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 как локально, так и удалённо.

Примечания

  1. cygwin 3.6.4-1 — 2025.
  2. Лицензионные условия Cygwin (англ.). cygwin.com. Дата обращения: 15 декабря 2022. Архивировано 28 июля 2012 года.
  3. Cygwin library now available under GNU Lesser General Public License (англ.). Red Hat. Дата обращения: 23 июня 2016. Архивировано 24 июня 2016 года.
  4. Краткая история проекта Cygwin (англ.). Cygwin (2 февраля 2018). Дата обращения: 10 января 2020. Архивировано 8 января 2020 года.
  5. 1 2 Cygwin32: A Free Win32 Porting Layer for UNIX Applications (англ.). USENIX (3 августа 1998). Дата обращения: 10 января 2020. Архивировано 11 января 2020 года.
  6. (Solved) Linux Subsystem vs Cygwin vs MobaXterm (англ.). Tech Help Forum by How-To Geek (24 января 2017). Дата обращения: 1 апреля 2026. Архивировано 20 февраля 2023 года.
  7. Cygwin (англ.). www.cygwin.com. Дата обращения: 11 марта 2024.
  8. Cygwin Unites Unix and Windows Apps (англ.). Google Books (15 ноября 1999). Дата обращения: 13 января 2020. Архивировано 20 февраля 2023 года.
  9. Delorie, DJ fyi: who does what (англ.). Список рассылки (17 февраля 1999).
  10. Noer, Geoffrey A partial goodbye... (англ.). Список рассылки (19 февраля 1999).
  11. Faylor, Christopher Changing jobs (англ.). Список рассылки (31 марта 2004).
  12. Faylor, Christopher Christopher Faylor – Withdrawing from the project (англ.). Список рассылки (31 июля 2014).
  13. Cygwin Notables (англ.). www.cygwin.com. Дата обращения: 10 сентября 2024. Архивировано 6 сентября 2025 года.
  14. Cygwin library now available under GNU Lesser General Public License (англ.). www.redhat.com. Дата обращения: 27 мая 2021. Архивировано 16 июня 2021 года.
  15. Turney, Jon Cygwin x86 end-of-life (англ.) (25 ноября 2022). Дата обращения: 14 сентября 2023. Архивировано 1 апреля 2025 года.
  16. Cygwin Ports (англ.). Дата обращения: 2 мая 2025. Архивировано 11 мая 2015 года.
  17. Delorie, DJ New Cygwin Net Release (англ.). Список рассылки (17 апреля 2000).
  18. What are the licensing terms? (англ.). Cygwin. Архивировано 28 июля 2012 года.
  19. Cygwin FAQ (англ.). cygwin.com. Дата обращения: 7 января 2021. Архивировано 7 мая 2021 года.
  20. Vinschen, Corinna Updated: Cygwin 2.4.0-1 (англ.). Список рассылки (16 января 2016).
  21. Cygwin FAQ: How is fork() implemented? (англ.). cygwin.com. Дата обращения: 10 октября 2010. Архивировано 20 октября 2010 года.
  22. Highlights of Cygwin Functionality: Process Creation (англ.). Дата обращения: 24 декабря 2014. Архивировано 30 декабря 2014 года.
  23. Blake, Eric Bash doesn't launch the applications directly (англ.). Список рассылки (15 января 2009).
  24. Глава 2. Установка Cygwin (англ.). cygwin.com. Дата обращения: 17 марта 2025. Архивировано 9 октября 2025 года.
  25. Installing and Updating Cygwin Packages (англ.). Cygwin. Дата обращения: 11 января 2020. Архивировано 10 января 2020 года.
  26. Cygwin Package List (англ.). Cygwin. Дата обращения: 11 января 2020. Архивировано 5 февраля 2016 года.

Ссылки