Компанията Microsoft обяви началото на тестовете за възможността за стартиране на Linux приложения с графичен интерфейс в среди на базата на подсистемата WSL2 (Windows Subsystem for Linux), предназначена за стартиране на изпълними файлове на Linux в Windows. Приложенията се интегрират напълно с основния работен плот на Windows, включително се поддържа разполагане на ярликове в менюто Start, възпроизвеждане на звук, запис с микрофон, хардуерно ускорение OpenGL, показване на информация за програмите в лентата на задачите, превключване между програми с Alt-Tab, копиране на данни между Windows и Linux програми чрез клипборда.

За организацията на извеждането на интерфейса на Linux приложенията на основния работен плот на Windows е използван разработения от Microsoft композитен мениджър RAIL-Shell, който използва протокола Wayland и е базиран на кодовата база Weston. Извеждането се осъществява чрез бекенда RDP-RAIL (RDP Remote Application Integrated Locally), който се отличава от преди достъпния в Weston бекенд RDP с това, че композитният мениджър не изпълнява самото рисуване на работния плот, а пренасочва отделни повърхности (wl_surface) по канала RDP RAIL за показване на основния работен плот на Windows. За стартиране на X11 приложения се използва XWayland.

Извеждането на звука е организирано с използването на сървър PulseAudio, който също взаимодействува с Windows чрез протокола RDP (за извеждане на звука се използва плъгин rdp-sink, а за въвеждане — rdp-source). Композитният сървър, XWayland и PulseAudio са опаковани под формата на универсален мини-дистрибутив WSLGd, включващ компоненти за абстракция на графичната и звуковата подсистема, и базиран на дистрибутива CBL-Mariner Linux, който също се използва в облачната инфраструктура на Microsoft. WSLGd се стартира с използването на механизми за виртуализация, а за съвместен достъп между гостоприемната среда с Linux и хост системата Windows се използва virtio-fs.
Като RDP-сървър, стартирано в Linux-среда WSLGd, се използва FreeRDP, а от страна на Windows RDP клиентът е mstsc. За идентифициране на наличните графични Linux приложения и тяхното визуализиране в менюто на Windows е подготвен обработчик WSLDVCPlugin. С инсталираните в средата WSL2 обикновени дистрибуции на Linux, като Ubuntu, Debian и CentOS, наборът от компоненти, работещ в WSLGd, взаимодейства чрез предоставяне на сокети, които обработват заявки по протоколите Wayland, X11 и PulseAudio. Подготовените за WSLGd обвивки се разпространяват под лиценз MIT.
За инсталиране на WSLGd е необходима Windows 10 Insider Preview поне версия 21362. По-късно възможността за инсталиране на WSLGd ще бъде предоставена и за обикновени издания на Windows, без необходимост от участие в програмата Insider Preview. Инсталирането на WSLGd се извършва с типичната команда „wsl —install“, например за Ubuntu — „wsl —install -d Ubuntu“. За съществуващи среди WSL2, инсталирането на WSLGd се извършва чрез команда „wsl —update“ (подкрепят се само среди WSL2, в които се използва ядро Linux, а не транслация на повиквания). Графичните приложения се инсталират чрез стандартния пакетен мениджър на дистрибуцията.
WSLGd предоставя само механизми за изход на 2D графика, а за ускорение на 3D графика на база OpenGL в инсталираните в WSL2 дистрибуции се предлага използването на виртуален GPU (vGPU). Драйверите vGPU за WSL са предоставени за чипове AMD, Intel и NVIDIA. Ускорението на графиката се осигурява чрез предоставяне на слой с реализация на OpenGL върху DirectX 12. Слоят е оформен под формата на драйвер d3d12, включен в основния състав на Mesa 21.0, и се развива съвместно с компанията Collabora.
Работата на виртуалния GPU се реализира в Linux с помощта на устройството /dev/dxg, с услуги, които повтарят WDDM (Windows Display Driver Model) D3DKMT на ядрото на Windows. Драйверът организира свързването с физическия GPU чрез VM bus. Linux приложенията имат същото ниво на достъп до GPU, каквото имат и родните приложения за Windows, без използване на разделение на ресурси между Windows и Linux. Тестовете за производителност на устройството Surface Book Gen3 с GPU Intel показаха, че в родната Win32 среда тестът Geeks3D GpuTest демонстрира 19 FPS, в Linux среда с vGPU — 18 FPS, а при софтуерно рендериране в Mesa — 1 FPS.

Източник: opennet.ru
