9 pontos por GN⁺ 2025-12-02 | 3 comentários | Compartilhar no WhatsApp
  • A estrutura de subsistema do Windows NT é composta por uma camada de conversão de chamadas de API para executar programas de outros sistemas operacionais
  • O WSL1 segue essa tradição, atuando como uma camada de tradução leve que converte chamadas do Linux em chamadas do kernel do Windows
  • O WSL2 foi migrado para uma VM Linux completa baseada em Hyper-V para resolver problemas de desempenho e passou a executar o kernel Linux real
  • O WSL2 oferece maior integração do que uma VM comum com gerenciamento dinâmico de memória, montagem de drives do Windows e integração de GUI via WSLg
  • Apesar de limitações como inconveniência no gerenciamento de arquivos e dependência de imagem de disco, é importante a flexibilidade de aproveitar seletivamente os pontos fortes e fracos do WSL1 e WSL2

Conceito de subsistema do Windows NT

  • O subsistema (subsystem) do Windows NT significa um conjunto de APIs e camada de conversão de chamadas para executar programas de outros sistemas operacionais
    • O NT antigo tinha, entre outros, OS/2 subsystem (OS2SS.EXE) e POSIX subsystem (PSXSS.EXE)
    • O CSRSS.EXE é a camada de conversão da API Win32, com algumas funções migradas para o modo kernel (WIN32K.SYS)
  • O subsistema POSIX era uma implementação mínima para certificação governamental e depois foi substituído pelo Windows Services for Unix baseado no Interix

WSL1: camada Linux baseada em tradução

  • O WSL1 (Windows Subsystem for Linux) é uma camada de tradução fina que converte chamadas de sistema do Linux em chamadas do Windows
    • Ao executar, apenas os processos bash consomem alguns MB de memória e é mostrado como processo normal no Gerenciador de Tarefas
    • O sistema de arquivos raiz existe como estrutura de arquivos individuais no NTFS, com overhead de armazenamento quase nulo
  • Limitações
    • Degradação de desempenho de I/O: custo de tradução causado pelas diferenças entre as APIs de sistema de arquivos do Linux e do Win32
    • Servidor X externo necessário para executar GUI (por exemplo, X410)
    • Sem suporte a raw socket, portanto traceroute, nmap, tcpdump e similares não podem ser executados

WSL2: VM Linux baseada em Hyper-V

  • Atendendo às necessidades dos usuários, a Microsoft introduziu uma VM Linux completa executando no Hyper-V
    • O sistema de arquivos raiz é gerenciado como um arquivo VHDX único
    • O comando wsl --set-version "Ubuntu" 2 permite alternar entre WSL1 e WSL2
  • Características de desempenho
    • A inicialização inicial é mais lenta, mas o kernel Linux nativo é executado
    • O uso de memória é dinâmico e pode escalar até metade da memória física máxima
    • Nos testes com stress, o consumo de memória aumenta com a carga e depois reduz automaticamente
    • Se necessário, o comando wsl --shutdown encerra a VM

WSL2: integração e limitações

  • O WSL2 reforça a integração com o Windows em vez de funcionar como uma VM tradicional
    • Montagem automática de drives do Windows, acesso às drives do Linux pelo caminho \\wsl$\, execução de apps GUI via WSLg
    • Os apps GUI são transmitidos via Remote Desktop Protocol e exigem configurações adicionais de DPI e escala de texto
  • Problemas de gerenciamento de arquivos
    • Os dados de trabalho do Linux são salvos dentro da imagem ext4.vhdx, com risco de portabilidade e recuperação
    • Quando executado wsl --unregister Distro, todos os dados são excluídos imediatamente
    • Ao usar o drive do Windows (/mnt/c), há perda de desempenho devido à sobrecarga de NTFS + VM
  • Protocolo de sistema de arquivos
    • WSL1 usa drvfs, enquanto o WSL2 usa o protocolo 9p do Plan9
    • Foram citados casos de bugs residuais de drvfs durante a conversão
  • Alternativas
    • É recomendável separar os dados de trabalho criando uma imagem VHDX separada e montando com wsl --mount --vhd
    • Não é possível configurar automaticamente via .wslconfig, então precisa ser tratado por script

Conclusão

  • O design modular e a ABI de kernel estável do Windows NT mantêm a compatibilidade com drivers legados
  • O WSL1 tem vantagem em baixo consumo de memória, enquanto o WSL2 oferece maior compatibilidade e desempenho com kernel Linux real
  • O WSL2 é uma arquitetura que minimiza as desvantagens de uma VM e reforça a integração com o OS host
  • Pela definição tradicional, embora esteja mais próximo de uma VM, tem mérito para ser chamado de “subsistema” como um ambiente integrado e leve

3 comentários

 
crawler 2025-12-02

Uau, até tem o Sseuk desenvolvedor aqui

 
GN⁺ 2025-12-02
Opinião no Hacker News
  • O WSL2 roda sobre um subconjunto do Hyper-V e, no fundo, é uma VM sobre o hipervisor
    Mas ele tem diferenças em relação a uma VM comum do Hyper-V. Por exemplo, as distribuições Linux no WSL2 podem usar aceleração de GPU até em ambientes X ou Wayland por meio de particionamento de GPU (ou seja, PCI/GPU passthrough) e de uma implementação especial do DirectX
    Esses recursos também podem ser viabilizados no Hyper-V comum com algumas gambiarras via PowerShell e afins, mas oficialmente só têm suporte no Windows Server

    • Eu achava que passthrough de GPU também funcionava no Windows 11 padrão, mas não fui checar em detalhe. Ainda assim, é um recurso bem impressionante. Estou pensando em escrever um novo post sobre os recursos gráficos
    • No fim das contas, isso é só uma VM comum, mas a parte boa é a automação
      Só que dizer que “o X ou o Wayland fazem a renderização” é um mal-entendido. Quem realmente usa a GPU é a própria aplicação, e o X/Wayland fica mais com a composição de janelas depois que a renderização termina
      Existem tarefas mais complexas, como conversão de cores, mas a carga computacional é pequena
    • O WSL2 e o kernel WinNT não rodam ambos praticamente no mesmo nível sobre o Hyper-V? Claro, o kernel NT tem muito mais permissões de acesso ao hardware
    • É engraçado imaginar ter de comprar e instalar uma licença do Windows Server só para rodar Linux
    • A integração gráfica do WSL2 me decepcionou mais do que eu esperava. A configuração antiga com X-server era melhor. Mas o X não dá suporte a APIs modernas, então os desenvolvedores estão perdendo interesse aos poucos. Espero que isso melhore à medida que o suporte ao WSL2 aumentar
  • O WSL1 é baseado em pico process, uma tecnologia derivada da pesquisa Drawbridge
    Veja os materiais relacionados The Linux Kernel Hidden Inside Windows 10 e WSL Pico Process Overview
    A mesma tecnologia Drawbridge também é usada para rodar o SQL Server no Linux
    O artigo da Ars Technica explica isso em mais detalhes

  • Entendo por que migraram para o WSL2, mas é uma pena terem parado totalmente o desenvolvimento do WSL1
    Nosso ambiente de CI é em grande parte baseado em Linux, mas algumas toolchains não funcionam bem no Wine, como o MSVC
    Por isso, precisávamos de um ambiente em que fosse possível executar builds Linux de forma tranquila no Windows. O WSL1 permitia isso, mas o WSL2 não compartilha namespaces de processo nem descritores de arquivo, então é preciso recorrer a várias gambiarras
    A velocidade de IO melhorou, mas o compartilhamento de arquivos é lento demais para uso real

    • No WSL2 também dá para acessar arquivos do Windows via /mnt/c
    • Uma alternativa é combinar clang-cl com xwin no lugar do MSVC.
      Já cheguei a compilar extensões C de Python dessa forma
  • O WSL2 é uma VM extremamente integrada ao ambiente Windows
    Sou obrigado a usar Windows por política da empresa e uso isso todos os dias para desenvolvimento; na maior parte dos casos, a experiência é bem confortável

    • Estou trabalhando numa VM fornecida pela empresa, mas o desempenho está ficando cada vez mais sofrível. Estou pensando em mudar para o WSL2.
      Só que, como a base é RHEL8, é inconveniente que o suporte seja só para a família Debian. Queria saber como está hoje o suporte a apps gráficos
    • Falam em “integração estreita”, mas na prática no ps ou no top só aparece o processo da VM.
      Com docker run -it ubuntu também dá para fazer algo parecido, então fico curioso sobre o que realmente muda.
      Pessoalmente, achei o espaço de trabalho separado bem incômodo
  • O WSL2 é, no fim, uma VM leve. É uma ideia parecida com o Firecracker, focada em boot rápido e baixo uso de memória
    Mas, se você rodar vários containers Docker, a exigência de memória cresce bastante. Para ficar confortável, é melhor ter pelo menos 20 GB

    • Felizmente, hoje em dia notebooks com 32 GB de RAM não são tão caros quanto antes
    • O boot do WSL2 é muito rápido, 1 a 2 segundos, e eu queria entender como isso foi implementado. Dá para imaginar que pulam a tela da BIOS, mas parece haver outras otimizações também
  • Pessoalmente, acho o WSL1 muito mais útil. A maior parte das ferramentas de CLI, como toolchains de C++ e .NET, além de ssh/scp, funciona bem
    Já o WSL2 quase não me serve para nada. Se preciso de uma VM Linux, uso VMware
    O VMware tem muitos recursos, como árvore de snapshots, aceleração 3D, conexão de dispositivos USB, configuração de rede virtual, e ainda oferece uma GUI conveniente

  • Dá para acessar o disco da VM interna do WSL pelo caminho \\wsl$
    Se um software antigo não suportar caminho UNC, dá para resolver mapeando para uma letra de unidade

  • Existe o problema de o arquivo VHDX continuar crescendo. É preciso fazer compactação (compact) manualmente

    • Ativar sparse VHD ajuda. Não é perfeito, mas o serviço systemd-trim resolve parte do problema
      Veja a issue relacionada GitHub WSL #12103
      Se ainda assim não funcionar, dá para usar o método de otimização manual
    • Existe um recurso de redução automática, mas às vezes ele acaba causando problemas
  • Só como referência, o WSL contorna as regras do firewall do Windows por padrão. Fico me perguntando por que a Microsoft projetou isso dessa forma

    • Sério mesmo? Eu sempre sofri para fazer conexões ssh funcionarem direito no WSL
  • Fico me perguntando se daria para montar uma partição ext4 real e assim reduzir a perda de desempenho causada pela simulação de dispositivo de bloco baseada em arquivo de imagem

 
tangokorea 9 일 전

À medida que passei a usar o WSL2 com frequência, bem quando fui deixando de usar Linux cada vez menos, comecei a me perguntar: isso também é EEE?
EEE - abraçar, estender e extinguir (Embrace, Extend, and Extinguish)