Cygwin
# Cygwin

Cygwin es una colección de herramientas desarrollada por Cygnus Solutions para proporcionar un comportamiento similar a los sistemas Unix en Microsoft Windows. Su objetivo es portar software que ejecuta en sistemas POSIX a Windows con una recompilación a partir de sus fuentes.

En la actualidad, el paquete está mantenido principalmente por trabajadores de Red Hat. Se distribuye habitualmente bajo los términos de la GPL con la excepción de que permite ser enlazada con cualquier tipo de software libre cuya licencia esté de acuerdo con la definición de software libre. También es posible adquirir una licencia con costo para distribuirla bajo otros tipos de licencia.

## Visión general

El sistema Cygwin tiene varias partes diferenciadas:

* Una biblioteca de enlace dinámico («cygwin1.dll») que implementa la interfaz de programación de aplicaciones POSIX usando para ello llamadas a la API nativa de Windows.
* Una cadena de desarrollo GNU (que incluye entre otras utilidades GCC y GDB) para facilitar las tareas básicas de desarrollo.
* Aplicaciones equivalentes a los programas más comunes de los sistemas UNIX. Incluso, cuenta con un sistema X (Cygwin/X) desde 2001.

Además se incluye una biblioteca denominada MinGW que funciona de forma análoga a la biblioteca nativa MSVCRT (que implementa la API de Windows). Esta biblioteca tiene una menor carga de memoria y tiene una licencia muy permisiva pero no implementa la API POSIX de forma tan completa como Cygwin.

Uno de los puntos débiles del sistema es la falta de soporte Unicode. Únicamente se soporta el juego de caracteres del sistema Windows sobre el que ejecuta.

## Historia

Cygwin surge en 1995 como un proyecto de Steve Chamberlain (un ingeniero de Cygnus). Este ingeniero descubrió que Windows 95 y NT utilizan como formato para sus archivos objeto COFF y GNU incluía soporte para x86 y COFF. Esto supone, al menos en teoría, que no sería difícil adaptar el compilador GCC y crear un compilador cruzado que creara ejecutables para Windows. Tras demostrarlo en la práctica, los primeros prototipos comenzaron a aparecer rápidamente.

El siguiente paso era intentar configurar el compilador en un sistema Windows pero esto precisa una emulación de un entorno Unix para permitir que el script autoconf ejecutara correctamente. Por ello era necesario disponer de un shell como bash que facilitara los fork y la entrada/salida. Windows proporciona esa funcionalidad por lo que la biblioteca Cygwin únicamente necesitaba traducir las llamadas y gestionar de forma interna la información privada (descriptores de fichero...).

En 1996 se unieron más ingenieros al proyecto puesto que quedaba demostrado que Cygwin sería una herramienta muy útil para permitir que las herramientas de Cygnus ejecutaran en sistemas Windows (el mecanismo empleado hasta el momento era el uso del compilador DJGPP). En 1998, Cygnus empezó a distribuir el paquete Cygwin como un producto de suficiente interés por sí mismo.

