Корпорация Microsoft запустила тестирование запуска Linux-приложений с графическим интерфейсом в ОС Windows. Реализовано это на основе подсистемы WSL2 (Windows Subsystem for Linux), которую компания разрабатывает много месяцев. Отмечается, что приложения полностью интегрируются с рабочим столом Windows, включая размещение ярлыков в меню Start, воспроизведение звука, запись с микрофона, аппаратное ускорение OpenGL. Также реализовано отображение информации о ПО в панели задач, между программами можно переключаться по Alt+Tab, данные между приложениями Linux и Windows можно копировать при помощи буфера обмена.

Интерфейс Linux-приложений на основной рабочий стол ОС Windows выводится при помощи композитного менеджера RAIL-Shell. Он использует протокол Wayland и основан на кодовой базе Weston. Вывод реализован посредством бэкенда RDP-RAIL (RDP Remote Application Integrated Locally), который не выполняет отрисовку рабочего стола, а перенаправляет отдельные поверхности по каналу RDP RAIL для отображения на основном рабочем столе Windows. X11-приложения запускаются при помощи XWayland.

Остальные подробности


Компания использует интересный способ вывода звука — при помощи сервера PulseAudio. Сервер взаимодействует с операционной системой посредством протокола RDP (для вывода звука применяется плагин rdp-sink, а для ввода — rdp-source). Этот сервер и XWayland помещены в универсальный мини-дистрибутив WSLGd. В его состав входят компоненты для абстрагирования как графической, так и звуковой подсистем.

Базируется все это на дистрибутиве CBL-Mariner Linux, который Microsoft тоже использует — в своей облачной инфраструктуре. Мини-дистрибутив запускается при помощи механизмов виртуализации. В то же время совместный доступ между гостевым окружением с Linux и хост-системой Windows реализован на базе virtio-fs.

Разработчики выбрали FreeRDP в качестве RDP-сервера, который запускается в Linux-окружении WSLGd. Для той же задачи в ОС Widnows используется mstsc. Обработчик WSLDVCPlugin применяется для определения имеющихся графических Linux-приложений и их отображения в меню Windows. Он позволяет взаимодействовать с дистрибутивами Linux в окружении WLS2 посредством предоставления сокетов, которые обрабатывают запросы по протоколам Wayland, X11 и PulseAudio. Подготовленные для WSLGd обвязки распространяются под лицензией MIT.

Как получить доступ к новым возможностям?


Для этого нужно установить 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, используется иной механизм — виртуальный GPU (vGPU). Драйверы для него предоставляются в трех вариантах — для чипов AMD, Intel и NVIDIA. Работа с графикой выполняется путем предоставления прослойки с реализацией OpenGL поверх DirectX 12. Прослойка оформлена в виде драйвера d3d12, вошедшего в основной состав Mesa 21.0, и развиваемого совместно с компанией Collabora.

В Linux виртуальный GPU реализован на основе устройства /dev/dxg с сервисами, повторяющими WDDM (Windows Display Driver Model) D3DKMT ядра Windows. В этой системе драйвер организует соединение с физическим видеочипом через VM bus. У приложений Linux тот же уровень доступа к GPU, что и у родных приложений для Windows, разделения ресурсов между Windows и Linux нет.

В ходе тестирования производительности системы на базе Surface Book Gen3 с GPU Intel выяснилось, что тест Geeks3D GpuTest показывает 19 FPS в Windows, 18 FPS — в Linux. В Mesa же, при программной отрисовке — всего 1 FPS.

Немного бэкграунда


WSL2 стало доступным для пользователей Windows с 20 августа 2020 года — именно тогда Microsoft выпустила кумулятивное обновление KB4566116.


После его установки пользователи ОС Windows 10 версии 1903 и версии 1909 стали тестировать WSL2, причем отзывы были в большинстве своем положительные. До 20 августа была доступна лишь WSL первой версии, и только в Windows 10 версии 2004.


Что касается первой версии WSL, то работа над ней началась несколько лет назад. Официальное заявление о подсистеме было сделано на конференции Microsoft Build 2016. Анонс был коротким — тогда о возможностях WSL рассказали в течение пары минут. Но он вызвал такой ажиотаж и наплыв трафика на страницу с анонсом, что у организаторов конференции даже возникло подозрение в том, что кто-то организовал DDoS-атаку.

C тех пор WSL эволюционировала очень сильно, и сейчас подсистема продолжает развиваться.