De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Cygwin ( / s ɪ del ɡ w ɪ n / SIG -ganar ) [2] es un POSIX programación y compatible con el entorno de ejecución 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 una mínima modificación y ejecutarse. [3]

El directorio de instalación de Cygwin tiene un diseño de directorio similar al del sistema de archivos raíz de los sistemas tipo Unix, con directorios familiares, como / bin, / home, / etc, / usr, / 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, se pueden instalar muchas aplicaciones 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. [3]

Cygwin proporciona integración nativa de aplicaciones basadas en Windows. [4] Por lo tanto, es posible iniciar aplicaciones de Windows desde el entorno Cygwin, así como utilizar herramientas y aplicaciones Cygwin dentro del contexto operativo de Windows.

Cygwin consta de dos partes: una biblioteca de enlace dinámico (DLL) como una capa de compatibilidad API en forma de biblioteca estándar C que proporciona una parte sustancial de la funcionalidad de la API POSIX , y una extensa colección de herramientas y aplicaciones de software que proporcionan un sistema Unix. -como aspecto y tacto . [4]

Cygwin es un software gratuito y de código abierto , lanzado bajo la GNU Lesser General Public License versión 3. [5] Fue desarrollado originalmente por Cygnus Solutions , [6] [7] que luego fue adquirido por Red Hat (ahora parte de IBM ) , para migrar la cadena de herramientas de Linux a Win32, incluido el GNU Compiler Suite . En lugar de reescribir las herramientas para usar el entorno de ejecución de Win32 , Cygwin implementó un entorno compatible con POSIX en forma de una biblioteca de vínculos dinámicos (DLL). [8]

Descripción [ editar ]

El entorno Cygwin se proporciona en dos versiones; la versión completa de 64 bits y una versión reducida de 32 bits que se está eliminando gradualmente. Cygwin consiste en una biblioteca que implementa la API de llamada al sistema POSIX en términos de llamadas al sistema de Windows, una cadena de herramientas de desarrollo GNU (que incluye GCC y GDB ) para permitir el desarrollo de software y la ejecución de una gran cantidad de programas de aplicación equivalentes a los de los sistemas Unix . Los programadores han portado muchos programas y paquetes Unix, GNU, BSD y Linux a Cygwin, incluido el sistema X Window , K Desktop Environment 3 , GNOME, [9] 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 Cygwin se instalan ejecutando el programa "setup" [10] de Cygwin , que descarga el programa necesario y los archivos del paquete de funciones 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 [11] de espacio en el disco duro, pero las configuraciones utilizables pueden requerir tan solo 1 o 2 GB.

Los esfuerzos para reconciliar conceptos que difieren entre los sistemas Unix y Windows incluyen:

  • Una versión específica de Cygwin del mountcomando Unix permite montar rutas de Windows como "sistemas de archivos" en el espacio de archivos de Unix. Los puntos de montaje iniciales 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 los dispositivos. Los sistemas de archivos se pueden montar en modo binario (por defecto) o en modo texto, lo que permite la conversión automática entre terminaciones LF y CRLF (que solo afecta a los programas que abren archivos sin especificar explícitamente texto o modo binario).
  • Cygwin 1.7 introdujo soporte completo para configuraciones regionales POSIX y muchas codificaciones de caracteres , por lo que la codificación Unicode UTF-8 se convirtió en la predeterminada. Los nombres de archivo de Windows y otros identificadores, que están codificados como UTF-16 , se convierten automáticamente hacia y desde la codificación de caracteres seleccionada.
  • Las letras de las unidades de Windows se asignan a un directorio especial, por lo que, por ejemplo, C:aparece como /cygdrive/c. El /cygdriveprefijo se puede cambiar. \\HOST\SHARE\FILESe asignan las rutas de red de Windows del formulario //HOST/SHARE/FILE. Las rutas de Windows también se pueden usar directamente desde los programas Cygwin, pero muchos programas no los admiten correctamente, por lo que se desaconseja.
  • Con todas las funciones /devy /procse proporcionan sistemas de ficheros. /proc/registryproporciona acceso directo al sistema de archivos al registro.
  • Cygwin admite enlaces simbólicos POSIX , representándolos como archivos de texto sin formato con el conjunto de atributos del sistema. Cygwin 1.5 los representó como accesos directos del Explorador de Windows , pero esto se ha cambiado por razones de rendimiento y corrección POSIX. Cygwin también reconoce los puntos de unión NTFS y los enlaces simbólicos y los trata como enlaces simbólicos POSIX, pero no los crea ya que su semántica no es totalmente compatible con POSIX.
  • La API POSIX para manejar listas de control de acceso (ACL) es compatible y se asigna al sistema ACL de Windows NT. [12]
  • Se proporcionan formatos especiales de /etc/passwdy /etc/groupque incluyen punteros a los SID equivalentes de Windows (en el campo Gecos ), lo que permite el mapeo entre usuarios y grupos de Unix y Windows.
  • La llamada al sistema de bifurcación para duplicar un proceso está completamente implementada, pero no se asigna bien a la API de Windows. Por ejemplo, no se pudo utilizar la estrategia de optimización de copia en escritura . [13] [14] [15] Como resultado, la bifurcación de Cygwin es bastante lenta en comparación con Linux y otros. (Esa sobrecarga a menudo se puede evitar reemplazando los usos de la técnica fork / exec con llamadas a las funciones de generación declaradas en el encabezado process.h específico de Windows ).
  • La DLL de Cygwin contiene un controlador de consola que emula una terminal estilo Unix dentro de la consola de Windows . La interfaz de usuario predeterminada de Cygwin es el shell bash que se ejecuta en la consola Cygwin.
  • La DLL también implementa dispositivos pseudo terminal (pty). Cygwin se envía con una serie de emuladores de terminal que se basan en ellos, incluidos mintty , rxvt ( -unicode ) y xterm . Estos son más compatibles con los estándares de terminal Unix y las convenciones de la interfaz de usuario que la consola Cygwin, pero son menos adecuados para ejecutar programas de consola de Windows.
  • Se proporcionan varias utilidades para convertir entre rutas y formatos de archivo de Windows y Unix, para manejar problemas de final de línea (CRLF / LF), para mostrar las DLL con las que está vinculado un ejecutable, etc.
  • Además de estar siempre vinculados a la DLL de Cygwin, los ejecutables de Cygwin son ejecutables normales de Windows. Esto significa que los programas Cygwin tienen acceso completo a la API de Windows y otras bibliotecas de Windows, lo que permite la migración gradual de programas de una plataforma a otra. Sin embargo, los programadores deben tener cuidado al mezclar funciones conflictivas de POSIX y Windows.

La versión de gcc que viene con Cygwin tiene varias extensiones para crear archivos DLL de Windows, especificando si un programa es un programa en modo ventana o consola, agregar recursos, etc. Soporte para compilar programas que no requieren la capa de compatibilidad POSIX proporcionada por Cygwin DLL solía estar incluido en el valor predeterminado gcc, pero a partir de 2014 es proporcionado por compiladores cruzados contribuidos por el proyecto MinGW-w64 .

Cygwin se usa mucho para portar muchas piezas de software populares a la plataforma Windows. Se utiliza para compilar Sun Java , LibreOffice e incluso software de servidor web como Lighttpd y Hiawatha . [dieciséis]

La biblioteca de la API Cygwin tiene la licencia GNU Lesser General Public License versión 3 (o posterior) con una excepción para permitir la vinculación a cualquier software libre y de código abierto cuya licencia se ajuste a la Definición de código abierto [17] (menos estricta que la Free Definición de software).

Historia [ editar ]

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 reorientar GCC y producir un compilador cruzado que genera 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, requiriendo suficiente emulación de Unix para permitir que se ejecute el script de shell GNU configure . Se necesitaba un intérprete de comandos compatible con el shell Bourne , como bash , y a su vez una emulación de llamada al sistema fork 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 actual GnuWin32 ). El nombre se cambió a Cygwin32 para enfatizar el papel de Cygnus en su creación. Cuando Microsoft registró la marca Win32 , la 32 se eliminó para convertirse simplemente en Cygwin.

Para 1996, otros ingenieros se habían unido, porque estaba claro que Cygwin sería una forma útil de proporcionar las herramientas integradas de Cygnus alojadas en sistemas Windows (la estrategia anterior había sido utilizar DJGPP ). Fue especialmente atractivo porque era posible hacer una compilación cruzada de tres vías , por ejemplo, usar una estación de trabajo de Sun Microsystems para construir, digamos, un compilador cruzado de 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 [18] de interés por derecho propio, aunque las versiones posteriores no se han lanzado, sino que dependen de las continuas versiones de código abierto.

Geoffrey Noer fue el líder del proyecto desde 1996 hasta 1999. [19] [20] Christopher Faylor fue el líder del proyecto desde 1999 hasta mediados de 2014. Corinna Vinschen se convirtió en codirectora desde 2004 [21] 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. [22]

Funciones [ editar ]

La selección de paquetes base de Cygwin es bastante pequeña (alrededor de 100 MB [23] ), 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 Unix. Hay paquetes adicionales disponibles como instalaciones opcionales desde el administrador de paquetes de Cygwin ("setup-x86.exe" - 32 bits y "setup-x86_64.exe" - 64 bits). Estos incluyen (entre muchos otros [24] ):

  • Shells (es decir, intérpretes de línea de comandos): bash , dash , fish , pdksh , tcsh , zsh
  • Utilidades de archivos y sistemas: coreutils , findutils , util-linux
  • Utilidades de texto: grep , sed , diff , patch , awk
  • Terminales: mintty , rxvt , screen
  • Editores: ed , emacs , joe , mined , nano , vim
  • Inicio de sesión remoto: ssh , rsh , telnet
  • Transferencia / sincronización remota de archivos: ftp , scp , rsync , unison , rtorrent
  • Compresión / archivo: tar , gzip , bzip2 , lzma , zip
  • Procesamiento de texto: TeX , groff , Ghostscript
  • Lenguajes de programación: C , C ++ , Objective-C , Fortran , Gambas , Perl , Python , Ruby , Tcl , Ada , CLISP , Scheme , OCaml , Prolog
  • Herramientas de desarrollo: make , autotools , flex , bison , doxygen
  • Sistemas de control de versiones: cvs , subversion , git , mercurial
  • Servidores: Apache , BIND , PostgreSQL , Pure-FTPd , OpenSSH , telnetd , exim , UW IMAP
  • Clientes: Mutt (correo electrónico), Lynx (web), Irssi (IRC), tin (grupos de noticias)

El proyecto Cygwin / X aporta una implementación del sistema X Window que permite que los programas gráficos 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
  • Los procesadores de texto / espectadores: LyX , xpdf , xdvi
  • Navegadores WWW: epiphany , konqueror , links , lynx , midori , qupzilla , w3m

Además de las bibliotecas Xlib / XCB de bajo nivel para desarrollar aplicaciones X, Cygwin también se envía con varios marcos de GUI multiplataforma y de nivel superior , incluidos GTK + y Qt .

El proyecto Cygwin Ports proporcionó muchos paquetes adicionales que no estaban disponibles en la propia distribución 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.

Ver también [ editar ]

  • Subsistema de Windows para Linux  : capa de compatibilidad para ejecutar ejecutables binarios de Linux de forma nativa en Windows

Referencias [ editar ]

  1. ^ https://sourceware.org/pipermail/cygwin-announce/2021-March/009987.html ; fecha de publicación: 29 de marzo de 2021.
  2. Hall, Larry (14 de septiembre de 2004). "Re: ¿Cómo se pronuncia?" . Cygwin (lista de correo) . Consultado el 10 de octubre de 2007 .
  3. ^ a b "Cygwin" . www.cygwin.com .
  4. ^ a b "Preguntas frecuentes sobre Cygwin" . cygwin.com .
  5. ^ "Biblioteca Cygwin ahora disponible bajo Licencia Pública General Reducida GNU" . Red Hat .
  6. ^ "Una breve historia del proyecto Cygwin" . Cygwin . 2018-02-02 . Consultado el 10 de enero de 2020 .
  7. ^ "Cygwin32: una capa de transferencia de Win32 gratuita para aplicaciones UNIX®" . USENIX . 1998-08-03 . Consultado el 10 de enero de 2020 .
  8. ^ "Subsistema Linux (resuelto) vs Cygwin vs MobaXterm" . Foro de ayuda técnica de How-To Geek . 2017-01-24 . Consultado el 15 de marzo de 2019 .
  9. ^ "Puertos Cygwin" . Consultado el 2 de mayo de 2015 .
  10. Delorie, DJ (17 de abril de 2000). "Nueva versión de Cygwin Net" . Cygwin (lista de correo) . Consultado el 10 de enero de 2020 .
  11. ^ "¿Cuál es el tamaño de instalación completo actual de Cygwin?" . StackOverflow . 2018-05-28 . Consultado el 11 de enero de 2020 .
  12. Vinschen, Corinna (16 de enero de 2016). "Actualizado: Cygwin 2.4.0-1" . Anuncios Cygwin (lista de correo) . Consultado el 11 de enero de 2020 .
  13. ^ "Preguntas frecuentes de Cygwin: ¿Cómo se implementa fork ()?" . Consultado el 10 de octubre de 2010 .
  14. ^ "Aspectos destacados de la funcionalidad Cygwin: creación de procesos" . Consultado el 24 de diciembre de 2014 .
  15. ^ Blake, Eric (15 de enero de 2009). "Bash no lanza las aplicaciones directamente" . Cygwin (lista de correo) . Consultado el 10 de octubre de 2010 .
  16. ^ Leisink, Hugo. "Servidor web Hiawatha" . www.hiawatha-webserver.org .
  17. ^ "¿Cuáles son los términos de la licencia?" . Cygwin . Archivado desde el original el 28 de julio de 2012.
  18. ^ "Cygwin une las aplicaciones de Unix y Windows" . Libros de Google . 1999-11-15 . Consultado el 13 de enero de 2020 .
  19. Delorie, DJ (17 de febrero de 1999). "para tu información: quién hace qué" . Cygwin (lista de correo) . Consultado el 13 de enero de 2020 .
  20. Noer, Geoffrey (19 de febrero de 1999). "Un adiós parcial ..." Cygwin (lista de correo) . Consultado el 13 de enero de 2020 .
  21. Faylor, Christopher (31 de marzo de 2004). "Cambio de trabajo" . Cygwin (lista de correo) . Consultado el 13 de enero de 2020 .
  22. Faylor, Christopher (31 de julio de 2014). "Christopher Faylor - Retirada del proyecto" . Cygwin (lista de correo) . Consultado el 2 de mayo de 2015 .
  23. ^ "Instalación y actualización de paquetes Cygwin" . Cygwin . Consultado el 11 de enero de 2020 .
  24. ^ "Lista de paquetes Cygwin" . Cygwin . Consultado el 11 de enero de 2020 .

Enlaces externos [ editar ]

  • Página web oficial