Voici une liste des options disponibles à partir de 2018-05 avec de nombreuses mises à jour concernant le WSL à partir de 2020-01 ainsi qu'un peu de détails concernant chacune d'entre elles.
Des options qui se démarquent
La WSL devient de plus en plus mature (Microsoft a abandonné la avertissement bêta Il y a longtemps) et il est très facile à installer. Dans la plupart des cas, c'est une très bonne option (si ce n'est la meilleure). Il résout le problème en utilisant une méthode différente de la plupart des autres options. Vous exécutez exactement le même code binaire que celui que vous exécuteriez sur un système Linux. Jusqu'en 2020-01, WSL intercepte les appels du noyau et les traduit en appels du noyau Windows (pensez au contraire de Wine). Cela va changer puisque la version bêta actuelle de WSL exécute un vrai noyau linux dans une VM légère.
Quoi qu'il en soit, avec WSL, vous obtenez un joli Shell avec presque tous les goodies CLI que vous vous attendez à trouver sur une installation Ubuntu stock et l'option de apt install
presque tout ce qui est disponible dans les dépôts. Microsoft déclare officiellement que "WSL n'a pas pour but de supporter les bureaux ou les applications GUI" mais il existe des instructions non officielles sur la façon de le faire. Il semble qu'en l'état actuel des choses (2020-01), les principaux inconvénients du WSL soient les suivants :
Voici une vieille mais belle comparaison avec cygwin (notez que Rich Turner est un membre de l'équipe WSL et qu'il a posté beaucoup d'informations utiles concernant la WSL)
Cygwin fournit les éléments suivants :
- un bash Shell et le terminal Mintty,
- une gamme étendue d'utilitaires Linux courants compilés pour fonctionner sous Windows
- une couche de compatibilité complète qui permet aux programmes Linux de fonctionner sous Windows.
Cygwin vise à faciliter le portage des applications Linux sur Windows. Si un programme C a été conçu pour Unix et s'attend à utiliser des fonctionnalités telles que les tuyaux, l'accès aux fichiers et aux répertoires de style Unix, etc., vous pouvez le compiler pour Cygwin et Cygwin agira comme une couche de compatibilité entre le code et le système d'exploitation Windows. étranger OS (Windows). Cela permet au même programme C de fonctionner à la fois sur Linux et Windows avec peu ou pas de modifications. Une énorme liste de programmes Linux a ainsi été compilée et peut être exécutée lorsque vous installez Cygwin. Cependant, vous, l'utilisateur de ces programmes, devrez probablement être familier avec 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 la terminaison de ligne Unix ( \n
) au lieu de la terminaison de ligne de Windows ( \r\n
).
La collection de tous les programmes Cygwin constitue un dépôt et, bien que Cygwin ne dispose pas d'un gestionnaire de paquets Linux traditionnel, vous pouvez ajouter, supprimer et mettre à jour des programmes de ce dépôt à tout moment d'une manière très contre-intuitive (vous exécutez le setup.exe de Cygwin à n'importe quel moment après l'installation est terminée)
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 passer à bash. Cela semble être une belle mise à niveau de Cygwin vanille si le poids supplémentaire ne vous dérange pas.
Mingw-w64 fournit les éléments suivants :
- un bash Shell,
- une bonne quantité d'utilitaires Linux,
- une chaîne d'outils de développement de logiciels pour construire des applications qui fonctionneront sans couche de compatibilité Linux (ou avec une couche minimale).
MinGW est avant tout une distribution de logiciels et une plateforme de construction pour Windows. Il s'agit en particulier d'un portage Windows des outils de compilation GNU, tels que GCC, make, bash, et ainsi de suite. Elle inclut une bonne quantité d'outils GNU et une couche minimale de compatibilité Unix.
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 implémentation complète de tous les principaux appels système et bibliothèques Unix ; les performances sont secondaires à la compatibilité. MinGW vise les performances et ne fournira donc pas certaines API POSIX qui ne peuvent pas être implémentées facilement et/ou assez rapidement sous Windows. De plus, la cible principale de MinGW sont les développeurs de logiciels. Néanmoins, les utilisateurs occasionnels peuvent également apprécier son Shell et les utilitaires d'usage général inclus.
MSYS2 fournit les éléments suivants :
- un bash Shell et le terminal Mintty,
- une bonne quantité d'utilitaires Linux,
- un gestionnaire de paquets en ligne de commande complet pour installer des programmes d'OS
- des parties de Cygwin et de MinGW pour permettre la création d'applications avec ou sans couche de compatibilité Linux complète.
- un référentiel de logiciels et un gestionnaire de paquets (pacman) qui facilite l'installation, l'utilisation, la création et le portage de logiciels sous Windows.
MSYS2 est aussi principalement une distribution de logiciels et une plateforme de construction pour Windows comme MinGW mais il combine à la fois la manière de Cygwin et la manière de MinGW. Vous pouvez utiliser MSYS2 pour créer "Programmes MinGW" o "Programmes MSYS2" . Le lien ultérieur vers la couche de compatibilité de MSYS2 (msys-2.dll) qui lui-même suit de près le développement de la couche de compatibilité de Cygwin avec quelques ajouts/modifications . Les dépôts des 2 projets ne sont cependant pas du tout 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é ou au moins fortement basé sur MSYS2 . Il fournit les mêmes Shell (bash), terminal (Mintty) et gestionnaire de paquets (pacman). Il semble que ce soit la façon la plus populaire d'obtenir le fonctionnement de la dominante Git sur Windows et avec elle, vous obtenez un environnement Unix agréable.
Terrain d'entente
À l'exception de WSL, la plupart des outils ci-dessus partagent un grand nombre de technologies communes (bibliothèques, exécutables, concepts). Par exemple, le bash Shell fourni avec MinGW dépend de msys-2.dll qui est lui-même un fork de cygwin.dll. Donc oui, il y a beaucoup de place pour la confusion :-)
Plus d'options
Cmder fournit juste un terminal agréable et un Shell de type bash pour Windows. Son composant principal est Conemu (le terminal). En plus de cela, il ajoute Clink qui prévoit Édition en ligne de commande puissante de type Bash une mise en page personnalisée et le schéma de couleurs Monokai. Il est hautement (ou peut-être entièrement) compatible avec les programmes de console natifs de Windows.
Scoop fournit un gestionnaire de paquets en ligne de commande pour de nombreux programmes multiplateformes bien connus, y compris de nombreux outils GNU. Il télécharge des paquets précompilés. Il ne fournit ni un Shell ni un terminal mais s'exécute à la place sous cmd.exe de Windows (avec toutes ses limitations mais aussi avec sa pleine compatibilité avec les programmes de console natifs de Windows). Il ne comprend pas non plus de suite de compilateurs (mais bien sûr, les compilateurs et les outils de développement sont des paquets typiques que vous pouvez installer avec Scoop). Beaucoup de programmes que Scoop installe proviennent directement du projet MinGW/MSYS, ou ont été construits en utilisant 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 l'affaire pour d'autres :
Gow (Gnu On Windows) est l'alternative légère à Cygwin sans Shell. Il utilise un installateur Windows pratique qui installe environ 130 applications Linux open source extrêmement utiles compilées sous forme de binaires win32 natifs et disponibles via le cmd.exe de Windows. Il est conçu pour être aussi petit que possible (environ 10 Mo).
UnxUtils & GnuWin32 : UnxUtils est une collection de ports d'utilitaires communs de type GNU Unix vers Win32 natif, avec des exécutables dépendant uniquement du runtime C de Microsoft msvcrt.dll. Vous devez télécharger le partie principale et quelques mises à jour . GnuWin32 a des versions plus récentes que UnxUtils, mais nécessite des fichiers de soutien (par exemple, des DLL)
MSYS & MinGW semblent ont a été obsolète par MSYS2 & MinGW-W64 donc je ne les ai jamais regardés.
Quelques problèmes courants sur Cygwin et MSYS2
Concernant le terminal
Mintty est le terminal utilisé dans Cygwin, MSYS2 et leurs dérivés. Il faut savoir que si vous exécutez des programmes de console natifs de Windows, ce n'est pas un remplacement sans problème de l'invite de commande de Windows. Alors que les programmes avec une sortie texte simple fonctionnent généralement bien, les programmes interactifs et en plein écran ont souvent des problèmes. Lire plus sur la page d'accueil de Mintty et lisez également l'entrée "Certains programmes de console natifs ne fonctionnent pas lorsqu'ils sont exécutés à partir de Git Bash" sur FAQ Git pour Windows . Cette entrée a ces recommandations à faire lorsque vous êtes confrontés à ce genre de problèmes :
Il existe plusieurs méthodes pour contourner ces problèmes :
- Exécuter les programmes qui ont des problèmes en utilisant le winpty utilitaire. Cela vous permet de continuer à utiliser le terminal mintty, plus joli, mais peut devenir difficile à gérer si vous avez besoin de cette solution de contournement pour de nombreux programmes.
- [utiliser cmd.exe] et le configurer pour "Quick Edit", une taille raisonnable, un retour en arrière et une police unicode appropriée. Vous devrez toujours vivre avec les autres bizarreries de [cmd.exe].
- Installer et utiliser Conemu .
Autres questions
Les deux choses les plus importantes à garder à l'esprit sont les suivantes :
-
il y a un compromis entre la puissance et les problèmes difficiles à déboguer. Plus la solution est puissante, plus il peut y avoir de problèmes, même s'ils ne semblent pas liés à votre couche Linux.
-
si vous n'avez pas une grande expérience de Linux, n'utilisez pas les solutions les plus puissantes comme Cygwin/MSYS2/MinGW.
UnxUtils et GnuWin32 sont les moins puissants mais aussi les moins susceptibles de vous causer des maux de tête. Cygwin et ses équivalents seront en tête de liste en termes de puissance et de maux de tête. Cmder se situe quelque part au milieu. Ainsi, lorsque vous avez besoin des solutions les plus puissantes, dormez bien et soyez pleinement concentré. Évitez d'utiliser des solutions puissantes lorsque vous testez quelque chose de nouveau et peut-être instable. N'oubliez pas non plus que les solutions de complexité moyenne comme cmder ne sont pas sans défaut.
Le problème des commandes Linux qui prennent le pas sur celles de Windows est une cause courante de problèmes difficiles à déboguer dans des solutions comme Cygwin/MSYS2/MinGW. Voici un exemple : J'avais un fichier .bat qui utilisait la commande timeout. Lorsqu'il est exécuté sous Cygwin, il échoue parce que timeout est aussi 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 j'ai alors obtenu un message encore plus cryptique "La redirection des entrées n'est pas prise en charge". et se sont contentés d'une solution de contournement avant de trouver la raison.
Voici un exemple de problème avec cmder. J'exécutais la version Windows d'unison sous Cmder et dans certaines conditions particulières, il se bloquait avec absolument aucun message d'erreur . La même commande s'exécutait toujours parfaitement sous cmd.exe. Le plus drôle est qu'elle s'exécutait aussi parfaitement sous Cygwin (en fait, si vous avez des noms de fichiers Unicode, un terminal Cygwin est préférable à cmd.exe car cmd.exe affiche souvent le texte Unicode de façon malformée).
À propos de ce guide
Au cours de 2017-05, j'en ai eu marre de ne pas comprendre les différences des outils ci-dessus bien que j'utilisais certains d'entre eux depuis longtemps (principalement CygWin et cmder mais jamais à des fins de développement). J'ai donc passé quelques heures à tâter le terrain. Ce guide est le résultat des notes que j'ai prises. Je ne suis pas un expert dans le domaine mais j'ai essayé de trouver toutes les informations pertinentes, de les lire avec un œil critique et de présenter les parties les plus importantes clairement. N'hésitez pas à commenter si quelque chose vous semble erroné et je ferai de mon mieux pour le corriger.
Enfin, je tiens à m'excuser pour certains problèmes de terminologie : Dans ce texte, j'utilise parfois le terme Linux à la place de UNIX ou POSIX. Je sais qu'ils ne sont pas identiques, mais il est très difficile de les différencier lorsque l'on aborde un sujet de si loin. Même quand ce n'est pas difficile, cela prend du temps que je n'ai pas ;-)