O Guia do WSL

Se seu sistema operacional padrão é o Linux e de repente você precisa usar o Windows diariamente (eu) OU usa Windows como padrão e de repente precisa do Linux como ambiente de desenvolvimento, este guia é pra você.

O Guia do WSL

Se seu sistema operacional padrão é o Linux e de repente você precisa usar o Windows diariamente (eu) OU usa Windows como padrão e de repente precisa do Linux como ambiente de desenvolvimento, este guia é pra você.

Aqui vão algumas dicas para facilitar sua vida enquanto usuário do WSL. São coisas que aprendi no meu uso diário do WSL neste período em que o Windows se tornou meu sistema operacional principal (já tá passando). São dicas rápidas que vão tornar sua vida muito, muito, muito melhor.

💡
WSL é um recurso do Windows que permite a execução de um ambiente Linux na sua máquina sem a necessidade de virtualização (mais ou menos).

Não vou buscar descrever o WSL aqui. Este guia é pra quem já tem ele instalado e que talvez aprenda algo com estas dicas. Para saber mais, recomendo este link sobre o WSL direto da fonte - https://learn.microsoft.com/en-us/windows/wsl/about

Meu foco aqui são pessoas que usem o WSL como ambiente de desenvolvimento, que é o nosso caso.

Não confunda os sistemas de arquivos e tente usar apenas o do WSL

Talvez a dica mais importante deste post seja esta: quando falamos do WSL há dois sistemas de arquivo. O nativo do Linux, aquele que você vê ao se autenticar na sua distribuição (que normalmente é o ext4) e o NTFS do Windows.

Quando você se autentica no WSL, se executar o comando ls /mnt/c, irá ver o conteúdo do seu drive "C" do Windows que usa o sistema de arquivos NTFS. Já no diretório raiz do WSL, com exceção de /mnt/c (ou outros drives que possam estar ali) o sistema de arquivos será o ext4 (dependendo da sua distribuição).

Sempre salve o código fonte do seu projeto no sistema de arquivos do WSL. Além do desempenho ser muito superior você também evita problemas relativos a permissões de arquivos, pois o modo como as permissões são gerenciadas no NTFS são diferentes do modo como são gerenciadas no Linux.

💡
Experimente executar o comando chmod do Linux em um arquivo presente no sistema de arquivos do Windows e veja o resultado.

Já adianto: não vai funcionar.

Vou além: você sequer precisa instalar suas ferramentas de desenvolvimento no Windows (apenas as IDEs). É possível instalar todos os seus SDKs e ferramentas de linha de comando no próprio WSL e usá-los ou via linha de comando no Linux ou a partir da sua IDE.

Gerencie todas (ou quase) ferramentas de desenvolvimento com asdf - update para a versão 0.16
Como gerenciar todas (ou quase) as suas ferramentas de desenvolvimento com ASDF - atualizado para a versão 0.16 ou posterior

Use o ASDF no WSL e seja feliz!

Acessando o sistema de arquivos do Linux no Windows

Direto você vai se ver no Windows precisando acessar os arquivos que estão no WSL e se não estiver preparado... prepare-se pra sofrer. Muitas pessoas tem dificuldades com isto, então aqui seguem alguns caminhos pra facilitar sua vida.

Para acessar o sistema de arquivos do Linux pelo Explorer há dois caminhos: pela barra de endereços digite o caminho \\wsl$

Você vai ver todas as distribuições do Linux no seu WSL (incluindo o Docker se estiver usando o Docker Desktop, que usa o WSL).

Uma vez acessado, na barra de ferramentas da lateral esquerda do Explorer, o ícone do Linux já aparece, pode acessar por lá também:

Ah... mas é chato este negócio de ficar lembrando este caminho. Dá pra ser mais fácil? Sim. Mapeie uma unidade de rede que aponta para o sistema de arquivos do WSL.

Clique com o botão direito do mouse sobre o ícone "Este computador". Será exposto um menu tal como o do print abaixo. Clique na opção "Mapear unidade de rede".

Será exposta a janela a seguir. O endereço de rede a ser fornecido é \\wsl.localhost.

No meu caso, usei a Unidade "L" pra representar o Linux. Feito: agora existe um drive "L" no seu computador e você pode acessar os arquivos a partir dali.

💡
Use este mapeamento de rede APENAS quando precisar ler um documento que está no sistema Linux. Evite abrir os projetos em sua IDE usando esta unidade. Explico mais adiante.

IntelliJ ama o WSL

Quer usar o IntelliJ? Instale no Windows mesmo (Community ou não). Quando for abrir seu projeto, apenas preste atenção no caminho que você usará na janela de seleção de arquivos. Apnte para \\wsl$, tal como no print a seguir:

Olha que fácil: agora basta navegar até o diretório que contém seu projeto.

Dica importante: instale o seu JDK no próprio WSL usando algo como o asdf nativo. O IntelliJ detecta o JDK instalado no WSL e o usará para compilar seu projeto. Isto aumenta SIGNIFICATIVAMENTE o seu desempenho durante o desenvolvimento. Esta dica se aplica ao JDK, Maven, Gradle e basicamente qualquer ferramenta de linha de comando que você use no dia a dia.

Olha que legal: você pode configurar o IntelliJ pra usar as ferramentas instaladas NO WSL!
💡
É possível instalar o IntelliJ no WSL, pois ele dá suporte a aplicações com interfaces gráficas, mas não recomendo.

A experiência que tive foi muito ruim: a não ser que você curta ter a experiência de um PowerPoint na sua IDE favorita.

Evite abrir seus projetos pelo mapeamento da unidade de rede: tive alguns problemas com a detecção do repositório Git fazendo assim. Use sempre o \\wsl$

VS Code no WSL

Instale o VS Code no Windows. Então vá para o diretório que contenha o seu projeto e digite code .. Pronto, vai abrir o servidor do VS Code no Linux pra você. E ele também vai usar as mesmas ferramentas que já estão instaladas no WSL. Fácil assim.

Atenção pro canto inferior esquerdo do seu VS Code. Ele vai mostrar que está sendo usado o servidor remoto dentro do WSL, tal como no print a seguir:

Melhorando o desempenho

Cuidado com esta dica: só a faça se souber realmente os riscos de segurança.

As ferramentas de segurança do Windows podem ser um problema. Então você pode incluir na lista de pastas a serem ignoradas o diretório em que se encontra o arquivo vxd da sua distribuição no WSL.

Também é possível incluir os processos do WSL na lista de exclusão pelo PowerShell.

Add-MpPreference -ExclusionProcess "vmmem"
Add-MpPreference -ExclusionProcess "wsl.exe"
Add-MpPreference -ExclusionProcess "wslhost.exe"

Definindo o consumo de memória e CPU do WSL

É possível definir a quantidade máxima de memória que a VM do WSL (ele não era independente de virtualização? como disse: mais ou menos, ele usa uma virtualização ultra leve). Para tal, edite o arquivo .wslconfig que vai estar presente no seu diretório home do Windows.

Aqui seguem as minhas configurações:

[wsl2]
# Limits VM memory in WSL 2 to 4 GB
memory=8GB

# Optional: Limits the number of CPU cores
processors=2

# Optional: Automatically returns unused memory to Windows (WSL version 2.0.0+)
autoMemoryReclaim=gradual

Alterando o arquivo, lembre de reiniciar o WSL com o comando wsl --shutdown

💡
Dá pra configurar mais coisas neste arquivo. Você vai encontrar os detalhes clicando aqui.

Concluindo

Não se iluda achando que você está com um ambiente Linux completo no WSL: devido à própria natureza da solução é uma alternativa mais lenta e tem limitações (a primeira versão era impressionante mas bem limitada, só use WSL2 pra frente). Mas se você está preso ao Windows (como é o meu caso) e não quer ficar na loucura de um dual boot contínuo durante o dia, isto vai te ajudar.

A experiência após estas mudanças melhora muito. Errei algo? Me conta, ok? Fui!

Mantido por itexto Consultoria