Aquí hay una lista de las opciones disponibles a partir de 2018-05 con algunas actualizaciones sobre WSL durante 2019-01 junto con un poco de detalle sobre cada una.
Opciones que destacan
Cygwin proporciona lo siguiente:
- un bash shell y la terminal Mintty,
- Una amplia gama de utilidades comunes de Linux compiladas para ejecutarse en Windows
- Una capa de compatibilidad integral que permite que los programas de Linux se ejecuten en Windows.
Cygwin tiene como objetivo facilitar la portabilidad de aplicaciones de Linux en Windows. Si algún programa C fue diseñado para Unix y espera utilizar características como tuberías, acceso a archivos y directorios al estilo de Unix, etc., puede compilarlo para Cygwin y Cygwin actuará como una capa de compatibilidad entre el código y el sistema operativo externo (Windows) . Esto permite que el mismo programa C funcione tanto en Linux como en Windows con poca o ninguna modificación. Por lo tanto, se ha cumplido una gran lista de programas de Linux y se puede ejecutar al instalar Cygwin. Sin embargo, usted, el usuario de estos programas, probablemente tendrá que estar familiarizado con Unix. Por ejemplo, es posible que deba pasar argumentos como en /cygdrive/c/autoexec.bat
lugar de c:\autoexec.bat
y estar listo para lidiar con la salida con la terminación de línea Unix ( \n
) en lugar de la terminación de línea de Windows ( \r\n
).
La colección de todos los programas de Cygwin comprende un repositorio y, aunque Cygwin no tiene un administrador de paquetes de Linux tradicional, puede agregar, eliminar y actualizar programas de este repositorio en cualquier momento de una manera muy intuitiva (ejecuta Cygwin's setup.exe en en cualquier momento después de que se complete la instalación)
Babun es Cygwin con un administrador de paquetes con todas las funciones (pacto), oh-my-zsh por su shell, git, actualizaciones automáticas y una arquitectura orientada a complementos. Aunque el shell predeterminado es zsh, puede cambiar fácilmente a bash. Parece una buena actualización de Vanilla Cygwin si no te importa el peso extra.
Mingw-w64 proporciona lo siguiente:
- un bash shell
- una buena cantidad de utilidades de Linux,
- una cadena de herramientas de desarrollo SW para crear aplicaciones que se ejecutarán sin una capa de compatibilidad de Linux (o con una capa mínima).
MinGW es principalmente una distribución de software y una plataforma de construcción para Windows. En particular, es un puerto de Windows de las herramientas del compilador GNU, como GCC, make, bash, etc. Incluye una buena cantidad de herramientas GNU y una capa mínima de compatibilidad con Unix.
La principal diferencia entre Mingw-w64 y Cygwin está en las prioridades: Cygwin tiene como objetivo proporcionar una capa de compatibilidad POSIX completa que comprenda una implementación completa de todas las principales llamadas y bibliotecas del sistema Unix; El rendimiento es secundario a la compatibilidad. MinGW tiene como objetivo el rendimiento, por lo que no proporcionará ciertas API POSIX que no se pueden implementar fácilmente y / o lo suficientemente rápido en Windows. También el objetivo principal de MinGW son los desarrolladores S / W. Sin embargo, los usuarios ocasionales también pueden disfrutar de su shell y el propósito general incluye utilidades.
MSYS2 proporciona lo siguiente:
- un bash shell y la terminal Mintty,
- una buena cantidad de utilidades de Linux,
- un administrador de paquetes de línea de comandos con todas las funciones para instalar programas del sistema operativo
- partes de Cygwin y MinGW para admitir la creación de aplicaciones con o sin una capa de compatibilidad completa con Linux.
- un repositorio de software y un administrador de paquetes (pacman) que facilita la instalación, el uso, la compilación y la transferencia de software en Windows.
MSYS2 también es principalmente una distribución de software y una plataforma de construcción para Windows como MinGW, pero combina tanto la forma de Cygwin como la forma de MinGW. Puede usar MSYS2 para crear "programas MinGW" o "programas MSYS2" . El enlace posterior a la capa de compatibilidad de MSYS2 (msys-2.dll) que sigue de cerca el desarrollo de la capa de compatibilidad de Cygwin con algunas adiciones / modificaciones . Sin embargo, los repositorios de los 2 proyectos no tienen relación alguna. Entonces, aunque tanto MSYS2 como Cygwin proporcionan grep.exe
, pueden tener una versión completamente diferente.
Git para Windows es solo MSYS2 con git instalado o, al menos, se basa en gran medida en MSYS2 . Proporciona el mismo shell (bash), terminal (Mintty) y administrador de paquetes (pacman). Parece ser la forma más popular de ejecutar el Git dominante en Windows y, junto con él, obtienes un agradable entorno Unix.
WSL resuelve el mismo problema usando un método completamente diferente. Ejecutas exactamente el mismo código que ejecutarías en un sistema Linux en WSL que intercepta las llamadas del kernel y las traduce a las llamadas del kernel de Windows (es lo contrario de Wine). Por supuesto, la traducción no puede ser perfecta, pero Microsoft eliminó la advertencia beta . Debido a que WSL no estaba disponible en Windows Server antes de 2018, no lo he investigado demasiado. De todos modos, obtienes un buen bash shell con la mayoría de los artículos de CLI que esperarías encontrar en una instalación de Ubuntu. Microsoft declara oficialmente que "WSL no tiene como objetivo admitir aplicaciones o escritorios GUI"Sin embargo, hay instrucciones no oficiales sobre cómo hacerlo. Parece que, tal como están las cosas en este momento (principios de 2018), los principales inconvenientes de WSL son los siguientes: a) renderizar la pantalla y el acceso al disco son muy lentos b) no se supone que edite archivos WSL (Linux) desde Windows c) solo se ejecuta en Windows de 64 bits. Aquí hay una comparación antigua pero agradable con cygwin (tenga en cuenta que Rich Turner es miembro del equipo de WSL y ha publicado mucha información útil sobre WSL)
Terreno común
Excepto por WSL, la mayoría de las herramientas anteriores comparten mucha tecnología común (bibliotecas, ejecutables, conceptos). Por ejemplo, el shell bash que viene con MinGW depende de msys-2.dll, que es una bifurcación de cygwin.dll. Entonces sí, hay mucho espacio para la confusión :-)
Mas opciones
Cmder proporciona simplemente un terminal agradable y una fiesta similar a la cáscara para Windows. Su componente principal es Conemu (la terminal). Además de eso, agrega Clink, que proporcionauna edición de línea de comandos de estilo Powerful Bash , un diseño de solicitud personalizado y el esquema de color Monokai. Es altamente (o quizás totalmente) compatible con los programas de consola nativos de Windows.
Scoop proporciona un administrador de paquetes de línea de comandos para muchos programas multiplataforma bien conocidos, incluidas muchas herramientas GNU. Descarga paquetes precompilados. No proporciona ni un shell ni un terminal, sino que se ejecuta en cmd.exe de Windows (con todas sus limitaciones, pero también con su compatibilidad total con los programas de consola nativos de Windows). Tampoco incluye un conjunto de compiladores (pero, por supuesto, los compiladores y las herramientas de desarrollo son paquetes típicos que puede instalar con scoop). Muchos de los programas que instala Scoop provienen directamente del proyecto MinGW / MSYS o se crearon utilizando sus herramientas.
Aún más opciones
Las soluciones a continuación no parecen activas y nunca las probé, pero parecen hacer el trabajo para otros:
Gow (Gnu en Windows) es la alternativa ligera a Cygwin sin shell. Utiliza un conveniente instalador de Windows que instala alrededor de 130 aplicaciones Linux de código abierto extremadamente útiles compiladas como binarios win32 nativos y disponibles a través de cmd.exe de Windows. Está diseñado para ser lo más pequeño posible (aproximadamente 10 MB).
UnxUtils y GnuWin32 : UnxUtils es una colección de puertos de utilidades comunes similares a GNU Unix para Win32 nativo, con ejecutables que solo dependen de Microsoft C-runtime msvcrt.dll. Debe descargar la parte principal y algunas actualizaciones . GnuWin32 tiene versiones posteriores que UnxUtils, pero requiere archivos de soporte (por ejemplo, DLL)
MSYS y MinGW parecen haber quedado obsoletos por MSYS2 y MinGW-W64, así que nunca los miré.
Algunos problemas comunes en Cygwin y MSYS2
En cuanto a la terminal
Mintty es el terminal utilizado en Cygwin, MSYS2 y sus derivados. Debe tener en cuenta que si está ejecutando programas de consola nativos de Windows, no es un reemplazo sencillo para el símbolo del sistema de Windows. Si bien los programas con salida de texto simple generalmente funcionan bien, los interactivos y de pantalla completa a menudo tienen problemas. Lea más en la página de inicio de Mintty y también lea la entrada "Algunos programas de consola nativos no funcionan cuando se ejecutan desde Git Bash" en las preguntas frecuentes de Git para Windows . Esa entrada tiene estas recomendaciones para hacer frente a este tipo de problemas:
Existen varios métodos para solucionar estos problemas:
- Ejecute programas que tengan problemas con la utilidad winpty . Esto le permite seguir usando la terminal mintty más bonita, pero puede volverse difícil de manejar si necesita la solución para muchos programas.
- [use cmd.exe] y configúrelo para "Edición rápida", tamaño razonable y desplazamiento hacia atrás y fuente Unicode adecuada. Aún tendrá que vivir con las otras peculiaridades de [cmd.exe].
- Instalar y usar Conemu .
Otros asuntos
Las dos cosas más importantes a tener en cuenta son estas:
Hay un intercambio de poder y problemas difíciles de depurar. Cuanto más poderosa sea la solución, más cosas pueden salir mal, incluso en formas que inicialmente parecerán no estar relacionadas con su capa de Linux.
Si no tiene mucha experiencia en Linux, no use las soluciones más potentes como Cygwin / MSYS2 / MinGW
UnxUtils y GnuWin32 tienen la menor potencia pero también el menor potencial de causar dolores de cabeza. Cygwin y similares encabezarán el listón tanto en potencia como en dolores de cabeza. Cmder está en algún lugar en el medio. Entonces, cuando necesite las soluciones más potentes, duerma bien y concéntrese completamente. Evite usar soluciones potentes mientras prueba algo nuevo y posiblemente inestable. Además, no olvide que las soluciones de complejidad media como cmder no están impecables.
El problema de los comandos de Linux que siguen a los de Windows es una causa común de problemas difíciles de depurar en soluciones como Cygwin / MSYS2 / MinGW. Aquí hay un ejemplo: tenía un archivo .bat que estaba usando el comando timeout. Cuando se ejecuta bajo Cygwin, fallará porque el tiempo de espera también es un comando de Linux pero con una sintaxis diferente. Después de detectar el problema, descubrí que podía agregar una RUTA = ... en la parte superior del archivo .bat para asegurarme de que el comando de Windows tuviera prioridad. Pero entonces llegué una aún más críptico "redirección de entrada no es compatible" error y se conformó con una solución antes de encontrar la razón.
Aquí hay un ejemplo de un problema con cmder. Estaba ejecutando la versión de Windows de Unison en Cmder y, en algunas condiciones especiales, estaba colgando sin ningún mensaje de error . El mismo comando siempre se ejecutaba perfectamente en cmd.exe. Lo curioso es que también se estaba ejecutando perfectamente en Cygwin (de hecho, si tiene nombres de archivo Unicode, un terminal Cygwin es mejor que cmd.exe porque cmd.exe a menudo muestra texto Unicode con formato incorrecto).
Acerca de esta guía
Durante 2017-05 me cansé de no entender las diferencias de las herramientas anteriores, aunque las estaba usando desde hace mucho tiempo (principalmente CygWin y cmder, pero nunca con fines de desarrollo). Así que pasé unas horas para ver el paisaje. Esta guía es el resultado de las notas que guardé. No soy un experto en el campo, pero he tratado de encontrar toda la información relevante, leerla con ojo crítico y presentar claramente las partes más importantes. Comente si algo parece estar mal y haré todo lo posible para corregirlo.
Finalmente, una disculpa por algunos problemas de terminología: en este texto a veces uso el término Linux en lugar de UNIX o POSIX. Sé que no son lo mismo, pero es muy difícil diferenciarlos al abordar un tema desde una distancia tan larga. Incluso cuando no es difícil, lleva tiempo que no tengo ;-)
putty
conectarnos a un servidor Linux real. En Windows siempre fui reacio y tentado a usarlocygwin
, reacio debido a mi torpe experiencia de instalación. Pero personalmente, me pareció más conveniente de usar que msys y más rápido que un vm. una vez instalado, cygwin resulta de alguna manera portátil simplemente copiando su directorio es suficiente, sin embargo, creará un nuevo nombre de usuario en cada máquina / usuario basado en el nombre de usuario de Windows (por defecto, al menos). Pero tenga en cuenta que dado que cygwin / msys puede verse como una "distribución" personalizada, pueden faltar algunos interruptores de comando [opcionales]. pruébalos.