WSL Overview
WSL is comprised of a set of executables, APIs and protocols. This page offers an overview of the different components, and how they're connected. Click on any component to get more details.
%%{ init: {
'flowchart': { 'curve': 'stepBefore' },
'theme': 'neutral'
}
}%%
graph
subgraph Windows["<b><p style="font-size:30px">Windows</p></b>"]
C:\Windows\System32\wsl.exe["C:\Windows\System32\wsl.exe"]---|"CreateProcess()"|wsl.exe;
wsl.exe[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fwsl.exe">wsl.exe</a>]---|COM|wslservice.exe;
wslg.exe[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fwslg.exe">wslg.exe</a>]---|COM|wslservice.exe;
wslconfig.exe[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fwslconfig.exe">wslconfig.exe</a>]---|COM|wslservice.exe;
wslapi.dll[<a href="/?originalUrl=https%3A%2F%2Flearn.microsoft.com%2Fwindows%2Fwin32%2Fapi%2Fwslapi%2F">wslapi.dll</a>]---|COM|wslservice.exe;
id[debian.exe, ubuntu.exe, ]---|"LoadLibrary()"|wslapi.dll;
wslservice.exe[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fwslservice.exe">wslservice.exe</a>]---|"CreateProcessAsUser()"|wslrelay.exe[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fwslrelay.exe">wslrelay.exe</a>];
wslservice.exe---|"CreateProcessAsUser()"|wslhost.exe[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fwslhost.exe">wslhost.exe</a>];
fs["Windows filesystem (//wsl.localhost)"]
end
wslservice.exe -----|hvsocket| mini_init
wslservice.exe -----|hvsocket| gns
fs---|hvsocket|plan9
wsl.exe---|hvsocket|relay
subgraph Linux["<b><p style="font-size:30px">Linux</p></b>"]
mini_init[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fmini_init">mini_init</a>]---|"exec()"|gns[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fgns">gns</a>]
mini_init---|"exec()"|init[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Finit">init</a>];
mini_init---|"exec()"|localhost[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Flocalhost">localhost</a>];
subgraph "Linux Distribution"["<b><p style="font-size:23px">Linux Distribution</p></b>"]
init[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Finit">init</a>]---|"exec()"|plan9[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fplan9">plan9</a>];
init---|"exec()"|sid[session leader];
sid[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Fsession-leader">session leader</a>]---|"exec()"|relay
relay[<a href="/?originalUrl=https%3A%2F%2Fwsl.dev%2Frelay">relay</a>]---|"exec()"|cid["User command (bash, curl)"]
end
end