Pular para o conteúdo

Windows Subsystem for Linux

O Windows Subsystem for Linux (WSL) é uma ferramenta de código aberto apoiada pela Microsoft que permite a emulação de um sistema operacional Linux dentro do Windows. A atual versão na data de escrita deste livro é a WSL 2, que traz grandes melhorias em relação à versão anterior.

O WSL permite instalar diversas distribuições Linux, até mesmo concomitantemente. Este guia oficial da Microsoft mostra algumas opções. Para este guia, vamos nos manter na distribuição Ubuntu, que é a padrão do WSL.

Pré-requisitos

Se você estiver usando o Windows 11, ou o Windows 10 versão 2004 (Build 19041) ou superior, o WSL 2 já estará habilitado, e você pode pular para a próxima seção.

Caso utilize uma versão mais antiga, seguiremos os passos recomendados pelo guia oficial da Microsoft.

Ainda assim, para sistemas com arquitetura x64, é necessário ter instalado a versão 1903 do Windows 10 ou posterior, com a Build 18362.1049 ou posterior. Versões mais antigas do Windows 10 não possuem suporte para o WSL 2.

Como alternativa, você pode ler o capítulo sobre a instalação do MSVC para compilar programas diretamente para executáveis do Windows. Ainda assim, não recomendamos essa abordagem, uma vez que instalar ferramentas para o Windows nativamente tende a ser mais complicado, instável e carecer de boa documentação. Caso possível, opte sempre por usar uma distribuição Linux ou o WSL.

Habilitando o WSL

Para habilitar o WSL no sistema, abra o PowerShell como administrador e execute o comando abaixo.

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

Habilitando a Virtualização

Para habilitar a virtualização no sistema, execute o comando abaixo no PowerShell como administrador.

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

Atualizando para o WSL 2

Baixe o pacote de atualização do WSL 2 pelo repositório da Microsoft e instale-o. Você pode verificar a origem do link pelo guia oficial da Microsoft.

Após o download, execute o instalador e siga as instruções.

Definindo o WSL 2 como padrão

Por fim, defina a versão 2 do WSL como padrão com o comando abaixo, ainda no PowerShell como administrador.

Terminal window
wsl --set-default-version 2

Instalando o WSL

Primeiramente, devemos instalar o WSL propriamente dito. Para isso, abra o PowerShell e execute o comando abaixo.

Terminal window
wsl.exe --install --no-distribution
Terminal do PowerShell, em que se executa o comando supracitado.
Processo de instalação do WSL pelo PowerShell.

Digitando wsl, recebi a seguinte mensagem: O Subsistema do Windows para Linux não tem distribuições instaladas.

Terminal do PowerShell, em que se executa o comando "wsl". A resposta é "O Subsistema do Windows para Linux não tem distribuições instaladas", o código de erro, e o link para a documentação.
Resultado do comando "wsl" após a execução do comando de instalação.

Bom, agora que temos o WSL, vamos instalar uma distribuição Linux! Mas, por precaução, reinicie o computador antes de prosseguir.

Instalando o Ubuntu

Agora que o WSL está habilitado, podemos instalar a distribuição Ubuntu.

A maneira mais fácil de fazer isso é pela Microsoft Store. Procure por uma aplicação chamada Ubuntu, sem indicar a versão. Ela é a primeira opção da imagem a seguir.

Loja da Microsoft, em que se pesquisa por 'ubuntu', e se seleciona a primeira opção.
Opções de instalações do Ubuntu pela Microsoft Store, em que se seleciona a Ubuntu.

Você também pode acessar essa página pelo link direto para a loja da Microsoft.

Clique no botão de instalar, e aguarde o download e instalação da distribuição.

Página no Ubuntu na loja da Microsoft. A instalação está em andamento.
Processo de instalação do Ubuntu para o WSL.

Configurando o Ubuntu

Pesquise pelo Ubuntu no Menu Iniciar e abra o aplicativo.

Menu Iniciar do Windows, em que se pesquisa por "Ubuntu" e se seleciona a opção correspondente.
Entrada do Ubuntu no Menu Iniciar.

O que será aberto, na verdade, é uma janela do terminal. Após aguardar alguns segundos, o sistema pedirá para criar um usuário e senha.

Eu usei o mesmo usuário do Windows, mas você pode criar um novo usuário se preferir. Outro detalhe é que, nos sistemas Linux, a senha não aparece enquanto você digita, fica apenas o espaço em branco mesmo. Não se preocupe, digite-a até o final e pressione Enter. Após repetir a senha, pressione Enter novamente.

O sistema fará as últimas configurações e criara um usuário de administrador para você dentro do Ubuntu.

Terminal do Ubuntu, em que são exibidas a mensagens da instalação, inclusive os prompts para criação de usuário.
Processo de criação de usuário do Ubuntu pelo terminal.

Lembre-se da sua senha, pois ela será solicitada sempre que você precisar de permissões de administrador.

Em caso de esquecê-la, deixo aqui um guia de como recuperá-la.

Configurando o Windows Terminal

Se tudo tiver corrido bem, você verá uma nova entrada para o Ubuntu na aba de perfis do Windows Terminal.

Lista de perfis do Windows Terminal, em que são exibidas as opções: "Windows PowerShell", "Prompt de Comando", "Azure Cloud Shell" e "Ubuntu".
Opção do Ubuntu na lista de perfis do Windows Terminal.

Eu acho mais prático ter o Ubuntu como padrão quando inicio o terminal. Para isso, abra as configurações do Windows Terminal. Na seção Startup (ou Inicialização), você pode definir o perfil padrão. Selecione a entrada do ubuntu com o ícone do pinguim Tux e clique em Salvar.

Configurações do Windows Terminal, em que se define o perfil padrão de inicialização.
Definindo o perfil do Ubuntu como a opção de inicialização padrão do Windows Terminal.

Atualizando os pacotes

A maioria das ferramentas que você instalará no Ubuntu será por meio do gerenciador de pacotes apt. Para garantir que tudo está atualizado, execute o comando abaixo.

Terminal window
sudo apt update

A palavra sudo é usada para executar um comando com permissões de administrador. Ela solicitará a senha do usuário que você criou anteriormente.

Terminal do Ubuntu, em que se executa o comando "sudo apt update".
Atualizando os pacotes do Ubuntu.

Então, para de fato instalar as atualizações, execute o comando abaixo.

Terminal window
sudo apt upgrade

Então, quando perguntado se deseja continuar, pressione Y e Enter para confirmar.

Terminal do Ubuntu, em que se executa o comando "sudo apt upgrade".
Instalando as versões atualizadas dos pacotes do Ubuntu.

Estrutura de diretórios

Aqui vale um pequeno apanhado de como funciona a estrutura de diretórios no Linux. Ela varia um pouco a depender da distribuição, mas a estrutura básica é a mesma.

  • O sistema todo é organizado dentro de uma pasta, a qual chamamos de ROOT ou /.
    • Ela não tem realmente um nome, por isso a referenciamos apenas com uma barra.
  • Dentro dela, temos diversas pastas, que são responsáveis por organizar, por exemplo:
    • bin: programas executáveis instalados a nível de sistema (pelo apt ou dnf)
    • opt: programas instalados manualmente a nível de sistema.
    • usr: programas instalados pelos usuários.
    • etc: arquivos de configuração do sistema.
    • lib: bibliotecas compartilhadas por programas.
    • home: pastas dos usuários.
    • mnt: referências a dispositivos de armazenamento montados no computador, como pendrives e HDs.

Há outras pastas (chamadas comumente de diretórios) importantes, mas com o tempo você pega o jeito.

Terminal do Ubuntu, em que se executa o comando "ls", que exibe a estrutura de pastas da raiz do Ubuntu.
Estrutura de pastas da raiz do Ubuntu (WSL).

A que nos interessa no momento é a pasta home. Dentro dela, o sistema cria uma pasta para cada usuário, nomeada com o nome do usuário. Por exemplo, o meu usuário é gabriel, então a pasta do meu usuário é /home/gabriel.

Essa pasta é tão importante que ela tem uma variável de ambiente que a referencia, chamada de HOME.

Pressione q para sair do texto de boas-vindas do Zsh. Digite no terminal o comando echo $HOME e veja o que aparece. Depois, digite echo $HOME no PowerShell e veja o que aparece.

Tanto o Windows quanto o Linux possuem essa variável de ambiente, mas perceba que o caminho é diferente!

Terminal do Ubuntu, em que se executa o comando "echo $HOME". A resposta é "/home/gabriel".Terminal do PowerShell, em que se executa o comando "echo $HOME". A resposta é "C:\Users\gabriel".
Comando para exibir a variável de ambiente HOME no Ubuntu e no PowerShell, respectivamente.

De fato, eu uso o mesmo usuário no Ubuntu e no Windows, mas o caminho da pasta do usuário é diferente porque se tratam de duas pastas completamente distintas.

O WSL cria de fato todo um novo ambiente de emulação dentro do Windows, com suas próprias pastas e configurações. Mas como acessar esse ambiente?

Se tudo tiver sido instalado corretamente, você verá uma nova entrada no Explorador de Arquivos chamada Linux. Dentro dela, haverá uma pasta chamada Ubuntu. Essa é justamente a pasta / (raiz) do Ubuntu, a qual mencionamos anteriormente.

Explorador de Arquivos do Windows aberto na pasta "Linux\Ubuntu".
Pasta raiz do Ubuntu WSL exibida no Explorador de Arquivos.

Acesse a pasta home, e então a pasta do seu usuário.

Explorador de Arquivos do Windows aberto na pasta "Linux\Ubuntu\home\gabriel".
Pasta HOME exibida no Explorador de Arquivos.

Vemos que há vários arquivos e pastas dentro do diretório do usuário. O arquivo .bashrc é o arquivo de configuração do Bash, o shell padrão do Ubuntu. Já o arquivo .zshrc é o arquivo de configuração do Zsh, o shell que vamos instalar mais adiante.

O ideal quando e usa o WSL é deixar todos os seus arquivos e projetos dentro do diretório do usuário no Linux. Assim, tem-se uma performance melhor e evita-se problemas de compatibilidade.

Entretanto, pode ser chato ter que navegar até o diretório do usuário toda vez que você quiser acessar um arquivo. Para facilitar, você pode criar um link simbólico do Windows que aponta para alguma pasta dentro do Ubuntu.

Eu gosto de organizar meus projetos numa pasta chamada dev na raiz do diretório do usuário.

Para criar uma pasta com esse nome, abra o Windows Terminal no perfil do Ubuntu e execute o comando abaixo.

Terminal window
mkdir ~/dev

Vamos criar um arquivo de texto dentro dessa pasta para testar o link simbólico.

Terminal window
echo "Hello, World!" > ~/dev/hello.txt
Terminal do Ubuntu, em que se executa o comando supracitado, e se move para a pasta "dev".
Criando um arquivo de texto na pasta ~/dev do Ubuntu.

Então, abra no terminal um perfil do PowerShell como administrador e execute o comando abaixo para criar um link simbólico.

Terminal window
New-Item -ItemType SymbolicLink -Path "C:\Users\$env:USERNAME\dev" -Target "\\wsl$\Ubuntu\home\$env:USERNAME\dev"
Terminal do PowerShell, em que se executa o comando supracitado.
Criando um link simbólico para a pasta ~/dev do Ubuntu.

Então, você poderá acessar a pasta dev diretamente pelo Explorador de Arquivos. Abra o Executar com Win + R e digite %USERPROFILE% para acessar seu diretório de usuário no Windows.

Você verá verá que a pasta dev está lá, e que apresenta um ícone de atalho.

Explorador de Arquivos do Windows aberto na pasta do usuário, em que se exibe a pasta "dev" com um ícone de atalho.
Link simbólico mostrado na pasta do usuário do Windows.

Clique com o botão direito na pasta e selecione Fixar no Acesso Rápido para tê-la sempre à mão.

Ao acessar a pasta, você verá o arquivo hello.txt que criamos anteriormente no Ubuntu.

Explorador de Arquivos do Windows aberto na pasta "dev" do Ubuntu.
Pasta ~/dev do Ubuntu mostrada na estrutura de pastas do Windows.