O Bash no Ubuntu no Windows permite que binários ELF64 nativos do Linux sejam executados no Windows por meio do Windows Subsystem for Linux (WSL). Embora muitas pessoas tenham ficado chocadas com o anúncio do Bash no Ubuntu, vale ressaltar que ele abre novas portas para a compatibilidade entre diferentes sistemas operacionais. A Microsoft dá mais um passo à frente e revela como seu WSL funciona para que possamos entender melhor como os dois sistemas se comunicam.
WSL foi criado pela equipe do Microsoft Windows Kernel e contém os componentes do modo de usuário e kernel. Mais especificamente, o sistema é composto por:
- um serviço de gerenciador de sessão em modo de usuário que lida com o ciclo de vida da instância do Linux
- Drivers do provedor Pico (lxss.sys, lxcore.sys) cuja função é emular um kernel Linux, traduzindo syscalls do Linux
- O Pico processa a hospedagem do modo de usuário Linux não modificado (por exemplo, / bin / bash).
A conexão entre os três componentes é descrita a seguir:
É o espaço entre os binários do Linux em modo de usuário e os componentes do kernel do Windows onde a mágica acontece. Colocando binários não modificados do Linux nos processos do Pico, permitimos que as chamadas do sistema Linux sejam direcionadas para o kernel do Windows. Os drivers lxss.sys e lxcore.sys traduzem as chamadas do sistema Linux em APIs do NT e emulam o kernel do Linux.
O principal desafio do processo é fazer com que os dois sistemas funcionem juntos:
WSL executa binários Linux ELF64 não modificados virtualizando uma interface de kernel Linux no topo do kernel do Windows NT. Uma das interfaces do kernel que ele expõe são chamadas de sistema (syscalls). Um syscall é um serviço fornecido pelo kernel que pode ser chamado a partir do modo de usuário. Tanto o kernel do Linux quanto o do Windows NT expõem várias centenas de syscalls ao modo de usuário, mas eles têm semânticas diferentes e geralmente não são diretamente compatíveis. Por exemplo, o kernel do Linux inclui coisas como fork, open e kill, enquanto o kernel do Windows NT tem o NtCreateProcess, NtOpenFile e NtTerminateProcess comparáveis.
O subsistema do Windows para Linux inclui drivers de modo kernel (lxss.sys e lxcore.sys) que são responsáveis por lidar com as solicitações de chamada do sistema Linux em coordenação com o kernel do Windows NT. Os drivers não contêm código do kernel Linux, mas são, em vez disso, uma implementação de sala limpa de interfaces de kernel compatíveis com Linux. No Linux nativo, quando uma syscall é feita a partir de um executável no modo de usuário, ela é tratada pelo kernel do Linux. No WSL, quando uma syscall é feita a partir do mesmo executável, o kernel do Windows NT encaminha a solicitação para lxcore.sys. Sempre que possível, o lxcore.sys traduz o syscall do Linux na chamada equivalente do Windows NT que, por sua vez, faz o trabalho pesado.
Levando em consideração o interesse da Microsoft em plataformas de código aberto, muitas pessoas se perguntaram se o gigante da tecnologia deve adquirir grandes empresas com foco em Linux, como a Canonical, a empresa por trás do sistema operacional Ubuntu. Embora a Microsoft e a Canonical tenham cooperado com o software de código aberto, nenhuma delas fez comentários sobre essa possibilidade.
Se você estiver interessado em como a interação Linux - Windows evolui, vá para o Blog da Microsoft. A equipe prometeu que mais posts de blog sobre este tópico viriam a seguir.
HISTÓRIAS RELACIONADAS QUE VOCÊ PRECISA VERIFICAR:
- Usuários do Linux relatam problemas de “Fones de ouvido parados de funcionar no Windows 8.1”
- Microsoft e Canonical trazem Bash para Windows 10 na Build 2016
- Munich começa a distribuir CDs gratuitos do Ubuntu para usuários do Windows XP