Voici une liste des options disponibles à compter de 2018-05 avec quelques mises à jour concernant WSL au cours de 2019-01 ainsi qu'un peu de détail concernant chacune d'elles.
Des options qui se démarquent
Cygwin fournit les éléments suivants:
- un shell bash et le terminal Mintty,
- une vaste gamme d'utilitaires Linux courants compilés pour fonctionner sous Windows
- une couche de compatibilité complète qui permet aux programmes Linux de s'exécuter sous Windows.
Cygwin vise à faciliter le portage d'applications Linux sur Windows. Si un programme C a été conçu pour Unix et prévoit d’utiliser des fonctionnalités telles que les canaux, l’accès aux fichiers et aux répertoires de style Unix, vous pouvez le compiler pour Cygwin et Cygwin agira en tant que couche de compatibilité entre le code et le système d’exploitation étranger (Windows). . Cela permet au même programme C de fonctionner à la fois sous Linux et Windows avec peu ou pas de modification. Une liste énorme de programmes Linux a donc été respectée et peut être exécutée lorsque vous installez Cygwin. Cependant, vous, l'utilisateur de ces programmes, devrez probablement connaître Unix. Par exemple, vous devrez peut-être passer des arguments comme /cygdrive/c/autoexec.bat
au lieu de c:\autoexec.bat
et être prêt à traiter la sortie avec Unix line termin ( \n
) au lieu de Windows line termin ( \r\n
).
La collection de tous les programmes Cygwin comprend un référentiel et bien que Cygwin n’ait pas de gestionnaire de paquets Linux traditionnel, vous pouvez à tout moment ajouter, supprimer et mettre à jour des programmes de ce référentiel de manière très contre-intuitive (vous exécutez le fichier setup.exe de Cygwin à à tout moment après la fin de l'installation)
Babun est Cygwin avec un gestionnaire de paquets complet (pact), oh-my-zsh pour son shell, git, des mises à jour automatiques et une architecture orientée plug-in. Bien que le shell par défaut soit zsh, vous pouvez facilement basculer vers bash. Cela semble être une belle mise à niveau de vanille Cygwin si le poids supplémentaire ne vous dérange pas.
Mingw-w64 fournit les éléments suivants:
- une coquille bash,
- une bonne quantité d'utilitaires Linux,
- une chaîne d’outils de développement logiciel pour créer des applications qui fonctionneront sans couche de compatibilité Linux (ou avec une couche minimale).
MinGW est principalement une distribution de logiciels et une plate-forme de développement pour Windows. Il s’agit en particulier d’un port Windows des outils de compilation GNU, tels que GCC, make, bash, etc. Il inclut une bonne quantité d’outils GNU et une couche de compatibilité Unix minimale.
La principale différence entre Mingw-w64 et Cygwin concerne les priorités: Cygwin vise à fournir une couche de compatibilité POSIX complète comprenant une mise en œuvre complète de tous les principaux appels système et bibliothèques Unix. la performance est secondaire à la compatibilité. MinGW vise la performance et ne fournira donc pas certaines API POSIX qui ne peuvent pas être implémentées facilement et / ou assez rapidement sous Windows. Les développeurs S / W sont également la cible principale de MinGW. Néanmoins, les utilisateurs occasionnels peuvent également profiter de sa coque et des utilitaires inclus.
MSYS2 fournit les éléments suivants:
- un shell bash et le terminal Mintty,
- une bonne quantité d'utilitaires Linux,
- un gestionnaire de paquets en ligne de commande complet pour installer les programmes OS
- des composants de Cygwin et de MinGW pour prendre en charge la création d’applications avec ou sans couche complète de compatibilité Linux.
- un référentiel de logiciels et un gestionnaire de paquets (pacman) facilitant l’installation, l’utilisation, la création et le portage de logiciels sous Windows.
MSYS2 est également avant tout une plate-forme de distribution de logiciels et une plate-forme de construction pour Windows comme MinGW, mais il combine à la fois le chemin de Cygwin et celui de MinGW. Vous pouvez utiliser MSYS2 pour créer des "programmes MinGW" ou des "programmes MSYS2" . Ce dernier lien renvoie à la couche de compatibilité de MSYS2 (msys-2.dll), qui elle-même suit de près le développement de la couche de compatibilité de Cygwin avec quelques ajouts / modifications . Les référentiels des 2 projets ne sont toutefois absolument pas liés. Ainsi, bien que MSYS2 et Cygwin fournissent tous les deux, grep.exe
ils peuvent avoir une version complètement différente.
Git pour Windows est soit juste MSYS2 avec git installé, soit au moins fortement basé sur MSYS2 . Il fournit le même shell (bash), terminal (Mintty) et gestionnaire de paquets (pacman). Il semble que ce soit le moyen le plus répandu d’exploiter Git sur Windows et d’obtenir un bel environnement Unix.
WSL résout le même problème en utilisant une méthode complètement différente. Vous exécutez exactement le même code que sur un système Linux sur WSL, qui intercepte les appels du noyau et les traduit en appels du noyau Windows (c'est l'inverse de Wine). Bien sûr, la traduction ne peut pas être parfaite mais Microsoft a abandonné l’ avertissement de la bêta . Comme WSL n'était pas disponible sur Windows Server avant 2018, je ne l'ai pas beaucoup étudié. Quoi qu'il en soit, vous obtenez un bon shell bash avec la plupart des fonctionnalités de la CLI que vous espérez trouver sur une installation Ubuntu standard. Microsoft déclare officiellement que "WSL ne vise pas à prendre en charge les ordinateurs de bureau ou les applications graphiques"Cependant, il existe des instructions non officielles sur la façon de le faire. Il semble que dans l'état actuel des choses (début 2018), les principaux inconvénients de WSL sont les suivants: a) le rendu de l'écran et l'accès au disque sont très lents b) vous n'êtes pas censé éditer les fichiers WSL (Linux) à partir de Windows c) il ne fonctionne que sur Windows 64 bits. Voici une comparaison ancienne mais intéressante avec cygwin (notez que Rich Turner est un membre de l'équipe WSL et qu'il a posté de nombreuses informations utiles concernant WSL)
Terrain d'entente
À l'exception du WSL, la plupart des outils ci-dessus partagent un grand nombre de technologies communes (bibliothèques, exécutables, concepts). Par exemple, le shell bash fourni avec MinGW dépend de msys-2.dll, qui est lui-même un fork de cygwin.dll. Alors oui, il y a beaucoup de place pour la confusion :-)
Plus d'options
Cmder fournit juste un joli terminal et un shell bash pour Windows. Son composant principal est Conemu (le terminal). En plus de cela, il ajoute Clink qui fournit une édition de ligne de commande de style Powerful Bash , une présentation d'invite personnalisée et le jeu de couleurs Monokai. Il est hautement (ou peut-être totalement) compatible avec les programmes de console Windows natifs.
Scoop fournit un gestionnaire de paquets en ligne de commande pour de nombreux programmes multi-plateformes bien connus, notamment de nombreux outils GNU. Il télécharge des paquets pré-compilés. Il ne fournit ni shell ni terminal, mais s’exécute sous le fichier cmd.exe de Windows (avec toutes ses limitations, mais aussi avec sa compatibilité totale avec les programmes de console Windows natifs). Il ne comprend également aucune suite de compilateur (bien entendu, les compilateurs et les outils de développement sont des packages typiques que vous pouvez installer avec scoop). Une grande partie des programmes installés par Scoop proviennent directement du projet MinGW / MSYS ou ont été conçus à l'aide de leurs outils.
Encore plus d'options
Les solutions ci-dessous ne semblent pas actives et je ne les ai jamais testées mais elles semblent faire le travail pour les autres:
Gow (Gnu sur Windows) est l'alternative légère à Cygwin sans shell. Il utilise un programme d'installation Windows pratique qui installe environ 130 applications Linux open source extrêmement utiles, compilées sous forme de fichiers binaires Win32 natifs et disponibles via le fichier cmd.exe de Windows. Il est conçu pour être aussi petit que possible (environ 10 Mo).
UnxUtils & GnuWin32 : UnxUtils est un ensemble de ports d’utilitaires communs de type Unix similaires à GNU et destinés à Win32 natif, les exécutables ne dépendant que de la commande Microsoft C-runtime msvcrt.dll. Vous devez télécharger la partie principale et quelques mises à jour . GnuWin32 a des versions ultérieures à UnxUtils, mais nécessite des fichiers de support (par exemple, des DLL)
MSYS & MinGW semble avoir été obsolète par MSYS2 & MinGW-W64, je ne les ai donc jamais regardées.
Quelques problèmes courants sur Cygwin et MSYS2
Concernant le terminal
Mintty est le terminal utilisé dans Cygwin, MSYS2 et leurs dérivés. Sachez que si vous exécutez des programmes de console natifs Windows, il ne s'agit pas d'un remplacement indolore de l'invite de commande Windows. Alors que les programmes avec une sortie texte simple fonctionnent généralement bien, les programmes interactifs et plein écran ont souvent des problèmes. Pour en savoir plus, consultez la page d'accueil de Mintty ainsi que l'entrée "Certains programmes de console natifs ne fonctionnent pas lorsqu'ils sont exécutés à partir de Git Bash" dans la FAQ de Git pour Windows . Cette entrée a cette recommandation à faire lorsque vous faites face à ce genre de problèmes:
Il existe plusieurs méthodes pour contourner ces problèmes:
- Exécutez des programmes qui rencontrent des problèmes d’utilisation de l’ utilitaire winpty . Cela vous permet de continuer à utiliser le plus joli terminal menthe, mais peut devenir difficile à manier si vous avez besoin de la solution de contournement pour de nombreux programmes.
- [utilisez cmd.exe] et configurez-le pour "Édition rapide", une taille raisonnable, une police de défilement arrière et unicode appropriée. Vous devrez toujours vivre avec les autres bizarreries de [cmd.exe].
- Installez et utilisez Conemu .
Autres issues
Les deux choses les plus importantes à garder à l’esprit sont les suivantes:
il y a un compromis entre le pouvoir et les problèmes difficiles à résoudre. Plus la solution est puissante, plus de problèmes peuvent survenir, même si cela ne semble initialement pas lié à votre couche Linux.
si vous n'avez pas beaucoup d'expérience Linux, n'utilisez pas les solutions les plus puissantes telles que Cygwin / MSYS2 / MinGW
UnxUtils et GnuWin32 ont le moins de pouvoir mais également le moins de potentiel de vous causer des maux de tête. Cygwin et autres vont égaler la puissance et les maux de tête. Cmder est quelque part au milieu. Ainsi, lorsque vous avez besoin des solutions les plus puissantes, prenez le temps de bien dormir et soyez totalement concentré. Évitez d’utiliser des solutions puissantes lorsque vous testez quelque chose de nouveau et éventuellement d’instable. N'oubliez pas non plus que les solutions de complexité moyenne telles que cmder ne sont pas sans tache.
Le problème des commandes Linux masquant celles de Windows est une cause fréquente de problèmes difficiles à résoudre dans des solutions telles que Cygwin / MSYS2 / MinGW. Voici un exemple: J'avais un fichier .bat qui utilisait la commande timeout. Sous Cygwin, cela échouerait car timeout est également une commande Linux mais avec une syntaxe différente. Après avoir repéré le problème, j'ai découvert que je pouvais ajouter un PATH = ... en haut du fichier .bat pour m'assurer que la commande windows était prioritaire. Mais alors j'ai eu une erreur encore plus cryptique "La redirection d'entrée n'est pas supportée" et j'ai opté pour une solution de contournement avant de trouver la raison.
Voici un exemple de problème avec cmder. J'utilisais la version Windows d'Unison sous Cmder et sous certaines conditions spéciales, elle était bloquée sans aucun message d'erreur . La même commande fonctionnait toujours parfaitement sous cmd.exe. La chose amusante est qu’il fonctionnait parfaitement sous Cygwin (en fait, si vous avez un nom de fichier Unicode, un terminal Cygwin est préférable à cmd.exe car cmd.exe affiche souvent du texte Unicode mal formé).
A propos de ce guide
En 2017-05, j'en ai eu marre de ne pas comprendre les différences entre les outils ci-dessus, bien que j'utilise certains d'entre eux depuis longtemps (principalement CygWin et cmder, mais jamais à des fins de développement). J'ai donc passé quelques heures à saisir le paysage. Ce guide est le résultat des notes que j'ai conservées. Je ne suis pas un expert sur le terrain, mais j'ai tout fait pour trouver toutes les informations pertinentes, les lire d'un œil critique et présenter clairement les points les plus importants. Veuillez commenter si quelque chose ne va pas et je ferai de mon mieux pour le corriger.
Enfin des excuses pour certains problèmes de terminologie: dans ce texte, j’utilise parfois le terme Linux à la place d’UNIX ou de POSIX. Je sais qu'ils ne sont pas identiques, mais il est très difficile de les différencier lorsqu'on aborde un sujet d'une si longue distance. Même quand ce n'est pas difficile, ça prend du temps que je n'ai pas ;-)
putty
connecter à un vrai serveur linux. sur les fenêtres, j’étais toujours à la fois réticent et tenté d’utilisercygwin
, réticent à cause de mon expérience d’installation maladroite. Mais personnellement, je l’ai trouvé plus pratique à utiliser que msys et plus rapide qu’une machine virtuelle. Une fois installé, cygwin s'avère en quelque sorte portable. Il suffit de copier son répertoire. Toutefois, il créera un nouveau nom d'utilisateur sur chaque machine / utilisateur en fonction du nom d'utilisateur Windows (au moins par défaut). Mais gardez à l'esprit que, puisque cygwin / msys peut être considéré comme une "distribution" personnalisée, il se peut que certains commutateurs de commande [facultatif] soient manquants. testez-les.