Cygwin
Cygwin (SIG-win) es un entorno de ejecución y programación compatible con POSIX que se ejecuta de forma nativa en Microsoft Windows. Bajo Cygwin, el código fuente diseñado para sistemas operativos similares a Unix puede compilarse con modificaciones mínimas y ejecutarse.
La instalación de Cygwin tiene un diseño de directorio similar al sistema de archivos raíz de los sistemas similares a Unix, con directorios familiares, como /bin, /home, /etc, /usr y /var. Cygwin se instala con cientos de herramientas de línea de comandos y otros programas que se encuentran comúnmente en un sistema similar a Unix. Además, muchas aplicaciones pueden instalarse desde un sistema de empaquetado. El emulador de terminal Mintty es la interfaz de línea de comandos predeterminada que se proporciona para interactuar con el entorno.
Cygwin proporciona integración nativa de aplicaciones basadas en Windows. Por lo tanto, es posible iniciar aplicaciones de Windows desde el entorno de Cygwin, así como utilizar herramientas y aplicaciones de Cygwin dentro del contexto operativo de Windows.
Cygwin consta de dos partes: una biblioteca de vínculos dinámicos (DLL) como una capa de compatibilidad API en forma de biblioteca estándar C que proporciona una parte sustancial de la funcionalidad API POSIX y una amplia colección de herramientas y aplicaciones de software que proporcionar una apariencia similar a Unix.
Cygwin es un software gratuito y de código abierto, publicado bajo la licencia pública general reducida de GNU, versión 3. Originalmente, fue desarrollado por Cygnus Solutions, que luego fue adquirida por Red Hat (ahora parte de IBM), para portar la cadena de herramientas de Linux. a Win32, incluido GNU Compiler Suite. En lugar de reescribir las herramientas para usar el entorno de tiempo de ejecución de Win32, Cygwin implementó un entorno compatible con POSIX en forma de biblioteca de vínculos dinámicos (DLL).
Descripción
El entorno Cygwin se proporciona en dos versiones; la versión completa de 64 bits y una versión simplificada de 32 bits que se está eliminando gradualmente. Cygwin consta de una biblioteca que implementa la API de llamada al sistema POSIX en términos de llamadas al sistema Windows para permitir la ejecución de una gran cantidad de programas de aplicación equivalentes a los de los sistemas Unix, y una cadena de herramientas de desarrollo GNU (incluidos GCC y GDB) para permitir el desarrollo de software.. Los programadores han portado muchos programas y paquetes de Unix, GNU, BSD y Linux a Cygwin, incluidos X Window System, K Desktop Environment 3, GNOME, Apache y TeX. Cygwin permite instalar inetd, syslogd, sshd, Apache y otros demonios como servicios estándar de Windows, lo que permite que los sistemas Microsoft Windows emulen servidores Unix y Linux.
Los programas de Cygwin se instalan ejecutando la "configuración" de Cygwin. program, que descarga los archivos necesarios del programa y del paquete de características de los repositorios en Internet. Como se mencionó, hay dos versiones de este programa de instalación, una para las versiones de 32 bits de Cygwin DLL y las aplicaciones correspondientes, y otra para las versiones de 64 bits. El programa de instalación puede instalar, actualizar y eliminar programas y sus paquetes de código fuente. Una instalación completa ocupará más de 90 GB de espacio en el disco duro, pero las configuraciones utilizables pueden requerir tan solo 1 o 2 GB.
Los esfuerzos para conciliar conceptos que difieren entre los sistemas Unix y Windows incluyen:
- Una versión específica de Cygwin del comando Unix mount permite montar las rutas de Windows como "sistemas de archivos" en el espacio de archivo Unix. Los puntos iniciales de montaje se pueden configurar en
/etc/fstab
, que tiene un formato muy similar a los sistemas Unix, excepto que las rutas de Windows aparecen en lugar de dispositivos. Los sistemas de archivos se pueden montar en modo binario (por defecto), o en modo de texto, lo que permite la conversión automática entre los extremos LF y CRLF (que sólo afecta a programas que abren archivos sin especificar explícitamente texto o modo binario). - Cygwin 1.7 presentó soporte integral para locales POSIX y muchas codificacións de caracteres, por lo que la codificación UTF-8 Unicode se convirtió en el defecto. Los nombres de archivos de Windows y otros identificadores, que se codifican como UTF-16, se convierten automáticamente en y desde la codificación de caracteres seleccionada.
- Mapa de las cartas de unidad de Windows a un directorio especial, por ejemplo
C:
aparece como/cygdrive/c
. El/cygdrive
prefijo puede ser cambiado. Vías de red de Windows de la forma\HOSTSHAREFILE
son mapas para//HOST/SHARE/FILE
. Los caminos de Windows también se pueden utilizar directamente de los programas Cygwin, pero muchos programas no los soportan correctamente, por lo que esto es desalentado. - Full-featured
/dev
y/proc
se proporcionan sistemas de archivos./proc/registry
proporciona acceso directo al sistema de archivos al registro. - Cygwin soporta enlaces simbólicos POSIX, representandolos como archivos de texto simple con el conjunto de atributos del sistema. Cygwin 1.5 los representó como atajos de Windows Explorer, pero esto fue cambiado por razones de rendimiento y corrección POSIX. Cygwin también reconoce puntos de unión NTFS y enlaces simbólicos y los trata como enlaces simbólicos POSIX, pero no los crea como su semántica no son totalmente compatibles con POSIX.
- La API POSIX para la gestión de listas de control de acceso (ACLs) es compatible y mapas al sistema de Windows NT ACL.
- Formatos especiales
/etc/passwd
y/etc/group
se proporcionan que incluyen punteros a los SID equivalentes de Windows (en el campo Gecos), permitiendo la asignación entre usuarios y grupos de Unix y Windows. - El sistema de tenedor requiere duplicar un proceso se implementa completamente, pero no mapea bien a la API de Windows. Por ejemplo, no se podría utilizar la estrategia de optimización de copia en escritura. Como resultado, el tenedor de Cygwin es bastante lento en comparación con Linux y otros. (Esa sobrecarga puede evitarse a menudo reemplazando los usos de la técnica fork/exec con llamadas a las funciones desgastadas declaradas en el encabezado de Windows.h).
- El DLL Cygwin contiene un controlador de consola que emula un terminal de estilo Unix dentro de la consola de Windows. La interfaz de usuario predeterminada de Cygwin es el bash shell que se ejecuta en la consola Cygwin.
- El DLL también implementa dispositivos pseudo terminal (pty). Naves Cygwin con un número de emuladores terminales que se basan en ellos, incluyendo mintty, rxvt(-unicode), y xterm. Estos son más compatibles con los estándares de terminal Unix y las convenciones de interfaz de usuario que la consola Cygwin, pero son menos adecuados para ejecutar programas de consola de Windows.
- Se proporcionan varias utilidades para la conversión entre las rutas de Windows y Unix y los formatos de archivo, para tratar cuestiones de terminación de línea (CRLF/LF), para mostrar los DLL que un ejecutable está relacionado con, etc.
- Aparte de estar siempre enlazado contra el DLL Cygwin, los ejecutables Cygwin son ejecutables Windows normales. Esto significa que los programas Cygwin tienen pleno acceso a la API de Windows y a otras bibliotecas de Windows, lo que permite el porte gradual de programas de una plataforma a otra. Sin embargo, los programadores deben tener cuidado en mezclar las funciones conflictivas POSIX y Windows.
La versión de gcc que viene con Cygwin tiene varias extensiones para crear archivos DLL de Windows, especificar si un programa es un programa de ventana o modo consola, agregar recursos, etc. Soporte para compilar programas que no requieren la capa de compatibilidad POSIX provista por Cygwin DLL solía estar incluido en el gcc
predeterminado, pero a partir de 2014 lo proporcionan compiladores cruzados aportados por el proyecto MinGW-w64.
Cygwin se usa mucho para migrar muchas piezas populares de software a la plataforma Windows. Se utiliza para compilar Sun Java, LibreOffice e incluso software de servidor web como Lighttpd y Hiawatha.
La biblioteca API de Cygwin tiene la licencia GNU Lesser General Public License versión 3 (o posterior) con la excepción de permitir la vinculación a cualquier software gratuito y de código abierto cuya licencia se ajuste a la definición de código abierto (menos estricta que la libre Definición de Software).
Historia
Cygwin comenzó en 1995 como un proyecto de Steve Chamberlain, un ingeniero de Cygnus que observó que Windows NT y 95 usaban COFF como su formato de archivo de objeto, y que GNU ya incluía soporte para x86 y COFF, y la biblioteca C newlib. Pensó que sería posible volver a apuntar a GCC y producir un compilador cruzado que generara ejecutables que pudieran ejecutarse en Windows. Esto resultó práctico y rápidamente se desarrolló un prototipo.
El siguiente paso fue intentar arrancar el compilador en un sistema Windows, lo que requiere una emulación suficiente de Unix para permitir que se ejecute el script de shell de configuración de GNU. Se necesitaba un intérprete de comandos compatible con Bourne shell, como bash, y, a su vez, una emulación de llamadas al sistema de bifurcación y una entrada/salida estándar. Windows incluye una funcionalidad similar, por lo que la biblioteca Cygwin solo necesitaba proporcionar una interfaz de programación de aplicaciones (API) compatible con POSIX y traducir correctamente las llamadas y administrar versiones privadas de datos, como descriptores de archivos.
Inicialmente, Cygwin se llamaba gnuwin32 (no debe confundirse con el proyecto GnuWin32 actual). El nombre se cambió a Cygwin32 para enfatizar Cygnus' papel en su creación. Cuando Microsoft registró la marca comercial Win32, el 32 se eliminó para convertirse simplemente en Cygwin.
En 1996, otros ingenieros se unieron porque estaba claro que Cygwin sería una forma útil de proporcionar Cygnus' herramientas integradas alojadas en sistemas Windows (la estrategia anterior había sido usar DJGPP). Era especialmente atractivo porque era posible hacer una compilación cruzada de tres vías, por ejemplo, para usar una estación de trabajo Sun Microsystems fuerte para construir, digamos, un compilador cruzado Windows-x-MIPS, que era más rápido que usar la PC en el tiempo. En 1999, Cygnus ofreció Cygwin 1.0 como un producto comercial de interés por derecho propio, aunque no se han lanzado versiones posteriores, sino que se basan en lanzamientos continuos de código abierto.
Geoffrey Noer fue el líder del proyecto desde 1996 hasta 1999. Christopher Faylor fue el líder del proyecto desde 1999 hasta mediados de 2014. Corinna Vinschen se convirtió en codirectora desde 2004 cuando Faylor dejó Red Hat y ha sido líder desde mediados de 2014, cuando Faylor se retiró de la participación activa en el proyecto.
Desde el 23 de junio de 2016, la biblioteca Cygwin, versión 2.5.2, obtuvo la licencia GNU Lesser General Public License (LGPL) versión 3, por lo que ahora es posible vincularla con aplicaciones de código cerrado. Antes de que esto estuviera disponible había dos posibilidades: liberar el código fuente de la aplicación o comprar una licencia de Cygwin para liberar una aplicación de código cerrado.
Características
La selección del paquete base de Cygwin es bastante pequeña (alrededor de 100 MB), y contiene poco más que los shells bash (usuario interactivo) y dash (instalación) y las utilidades principales de manipulación de archivos y texto que se esperan de una línea de comandos de Unix.. Hay paquetes adicionales disponibles como instalaciones opcionales desde el programa Cygwin Setup y el administrador de paquetes ("setup-x86_64.exe" – 64 bits). Estos incluyen (de más de 12000 otros):
- Shells (es decir, intérpretes de línea de comandos): bash, dash, fish, pdksh, tcsh, zsh, mksh
- Servicios del archivo y del sistema: coreutils, findutils, util-linux
- Servicios de texto: grep, sed, diff, patch, awk
- Terminales: menta, rxvt, pantalla
- Editores: ed, emacs, joe, mined, nano, vim
- Acceso remoto: ssh, rsh, telnet
- Transferencia/sincronización de archivos remotos: ftp, scp, rsync, unison, rtorrent
- Compresión/arquido: tar, gzip, bzip2, lzma, cremallera
- Procesamiento de texto: TeX, groff, Ghostscript
- Idiomas de programación: C, C++, Objective-C, Fortran, Gambas, Perl, Python, Ruby, Tcl, Ada, CLISP, Scheme, OCaml, Prolog
- Herramientas de desarrollo: fabricar, autoherramientas, flex, bisonte, doxygen
- Sistemas de control de versiones: cvs, subversión, git, mercurial
- Servidores: Apache, BIND, PostgreSQL, Pure-FTPd, OpenSSH, telnetd, exim, UW IMAP
- Clientes: Mutt (email), Lynx (web), Irssi (IRC), estaño (newsgroups)
El proyecto Cygwin/X aporta una implementación del sistema X Window que permite que los programas gráficos de Unix muestren sus interfaces de usuario en el escritorio de Windows. Esto se puede utilizar con programas locales y remotos. Cygwin/X admite más de 500 paquetes, incluidos los principales administradores de ventanas X, entornos de escritorio y aplicaciones, por ejemplo:
- Terminales: rxvt-unicode, xterm
- Editores: emacs-X11, gvim
- Procesadores/visores de texto: LyX, xpdf, xdvi
- Web browsers: epifanía, konqueror, links, lince, midori, qupzilla, w3m
Además de las bibliotecas Xlib/XCB de bajo nivel para desarrollar aplicaciones X, Cygwin incluye varios marcos de GUI multiplataforma y de alto nivel, incluidos GTK+ y Qt.
El proyecto Cygwin Ports proporcionó muchos paquetes adicionales que no estaban disponibles en la propia distribución de Cygwin. Los ejemplos incluyen GNOME y K Desktop Environment 3, así como la base de datos MySQL y el lenguaje de programación PHP. La mayoría de los puertos han sido adoptados por mantenedores voluntarios como paquetes Cygwin, y los puertos Cygwin ya no se mantienen.