De Bash på Ubuntu på Windows gör det möjligt för inbyggda Linux ELF64-binärer att köras på Windows via Windows Subsystem for Linux (WSL). Även om många människor blev chockade av meddelandet Bash på Ubuntu, är det värt att nämna att det öppnar nya dörrar för kompatibiliteten mellan olika operativsystem. Microsoft tar ytterligare ett steg framåt och avslöjar hur dess WSL fungerar så att vi bättre kan förstå hur de två systemen kommunicerar med varandra.
WSL skapades av Microsoft Windows Kernel-teamet och innehåller både användarläge och kärnlägeskomponenter. Mer specifikt består systemet av:
- en användarläge session manager service som hanterar livscykeln för Linux-instanser
- Pico-leverantörsdrivrutiner (lxss.sys, lxcore.sys) vars roll är att emulera en Linux-kärna genom att översätta Linux-syscalls
- Pico bearbetar värd för det omodifierade användarläget Linux (t.ex. / bin / bash).
Förbindelsen mellan de tre komponenterna beskrivs enligt följande:
Det är utrymmet mellan användarläget Linux-binärer och Windows-kärnkomponenter där magin händer. Genom att placera omodifierade Linux-binärer i Pico-processer möjliggör vi att Linux-systemanrop dirigeras till Windows-kärnan. Drivrutinerna lxss.sys och lxcore.sys översätter Linux-systemanropen till NT API: er och emulerar Linux-kärnan.
Huvudutmaningen i processen är att få de två systemen att fungera tillsammans:
WSL kör omodifierade Linux ELF64-binärer genom att virtualisera ett Linux-kärngränssnitt ovanpå Windows NT-kärnan. Ett av kärngränssnitten som den exponerar är systemanrop (syscalls). En syscall är en tjänst som tillhandahålls av kärnan som kan anropas från användarläge. Både Linux-kärnan och Windows NT-kärnan exponerar flera hundra syscalls för användarläge, men de har olika semantik och är i allmänhet inte direkt kompatibla. Till exempel innehåller Linux-kärnan saker som gaffel, öppen och dödande medan Windows NT-kärnan har jämförbara NtCreateProcess, NtOpenFile och NtTerminateProcess.
Windows Subsystem for Linux innehåller kärnlägesdrivrutiner (lxss.sys och lxcore.sys) som ansvarar för att hantera Linux-systemanropsförfrågningar i samordning med Windows NT-kärnan. Drivrutinerna innehåller inte kod från Linux-kärnan utan är istället en renrumsimplementering av Linux-kompatibla kärngränssnitt. På inbyggd Linux hanteras en Linux-kärna från ett körbart användarläge av Linux-kärnan. På WSL, när en syscall görs från samma körbar, vidarebefordrar Windows NT-kärnan begäran till lxcore.sys. Där det är möjligt översätter lxcore.sys Linux-syscall till motsvarande Windows NT-samtal som i sin tur gör tunga lyft.
Med hänsyn till Microsofts intresse för open source-plattformar undrade många människor om teknikjätten bör förvärva stora Linux-fokuserade företag som Canonical, företaget bakom Ubuntu-operativsystemet. Även om Microsoft och Canonical samarbetade om programvara med öppen källkod gav ingen av dem några kommentarer om denna möjlighet.
Om du är intressant i hur Linux - Windows-interaktionen utvecklas, gå till Microsofts blogg. Teamet lovade att fler blogginlägg om detta ämne skulle följa.
RELATERADE BERÄTTELSER DU MÅSTE KONTROLLERA:
- Linux-användare rapporterar problem med "hörlurar slutade fungera i Windows 8.1"
- Microsoft och Canonical tar Bash till Windows 10 på Build 2016
- München börjar distribuera gratis Ubuntu-CD-skivor till Windows XP-användare