doc/docs/technical-documentation/wslservice.exe.md
WslService is a session 0 service, running as SYSTEM. Its job is to manage WSL sessions, communicate with the WSL2 virtual machine and configure WSL distributions.
Clients can connect to WslService via its COM interface, ILxssUserSession. Its definition can be found in src/windows/service/inc/wslservice.idl.
When a COM client calls CoCreateInstance() on this interface, the service receives the requests via LxssUserSessionFactory (see src/windows/service/LxssUserSessionFactory.cpp) and returns an instance of LxssUserSession (see src/windows/service/LxssUserSession.cpp) per Windows user (calling CoCreateInstance() multiple times from the same Windows user accounts returns the same instance).
The client can then use its ILxssUserSession instance to call methods into the service, such as:
CreateInstance(): Launch a WSL distributionCreateLxProcess(): Launch a process inside a distributionRegisterDistribution(): Register a new WSL distributionShutdown(): Terminate all WSL distributionsWslService manages the WSL2 Virtual Machine. The virtual machine management logic can be found in src/windows/service/WslCoreVm.cpp.
Once booted, WslService maintains an hvsocket with the Virtual Machine which it uses to send various commands to Linux processes (see mini_init for more details).
Once the virtual machine is running, WSL distributions can be started by calling WslCoreVm::CreateInstance. Each running distribution is represented by a WslCoreInstance (see src/windows/service/WslCoreInstance.cpp).
Each WslCoreInstance maintains an hvsocket connection to init which allows WslService to perform various tasks such as: