Aqui está uma lista das opções disponíveis a partir de 2018-05 com algumas atualizações sobre a WSL durante 2019-01, juntamente com um pouco de detalhes sobre cada uma.
Opções que se destacam
Cygwin fornece o seguinte:
- um shell bash e o terminal Mintty,
- uma ampla variedade de utilitários comuns do Linux compilados para serem executados no Windows
- uma abrangente camada de compatibilidade que permite que os programas Linux sejam executados no Windows.
O Cygwin visa facilitar a portabilidade de aplicativos Linux no Windows. Se algum programa C foi projetado para Unix e espera usar recursos como pipes, acesso a arquivos e diretórios no estilo Unix etc., você pode compilá-lo para o Cygwin e o Cygwin atuará como uma camada de compatibilidade entre o código e o SO estrangeiro (Windows) . Isso permite que o mesmo programa C funcione no Linux e no Windows com pouca ou nenhuma modificação. Uma enorme lista de programas Linux foi cumprida e pode ser executada quando você instala o Cygwin. No entanto, você, usuário desses programas, provavelmente precisará estar familiarizado com o Unix. Por exemplo, você pode precisar passar argumentos como em /cygdrive/c/autoexec.bat
vez de c:\autoexec.bat
e estar pronto para lidar com a saída com terminação de linha Unix ( \n
) em vez de terminação de linha do Windows ( \r\n
).
A coleção de todos os programas Cygwin inclui um repositório e, embora o Cygwin não possua um gerenciador de pacotes Linux tradicional, você pode adicionar, remover e atualizar programas desse repositório a qualquer momento, de uma maneira muito contra-intuitiva (você executa o setup.exe do Cygwin em a qualquer momento após a instalação)
Babun é Cygwin com um gerenciador de pacotes completo (pacto), oh-my-zsh, por seu shell, git, atualizações automáticas e uma arquitetura orientada a plug-ins. Embora o shell padrão seja zsh, você pode facilmente mudar para o bash. Parece uma boa atualização do Cygwin de baunilha, se você não se importa com o peso extra.
Mingw-w64 fornece o seguinte:
- uma concha,
- uma quantidade razoável de utilitários Linux,
- uma cadeia de ferramentas de desenvolvimento de SW para criar aplicativos que serão executados sem uma camada de compatibilidade do Linux (ou com uma camada mínima).
O MinGW é principalmente uma distribuição de software e uma plataforma de construção para Windows. Em particular, é uma porta do Windows das ferramentas do compilador GNU, como GCC, make, bash e assim por diante. Inclui uma quantidade razoável de ferramentas GNU e uma camada mínima de compatibilidade com Unix.
A principal diferença entre o Mingw-w64 e o Cygwin está nas prioridades: O Cygwin visa fornecer uma camada de compatibilidade POSIX completa, incluindo uma implementação completa de todas as principais chamadas e bibliotecas do sistema Unix; o desempenho é secundário à compatibilidade. O MinGW visa o desempenho, portanto, não fornecerá certas APIs POSIX que não podem ser implementadas com facilidade e / ou rapidez suficiente no Windows. Também o principal objetivo do MinGW são os desenvolvedores de S / W. No entanto, usuários casuais também podem desfrutar de seu shell e os utilitários incluídos de uso geral.
O MSYS2 fornece o seguinte:
- um shell bash e o terminal Mintty,
- uma quantidade razoável de utilitários Linux,
- um gerenciador de pacotes de linha de comando com todos os recursos para instalar programas do SO
- partes do Cygwin e MinGW para oferecer suporte à criação de aplicativos com ou sem uma camada abrangente de compatibilidade do Linux.
- um repositório de software e um gerenciador de pacotes (pacman) que facilita a instalação, o uso, a compilação e a portabilidade de software no Windows.
O MSYS2 também é principalmente uma distribuição de software e uma plataforma de construção para Windows como o MinGW, mas combina o modo do Cygwin e o modo do MinGW. Você pode usar o MSYS2 para criar "programas MinGW" ou "programas MSYS2" . O link posterior para a camada de compatibilidade do MSYS2 (msys-2.dll), que segue de perto o desenvolvimento da camada de compatibilidade do Cygwin com algumas adições / modificações . Os repositórios dos 2 projetos não são completamente relacionados. Portanto, embora o MSYS2 e o Cygwin forneçam, grep.exe
eles podem ter uma versão completamente diferente.
O Git para Windows é apenas o MSYS2 com o git instalado ou, pelo menos, fortemente baseado no MSYS2 . Ele fornece o mesmo shell (bash), terminal (Mintty) e gerenciador de pacotes (pacman). Parece ser a maneira mais popular de executar o Git dominante no Windows e, junto com ele, você obtém um ambiente Unix agradável.
A WSL resolve o mesmo problema usando um método completamente diferente. Você executa exatamente o mesmo código que executaria em um sistema Linux na WSL, que intercepta as chamadas do kernel e as converte em chamadas do kernel do Windows (é o oposto do Wine). Claro que a tradução não pode ser perfeita, mas a Microsoft retirou o aviso beta . Como a WSL não estava disponível no Windows Server antes de 2018, não analisei muito isso. De qualquer forma, você obtém um bom shell bash com a maioria das vantagens de CLI que você esperaria encontrar em uma instalação padrão do Ubuntu. A Microsoft afirma oficialmente que "o WSL não tem como objetivo oferecer suporte a desktops ou aplicativos da GUI"no entanto, existem instruções não oficiais sobre como fazê-lo. Parece que, no momento (no início de 2018), as principais desvantagens do WSL são as seguintes: a) tornar a tela e o acesso ao disco muito lentos b) você não deve editar arquivos WSL (Linux) no Windows c) só roda em Windows de 64 bits. Aqui está uma comparação antiga, mas agradável, com o cygwin (observe que Rich Turner é membro da equipe da WSL e ele publicou muitas informações úteis sobre a WSL)
Terreno comum
Exceto pela WSL, a maioria das ferramentas acima compartilham muita tecnologia comum (bibliotecas, executáveis, conceitos). Por exemplo, o shell bash que acompanha o MinGW depende do msys-2.dll, que é um fork do cygwin.dll. Então, sim, há muito espaço para confusão :-)
Mais opções
O Cmder fornece apenas um bom terminal e um shell semelhante ao bash para Windows. Seu principal componente é o Conemu (o terminal). Além disso, ele adiciona o Clink, que fornece edição de linha de comando no estilo Bash , um layout de prompt personalizado e o esquema de cores Monokai. É altamente (ou talvez totalmente) compatível com os programas de console nativos do Windows.
O Scoop fornece um gerenciador de pacotes de linha de comando para muitos programas conhecidos entre plataformas, incluindo muitas ferramentas GNU. Ele baixa pacotes pré-compilados. Ele não fornece um shell nem um terminal, mas é executado no cmd.exe do Windows (com todas as suas limitações, mas também com sua total compatibilidade com os programas de console nativos do Windows). Ele também não inclui suíte de compiladores (mas é claro que compiladores e ferramentas de desenvolvimento são pacotes típicos que você pode instalar com o scoop). Muitos dos programas que o Scoop instala vêm diretamente do projeto MinGW / MSYS ou foram criados usando suas ferramentas.
Ainda mais opções
As soluções abaixo não parecem ativas e eu nunca as testei, mas parecem fazer o trabalho para outras pessoas:
Gow (Gnu On Windows) é a alternativa mais leve ao Cygwin sem casca. Ele usa um instalador conveniente do Windows que instala cerca de 130 aplicativos Linux de código aberto extremamente úteis, compilados como binários nativos do win32 e disponíveis no cmd.exe do windows. Ele foi projetado para ser o menor possível (cerca de 10 MB).
UnxUtils & GnuWin32 : O UnxUtils é uma coleção de portas de utilitários comuns do tipo GNU Unix para o Win32 nativo, com executáveis apenas dependendo do tempo de execução do Microsoft msvcrt.dll. Você deve baixar a parte principal e algumas atualizações . O GnuWin32 possui versões posteriores ao UnxUtils, mas requer arquivos de suporte (por exemplo, DLLs)
MSYS e MinGW parecem ter sido obsoletos pelo MSYS2 e MinGW-W64, por isso nunca os olhei.
Alguns problemas comuns no Cygwin e MSYS2
Em relação ao terminal
Mintty é o terminal usado no Cygwin, MSYS2 e seus derivados. É preciso estar ciente de que, se você estiver executando programas de console nativos do Windows, não será um substituto indolor para o prompt de comando do Windows. Enquanto os programas com saída de texto simples geralmente funcionam bem, os interativos e em tela cheia geralmente apresentam problemas. Leia mais na página inicial do Mintty e também leia a entrada "Alguns programas de console nativos não funcionam quando executados no Git Bash" nas Perguntas frequentes do Git for Windows . Essa entrada tem essas recomendações a serem feitas quando você enfrentar esse tipo de problema:
Existem vários métodos para solucionar esses problemas:
- Execute programas com problemas ao usar o utilitário winpty . Isso permite que você continue usando o terminal mintty mais agradável, mas pode se tornar pesado se você precisar da solução alternativa para muitos programas.
- [use cmd.exe] e configure-o para "Edição rápida", tamanho razoável e retorno de retorno e fonte unicode adequada. Você ainda precisará conviver com as outras peculiaridades do [cmd.exe].
- Instale e use o Conemu .
Outros problemas
As duas coisas mais importantes a serem lembradas são:
existe uma troca entre poder e problemas difíceis de depurar. Quanto mais poderosa a solução, mais coisas podem dar errado, mesmo de maneiras que inicialmente parecerão não relacionadas à sua camada Linux.
se você não possui muita experiência em Linux, não use as soluções mais poderosas como Cygwin / MSYS2 / MinGW
UnxUtils e GnuWin32 têm menos energia, mas também o menor potencial de causar dores de cabeça. Cygwin e similares superarão a fasquia em termos de energia e dores de cabeça. Cmder está em algum lugar no meio. Portanto, quando você precisar das soluções mais poderosas, durma bem e esteja totalmente concentrado. Evite usar soluções poderosas ao testar algo novo e possivelmente instável. Também não esqueça que soluções de média complexidade como o cmder não são impecáveis.
A questão dos comandos do Linux que sombream os do Windows é uma causa comum de problemas difíceis de depurar em soluções como Cygwin / MSYS2 / MinGW. Aqui está um exemplo: Eu tinha um arquivo .bat que estava usando o comando timeout. Quando executado no Cygwin, ele falha porque o tempo limite também é um comando do Linux, mas com sintaxe diferente. Depois de descobrir o problema, descobri que podia adicionar um PATH = ... na parte superior do arquivo .bat para garantir que o comando do Windows tivesse prioridade. Mas, então, recebi um erro ainda mais enigmático "O redirecionamento de entrada não é suportado" e resolvi uma solução alternativa antes de encontrar o motivo.
Aqui está um exemplo de um problema com o cmder. Eu estava executando a versão do Windows do uníssono no Cmder e, sob algumas condições especiais, ele estava travando com absolutamente nenhuma mensagem de erro . O mesmo comando estava sempre executando perfeitamente no cmd.exe. O engraçado é que ele também estava funcionando perfeitamente no Cygwin (na verdade, se você tiver nomes de arquivos Unicode, um terminal Cygwin é melhor que o cmd.exe porque o cmd.exe geralmente exibe o texto Unicode malformado).
Sobre este guia
Durante 2017-05, fiquei cansado de não entender as diferenças das ferramentas acima, embora estivesse usando algumas delas há muito tempo (principalmente CygWin e cmder, mas nunca para fins de desenvolvimento). Então, passei algumas horas para curtir a paisagem. Este guia é o resultado das anotações que guardei. Não sou especialista em campo, mas tentei encontrar todas as informações relevantes, ler com um olhar crítico e apresentar as partes mais importantes com clareza. Comente se algo parece errado e eu farei o meu melhor para corrigi-lo.
Finalmente, um pedido de desculpas por alguns problemas de terminologia: neste texto, às vezes, uso o termo Linux no lugar do UNIX ou POSIX. Eu sei que eles não são os mesmos, mas é muito difícil diferenciar entre eles ao abordar um tópico a uma distância tão longa. Mesmo quando não é difícil, leva tempo que eu não tenho ;-)
putty
nos conectar a um servidor linux real. no Windows, eu sempre relutava e tentava usarcygwin
, relutante por causa da minha experiência desajeitada de instalação. Mas, pessoalmente, achei mais conveniente usar do que msys e mais rápido que um vm. uma vez instalado, o cygwin se torna portátil, basta copiar o diretório, basta criar um novo nome de usuário em cada máquina / usuário com base no nome de usuário do Windows (por padrão, pelo menos). Mas lembre-se de que, como o cygwin / msys pode ser visto como uma "distribuição" personalizada, algumas opções de comando [opcional] podem estar ausentes. testá-los.