Cygwin

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

Cygwin (произносится /ˈsɪgwɪn/)[5] — UNIX-подобная среда и оболочка командной строки для Microsoft Windows. Cygwin обеспечивает тесную интеграцию приложений, данных и ресурсов Windows с приложениями, данными и ресурсами UNIX-подобной среды. Из среды Cygwin можно запускать обычные приложения Windows, также можно использовать инструменты Cygwin из Windows.

Cygwin состоит из двух частей: динамически подключаемой библиотеки (DLL) cygwin1.dll, которая обеспечивает совместимость API и реализует значительную часть стандарта POSIX, и огромной коллекции приложений, которые обеспечивают привычную среду UNIX, включая Unix shell.

Изначально Cygwin был разработан компанией Cygnus Solutions, которую позднее приобрела Red Hat. Это свободное ПО, опубликованное под GNU General Public License версии 2. В настоящее время Cygwin разрабатывается сотрудниками Red Hat, NetApp и множеством добровольцев. Поддерживаются языки: C, C++, Objective-C, Fortran, Gambas, Perl, Python, Ruby, Tcl, Ada, CLISP, Scheme, OCaml, Prolog, Self (Self/x86[6]).

Подобные функциональные возможности предлагала также и Microsoft в своём пакете Services for UNIX, включающем в себя подсистему Interix, и Subsystem for UNIX-based Applications (в более новых версиях).

Cygwin представляет собой инструмент для портирования ПО UNIX в Windows и представляет собой библиотеку, которая реализует интерфейс прикладного программирования POSIX на основе системных вызовов Win32. Кроме того, Cygwin включает в себя инструменты разработки GNU для выполнения основных задач программирования, а также и некоторые прикладные программы, эквивалентные базовым программам UNIX. В 2001 году в Cygwin был включён пакет X Window System.

Кроме того, Cygwin содержит библиотеку MinGW, позволяющую работать с библиотекой Microsoft MSVCRT (Windows API); библиотека MinGW менее требовательна к объёму оперативной и дисковой памяти, распространяется под более свободной лицензией и может работать с любым программным обеспечением, но функциональные возможности спецификации POSIX реализованы в ней не так полно, как в Cygwin.

Red Hat реализует библиотеку Cygwin под лицензией GNU GPL, таким образом, её можно использовать только в программах, распространяемых под GPL. Для распространения программ, использующих библиотеку Cygwin под лицензией, отличной от GPL, необходимо приобретение лицензии у RedHat.

На странице Cygwin Mailing Lists можно подписаться на рассылку, посвящённую Cygwin.

Работа над проектом Cygwin была начата в 1995 году Стивом Чемберленом (англ. Steve Chamberlain), программистом Cygnus, заметившим, что Windows NT и Windows 95 используют в качестве формата объектных файлов формат COFF. К тому времени в GNU уже была реализована поддержка архитектуры x86, COFF, а также библиотека языка C newlib; таким образом, по крайней мере теоретически, не представляло затруднений получить из GCC кросс-компилятор, который бы создавал исполняемые файлы Windows. Это оказалось несложным и на практике. Вскоре появился прототип.

Следующим шагом было заставить компилятор работать в Windows, но для этого была необходима эмуляция многих функций Unix: к примеру, должен был работать скрипт GNU configure. Этот скрипт нуждается в оболочке типа bash, которая, в свою очередь, требует наличия стандартных потоков ввода-вывода и системного вызова fork. Windows располагает подобными функциональными возможностями, и библиотека Cygwin лишь транслирует вызовы, исходящие от программ, управляя определёнными видами данных, такими как файловые дескрипторы.

В 1996 году к проекту Cygwin присоединились и другие программисты, так как стало очевидным, что Cygwin сделает возможным использование инструментов Cygnus на системах с Windows (до этого намечалось использовать DJGPP). Этот вариант был особенно привлекательным, ведь кросскомпиляция могла бы производиться в трёх направлениях: можно было использовать мощную станцию Sun для сборки Windows-кросскомпилятора MIPS, что позволяло значительно экономить время. С 1998 года Cygnus предлагает пакет Cygwin в качестве самостоятельного продукта.

Интернационализация

[править | править код]

До версии 1.7 Cygwin не имел поддержки Unicode и использовал только ANSI-варианты функций Win32; отсутствовала также и поддержка каких-либо кодировок, отличных от родных для Windows и OEM (так, в русскоязычной версии Windows Cygwin работала лишь с CP1251 и CP866, но не KOI8-R, ISO 8859-5, UTF-8 или какими-либо другими.

Начиная с версии 1.7 кодировкой по умолчанию является Unicode в форме UTF-8 и, соответственно, по умолчанию используются региональные настройки (locale в англ.) C.UTF-8. При вызове функций Win32 Cygwin осуществляет трансляцию строк в кодировку UTF-16, используемую в системах Windows. Начиная с версии 1.7.2 Cygwin также может извлекать некоторую информацию из реестра Windows в соответствии с установками Language и Territory в региональных настройках.

Другая проблема заключалась в том, что консоль Cygwin (подобно CMD.EXE) использовала кодировку OEM. Для обхода этого ограничения рекомендовалось запускать в Cygwin демоны rshd или sshd и использовать эмулятор терминала с полной поддержкой UTF-8, например PuTTY или MinTTY (входит в комплект Cygwin). Начиная с версии 2.0 в качестве консоли Cygwin штатно использует MinTTY, который работает в кодировке UTF-8, что позволяет выводить текстовую информацию в UTF-8 напрямую. Также терминал осуществляет трансляцию вводимой с клавиатуры информации в UTF-8, в соответствии с используемой национальной раскладкой.

Работа с кириллицей

[править | править код]

В современных версиях Cygwin работа с русскими символами не требует дополнительных настроек. Символы кириллицы поддерживаются в нейтральных региональных настройках LANG=C.UTF-8, в том числе имена файлов, имена пользователей и данные реестра. Можно установить русскоязычные региональные настройки LANG=ru_RU.UTF-8. При этом включатся русскоязычные сообщения (у некоторых программ), даты по-русски (LC_TIME) и другие региональные настройки.

Примечания

[править | править код]
  1. cygwin 3.5.4-1 — 2024.
  2. 1 2 https://www.openhub.net/p/cygwin/analyses/latest/languages_summary
  3. http://cygwin.com/COPYING
  4. https://cygwin.com/COPYING.LIB
  5. Larry Hall. Re: How do you pronounce it? (англ.) (14 сентября 2004). Дата обращения: 20 июля 2024. Архивировано 28 ноября 2020 года.
  6. Self/x86 (англ.). www.gliebe.de. Дата обращения: 24 декабря 2016. Архивировано из оригинала 10 июля 2016 года.