A maior expectativa que eu tinha nos últimos anos era esse lançamento: WSL2 em Generally Available. Ficou fantástico!
Antes de falarmos de WSL2 precisamos falar de WSL e do WSL1 e sua história na Microsoft.
Um pouco da história do WSL
WSL1 chega no Microsoft Build 2016 para explodir a cabeça de todos. A foto do Satya Nadella e ao fundo o slide com Microsoft ❤️ Linux é emblemática. Mostra uma nova era para a Microsoft, mas uma nova era para nós, desenvolvedores que usam sua plataforma. Na época do anúncio se chamava Bash on Ubuntu on Windows. Eu lembro da euforia e perplexidade daquele momento.
Em agosto de 2016 a primeira release chegou para nós, e com ela limitações. Fomos avisados de que certos tipos de aplicações não funcionariam, além da existência de problemas de performance, principalmente no acesso a disco. Desde o início tínhamos muita clareza sobre a arquitetura e o esforço descomunal para que aquela façanha pudesse ser feita. Desde desenterrar POSIX até apresentações que detalhavam o WSL1 e como ele fazia tradução de syscalls. Sim, ao invés de um kernel Linux, tínhamos um adapter com características de um kernel Linux, que adaptava as demandas de um processo linux e executava no kernel do windows. O diagrama da esquerda, abaixo, mostra como isso funcionava.
Aquilo sempre nos pareceu uma bruxaria fantástica! Não só por vermos a Microsoft se abrindo ainda mais para o Linux, visto que em 2014 já havia anunciado o Microsoft vNext Multiplataforma (hoje .NET Core, em breve .NET 5). Quando detalharam o que estava sendo feito (adapter) foi assustador. Você faz ideia de que tem de reimplementar e adaptar cada feature do Kernel Linux? Eu nunca vi seu código, mas pela quantidade de gente, é óbvio concluir que não é algo nem simples, tampouco rápido.
No Microsoft Build de 2017 já estávamos angustiados pela ausência de docker no WSL, então pela primeira vez a Microsoft se pronunciou via Jack Hammons Program Manager do WSL na Microsoft naquela época.
Eu fiz esse post (Windows Subsystem for Linux & Docker) pois já existia uma galera caça-click falando de rodar docker no WSL, mas era uma meia verdade. Docker é uma aplicação client-server: client (docker, uma cli) e server (dockerd, o daemon). Quem de fato lida com containers é o dockerd. O docker é apenas uma cli que se conecta ao dockerd. Então nessa época tínhamos o docker rodando, mas não o dockerd. Então tecnicamente estava certo afirmar que estava rodando docker, mas o leitor esperava de fato era que rodássemos tudo.
Porque sempre foi tão relevante pensar em Docker no WSL?
Vale lembrar que Docker Toolbox e Docker Desktop usam máquinas virtuais para hospedar o dockerd (daemon do docker). Como em qualquer máquina virtual, você precisa pré-alocar memória e é aí que reside o maior problema. Eu para meus testes aloco 10GB exclusivos para a VM do Docker, isso quer dizer que eu preciso obviamente ter mais que isso disponível. No meu caso tenho 32GB de RAM para garantir meus testes com terraform, docker e outras tecnologias. Alocar 10GB para o docker me viabiliza rodar stacks de fato complexos.
O WSL2
Do bande de água fria em 2017 pra frente pouca coisa mudou no ano seguinte. Mas em 2019 recebemos o anúncio do WSL2, que não era apenas uma segunda versão, era uma reengenharia e uma nova arquitetura. Desa vez, ao invés de implementar um adapter do kernel Linux, decidiram hospedar de fato um kernel Linux lado-a-lado com o Windows. Daqui do universo Microsoft isso também causou estranheza, afinal a Microsoft estava decidida a entregar uma experiência completa do Linux no Windows. Lembrando que a falta de novidades em 2018 fez pensarmos que WSL1 seria um daqueles brinquedos de luxo, com muita utilidade acadêmica e pouca utilidade prática.
O WSL2 chegava com algumas coisas incríveis:
Lightweights VM’s
No anúncio do WSL2, uma das principais novidades era a falta de uma máquina virtual. Logo depois do lançamento, papers técnicos apontavam para a existência dessas Lightweights VM’s. Um fato curioso sobre isso foi notificar no post Adeus MobyLinux – WSL 2 Suportará Docker sem a necessidade de máquinas virtuais no Windows mas no final do post há questionamentos que faço sobre o que vem a ser essa lightweights vm’s.
Mais tarde descobrimos essas máquinas virtuais na verdade se tratam de um tipo especial. Elas são mais enxutas, conseguem bootar em menos de 2 segundos, conseguem lidar com alocação dinâmica de memória evitando a necessidade de pré-alocar um tanto de memória para sua execução. Vimos esse tipo de VM pela primeira vez, dando vida ao isolamento de kernels do Windows, permitindo criar Windows Containers com isolamento de Kernel. E desde 2019 vemos esse tipo de VM, associado ao WSL2.
A parceria com o Canonical
Uma das parcerias mais vitoriosas desde de o Bash on Ubuntu on Windows é com a Canonical, fornecedora da distribuição Linux Ubuntu. Ubuntu tem 42,2% do mercado de Linux segundo a w3techs, contra 17,9% do seu concorrente direto, o CentOS. Aliás precisamos abordar a dicotomia Ubuntu vs CentOS.
Essa briga entre Ubuntu e CentOS é uma briga velha. De um lado, o Ubuntu é o queridinho dos devs não só por ser uma distribuição baseada no Debian, mas por receber updates com maior frequência. Inclusive updates de Kernel. O que é o exato oposto do CentOS, que visando entregar maior estabilidade, tem ciclos de atualização mais conservadores. Principalmente quanto ao seu Kernel.
A questão é que esse modo mais conservador não necessariamente se traduz em maior eficiência, visto experimentei problemas com docker no CentOS exatamente por causa da versão desatualizada do Kernel. Enquanto distribuições Ubuntu eram disponibilizadas com Kernel 4.x, CentOS era distribuído com kernel 3. Mas tudo bem, forçar um update de Kernel no CentOS, nesse caso não chega a ser algo complexo, mas com toda certeza é delicado.
O CentOS é o queridinho dos SysAdmins, baseado no Red Hat, o CentOS tem suas diferenças no dia-a-dia em relação ao Ubuntu, o que na minha opinião torna seu uso mais burocrático.
Eu tenho servidores Ubuntu desde 2016 e nunca mais saí dessa distro. Trocaria por CentOS? Nem se uma pandemia chinesa assolasse a terra!
Voltando à parceria, Ubuntu está presente desde os primeiros suspiros do WSL1 e não poderia ser diferente agora no WSL2. Essa parceria apresenta a versão que ao meu ver é mais propícia para acompanhar o Windows. Simples, nada burocrática, baseada em Debian. Essa parceria potencialzia o desenvolvimento de soluções para linux a partir de dispositivos Windows.
Como já disse Dev Desktop .NET Core: Windows ou Linux?, minha recomendação é clara e límpida:
- Desenvolva no Windows
- Implante no Linux.
É, ao meu ver, a melhor estratégia. E vemos cada vez mais suporte a essa estratégia na plataforma. Abaixo temos um reporte recente (2020) da pesquisa anual do Stack Overflow apontando que quase metade dos ambientes de desenvolvimento são Windows.
Seja pelas IDE’s e ferramentas, ou pelas novas capacidades de integração, temos uma oferta incrível de possibilidades. Tanto para você se aproximar do Linux, quanto para entregar projetos para serem hosepdados no pinguim.
A expectativa e o Windows Insider
O WSL2 é uma daquelas soluções e lançamentos que aguardamos ansiosos. WSL2 foi anunciado no Microsoft Build 2019, e só foi lançado agora, alguns dias depois do Microsoft Build 2020. Tínhamos rumores de que sairia em Novembro passado, depois março, depois abril, e por fim maio.
Antes disso o projeto era testado dentro do programa Windows Insider. Um programa gratuito de testes do Windows, onde você opta por entrar em um dos 2 ciclos (slow ring / fast ring) que são os cliclos de atualização. O Fast Ring faz você receber releases mais rapidamente, que estão em testes ainda. O Slow Ring é um cilco mais maduro.
Eu tenho interesse em rodar Docker no WSL desde 2016. Acompanho o projeto e seus anúncios desde então, e finalmente temos à nossa frente essa possibilidade.
Em 2019, no segundo semestre houve de fato o lançamento do WSL2 dentro do Windows Insider. Tratei de me inscrever para receber as atualizações e testei os 2 rings (fast e slow) em momentos diferentes. No meu caso a experiência embora tenha sido boa, era aquém do que eu podia me dar ao luxo de ter. Tive inúmeros Green Screen of Death (BSOD no Widnows Insider é verde) e isso me atrapalhava na hora de gravar conteúdo, editar vídeos. Por isso eu saí do programa.
WSL2 no Docker Definitivo
Em Novembro, quando lancei a primeira Turma do Docker Definitivo, prometi que assim que tivesse disponível eu iria incluir no material. E essa promessa agora poderá ser cumprida! Em breve trarei novidades sobre o assunto.
Docker
Todos os benefícios de um Kernel Linux lado-a-lado com um kernel Windows poderia trazer vantagens para diversos segmentos e tipos de desenvolvedores, mas sinceramente?
No meu uso, docker é e sempre foi meu maior interesse seja com WSL1 ou WSL2.
Ter uma experiência linux, com um bash completo, permite fazer muito mais com uma experiência muito mais próxima da que temos em um ambiente 100% linux. Ensinar e aprender é infinitamente mais fácil com WSL1 e WSL2. Está ali do lado, sem a necessidade de criar uma partição, uma VM, um outro computador ou algo na núvem. Está do lado do seu browser, assim como o notepad, então a barreira de entrada e descoberta se torna muito menor.
Agora temos uma experiência incrível com as novas versões do Docker Desktop que se integra perfeitamente ao WSL2. Estou testando desde dia 27 e estou curtindo muito. O diagrama acima expressa como essa integração funciona.
Respondendo a pergunta: Precisamos do Docker Desktop? Visite https://docs.docker.com/docker-for-windows/wsl/ para saber mais.
Oportunidades
- Sabemos que podemos usar Docker no WSL2
- Sabemos que podemos rodar aplicações com GUI
Será que vem aí o suporte ao desenvolvimento de aplicações desktop para o Linux, no WSL2? Será? Eu apostaria que sim, aposto que nos próximos 5 anos isso possa ser realidade, principalmente se algum concorrente como Jetbrains tentar abocanhar esse nicho.
Já pensou?
- Linux Forms?
- Linux Presentation Foundation?
Ok, isso foi uma piada péssima, ok?!
Conclusão
O que podemos fazer hoje com o Windows é indiscutivelmente inimaginável há alguns anos.
Pensar nisso em 2012, por exemplo, seria uma demonstração clara e límpida de insanidade.
Aliás, usei na imagem de capa o icônico wallpaper do Windows XP, com a intenção de lembrar como pensávamos nessa época!
WSL 2 está disponível para todos
O WSL2 fica disponível na medida que você instala o update 2004 que chega via windows update!
0 comentários