Configurando um ambiente de desenvolvimento Linux com WSL

1. Introdução ao WSL e seus benefícios

O Windows Subsystem for Linux (WSL) é uma camada de compatibilidade desenvolvida pela Microsoft que permite executar binários Linux nativamente no Windows 10 e 11. Diferente de máquinas virtuais tradicionais que emulam hardware completo, o WSL utiliza um kernel Linux real otimizado, integrado diretamente ao sistema operacional Windows.

O WSL 2 representa um salto significativo em relação à versão anterior. Enquanto o WSL 1 usava uma camada de tradução de chamadas de sistema, o WSL 2 incorpora um kernel Linux completo executado em uma máquina virtual leve gerenciada pelo Hyper-V. Isso resulta em desempenho muito superior em operações de E/S de arquivos e compatibilidade total com chamadas de sistema Linux.

As vantagens sobre máquinas virtuais tradicionais são claras: inicialização em segundos, consumo reduzido de memória RAM, integração perfeita com o sistema de arquivos Windows, e a capacidade de acessar ferramentas Linux diretamente do terminal Windows sem necessidade de interface gráfica separada.

Para desenvolvedores, os casos de uso são vastos: desenvolvimento web com servidores Apache/Nginx, pipelines de DevOps com ferramentas como Docker e Kubernetes, automação com shell scripting, e execução de ambientes de desenvolvimento que exigem bibliotecas nativas Linux.

2. Instalação e configuração inicial do WSL

Antes de iniciar, verifique os requisitos: Windows 10 versão 2004 ou superior (Build 19041+) ou Windows 11. É necessário ter virtualização habilitada na BIOS/UEFI.

Para ativar o WSL, abra o PowerShell como administrador e execute:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Para o WSL 2, habilite também a plataforma de máquina virtual:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Reinicie o computador. Agora, instale uma distribuição Linux. O comando mais simples é:

wsl --install

Isso instalará o Ubuntu como distribuição padrão. Para ver todas as distribuições disponíveis:

wsl --list --online

Para instalar uma distribuição específica, como Debian:

wsl --install -d Debian

Após a instalação, configure o WSL 2 como versão padrão:

wsl --set-default-version 2

Para verificar as distribuições instaladas e suas versões:

wsl --list --verbose

Se necessário, converta uma distribuição do WSL 1 para WSL 2:

wsl --set-version Ubuntu 2

3. Personalização do terminal e shell

O Windows Terminal é a interface recomendada para trabalhar com WSL. Instale-o pela Microsoft Store ou via winget:

winget install Microsoft.WindowsTerminal

Configure o Windows Terminal para abrir automaticamente no WSL. Nas configurações, defina o perfil padrão como "Ubuntu" ou "Debian".

Agora, dentro do WSL, instale o Zsh:

sudo apt update
sudo apt install zsh git curl wget -y

Instale o Oh My Zsh:

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Adicione plugins essenciais. Primeiro, clone os repositórios:

git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

Edite o arquivo ~/.zshrc e adicione os plugins:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Instale o Starship prompt para um visual moderno:

curl -sS https://starship.rs/install.sh | sh
echo 'eval "$(starship init zsh)"' >> ~/.zshrc

4. Gerenciamento de pacotes e ferramentas de desenvolvimento

Atualize o sistema:

sudo apt update && sudo apt upgrade -y

Instale ferramentas essenciais:

sudo apt install build-essential gcc g++ make python3 python3-pip nodejs npm git -y

Configure gerenciadores de versão para maior flexibilidade. Para Node.js, instale o nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.zshrc
nvm install --lts
nvm use --lts

Para Python, instale o pyenv:

curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
pyenv install 3.12.0
pyenv global 3.12.0

Para Rust, instale o rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.zshrc

5. Integração entre Windows e Linux

O sistema de arquivos Windows é acessível através do diretório /mnt/. Por exemplo, para acessar a unidade C::

cd /mnt/c/Users/SeuUsuario

Para compartilhar variáveis de ambiente, edite o arquivo ~/.bashrc ou ~/.zshrc e adicione:

export PATH=$PATH:/mnt/c/Windows/System32

O Visual Studio Code integra-se perfeitamente com WSL. Instale a extensão "Remote - WSL" e abra pastas diretamente do terminal WSL:

code .

O Docker Desktop pode usar o WSL como backend. Nas configurações do Docker Desktop, habilite "Use the WSL 2 based engine" e selecione as distribuições que terão acesso ao Docker.

6. Otimização de desempenho e boas práticas

Crie ou edite o arquivo %USERPROFILE%\.wslconfig no Windows para limitar recursos:

[wsl2]
memory=4GB
processors=2
swap=2GB
localhostForwarding=true

Para evitar problemas de permissão, nunca modifique arquivos do WSL usando ferramentas Windows (Explorer, editores). Sempre use ferramentas Linux dentro do WSL para arquivos Linux. Para arquivos compartilhados, mantenha-os no sistema Windows e acesse via /mnt/.

Problemas de encoding entre sistemas podem ser resolvidos configurando o locale:

sudo locale-gen pt_BR.UTF-8
sudo update-locale LANG=pt_BR.UTF-8

Para automação, configure cron jobs:

sudo apt install cron -y
sudo systemctl enable cron
crontab -e

Adicione um script de inicialização no arquivo ~/.bashrc ou crie um serviço systemd (WSL 2 suporta systemd desde a versão 0.67.6).

7. Resolução de problemas comuns e próximos passos

Problemas de rede geralmente são resolvidos reiniciando o serviço WSL:

wsl --shutdown

Se o kernel travar, atualize o pacote do kernel WSL:

wsl --update

Para problemas de integração com Windows, verifique se o serviço LxssManager está em execução:

Get-Service LxssManager

Como próximos passos, expanda seu ambiente com:

  • Docker para containers: sudo apt install docker.io
  • Bancos de dados locais: sudo apt install mysql-server postgresql redis
  • Servidores de desenvolvimento: npm install -g http-server ou python3 -m http.server

Referências