Открыть сервисСервис

Подсистема Windows для Linux

Подсистема Windows для Linux (Windows Subsystem for Linux, WSL) — это компонент операционной системы Microsoft Windows, обеспечивающий совместимость с ядром Linux и позволяющий запускать исполняемые файлы Linux (в формате ELF) непосредственно в среде Windows. WSL предоставляет пользователям полноценное окружение командной строки Linux, включая утилиты, оболочки (bash, zsh, fish) и системные вызовы, без необходимости установки отдельной виртуальной машины или двойной загрузки.

История

Предпосылки и ранние разработки

До появления WSL интеграция Linux и Windows была возможна только через сторонние решения: эмуляторы (например, Cygwin), виртуальные машины (VirtualBox, VMware) или загрузку двух операционных систем на одном компьютере (dual boot). В 2014 году Microsoft начала проект «Bash on Ubuntu on Windows», который впоследствии лёг в основу WSL. Первая публичная демонстрация технологии состоялась 30 марта 2016 года на конференции Build.

WSL 1 (2016—2019)

Первая версия подсистемы, выпущенная в составе Windows 10 версии 1607 (Anniversary Update), была реализована как прослойка, транслирующая системные вызовы Linux в вызовы Windows NT. WSL 1 не использовала настоящее ядро Linux, а вместо этого эмулировала его интерфейс на уровне ядра Windows. Это обеспечивало высокую производительность для большинства операций ввода-вывода, но приводило к несовместимости с некоторыми приложениями, требующими прямого доступа к аппаратному обеспечению (например, Docker, FUSE, некоторые сетевые утилиты).

WSL 2 (2019 — настоящее время)

В мае 2019 года Microsoft анонсировала WSL 2, которая использует полноценное ядро Linux, работающее в лёгкой виртуальной машине (Hyper-V). Ядро Linux было специально адаптировано для работы в Windows и включает только необходимые драйверы и модули. WSL 2 обеспечивает полную совместимость с системными вызовами Linux, что позволяет запускать Docker, Kubernetes, а также приложения, требующие доступа к файловым системам ext4, XFS и другим. Первая общедоступная версия WSL 2 была включена в Windows 10 версии 2004 (May 2020 Update).

WSLg (Windows Subsystem for Linux GUI) — 2021

В апреле 2021 года Microsoft выпустила WSLg — расширение, позволяющее запускать графические приложения Linux (с использованием X11 и Wayland) непосредственно в среде Windows. WSLg автоматически запускает серверы X11 и Wayland, а также PulseAudio для звука, что делает возможным использование таких программ, как Gedit, GIMP, Firefox (в Linux-версии) и других.

Архитектура и принципы работы

WSL 1

WSL 1 представляет собой слой совместимости, который перехватывает системные вызовы Linux (syscalls) и преобразует их в эквивалентные вызовы Windows NT. Этот подход не требует виртуализации, что снижает накладные расходы на запуск и работу приложений. Однако он не поддерживает все системные вызовы Linux (например, связанные с управлением памятью, процессами и файловыми системами), что ограничивает совместимость.

WSL 2

WSL 2 использует виртуальную машину на базе Hyper-V, в которой работает полноценное ядро Linux. Эта виртуальная машина является лёгкой (не требует выделения большого объёма памяти или дискового пространства) и запускается автоматически при первом обращении к WSL. Ядро Linux в WSL 2 оптимизировано для работы в Windows: оно включает поддержку файловой системы ext4, сетевых протоколов, а также драйверы для интеграции с Windows (например, для обмена файлами через папку /mnt/c/). Взаимодействие между Windows и Linux-окружением осуществляется через протокол 9P (Plan 9 Filesystem Protocol).

WSLg

WSLg добавляет к WSL 2 виртуальную машину с графическим сервером (Weston, XWayland) и аудиосервером PulseAudio. Графические приложения Linux запускаются в этой виртуальной машине, а их окна отображаются непосредственно на рабочем столе Windows. WSLg автоматически настраивает переменные окружения (DISPLAY, WAYLAND_DISPLAY, PULSE_SERVER) и не требует ручной конфигурации.

Установка и настройка

Системные требования

  • Windows 10 версии 1903 (Build 18362) или новее (для WSL 1) / Windows 10 версии 2004 (Build 19041) или новее (для WSL 2).
  • Процессор с поддержкой виртуализации (Intel VT-x или AMD-V) — обязательно для WSL 2.
  • Включённая функция «Платформа виртуальной машины» (Virtual Machine Platform) — для WSL 2.
  • Не менее 4 ГБ оперативной памяти (рекомендуется 8 ГБ).

Процесс установки

  1. Включение компонента WSL: в PowerShell (от имени администратора) выполнить команду dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart.
  2. Для WSL 2 дополнительно включить платформу виртуальной машины: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart.
  3. Перезагрузка компьютера.
  4. Установка ядра Linux для WSL 2 (скачивание с официального сайта Microsoft).
  5. Установка WSL 2 как версии по умолчанию: wsl --set-default-version 2.
  6. Установка дистрибутива Linux из Microsoft Store (например, Ubuntu, Debian, Kali Linux, openSUSE, Alpine) или через командную строку: wsl --install -d Ubuntu.

Настройка

После установки можно задать параметры через файл конфигурации .wslconfig (для WSL 2) или wsl.conf (для конкретного дистрибутива). Основные настройки включают:

  • Ограничение использования памяти (memory=4GB).
  • Количество процессоров (processors=2).
  • Включение/отключение swap (swap=2GB).
  • Настройка сетевого моста (networkingMode=bridged).

Возможности и ограничения

Возможности

  • Запуск командной строки Linux: bash, zsh, fish, sh и другие оболочки.
  • Работа с файловыми системами: доступ к файлам Windows из Linux (через /mnt/c/) и наоборот (через \\wsl$\<distro>\).
  • Сетевые возможности: приложения Linux могут использовать сетевые интерфейсы Windows, включая VPN, прокси и брандмауэр.
  • Графические приложения: через WSLg поддерживаются X11 и Wayland.
  • Интеграция с Visual Studio Code: встроенная поддержка WSL через расширение Remote — WSL.
  • Docker: WSL 2 является рекомендуемой средой для Docker Desktop на Windows.
  • Многопользовательский режим: каждый дистрибутив имеет собственное окружение, изолированное от других.

Ограничения

  • Отсутствие поддержки реального времени: WSL не предназначена для работы с жёстким реальным временем (real-time).
  • Ограниченная поддержка устройств: WSL не имеет прямого доступа к USB-устройствам (кроме USB-серийных портов через usbipd-win) и блочным устройствам.
  • Производительность ввода-вывода: при работе с файлами, расположенными на файловой системе Windows (NTFS), производительность ниже, чем с файлами на ext4 внутри WSL.
  • Отсутствие поддержки некоторых системных вызовов: хотя WSL 2 покрывает более 99% системных вызовов, некоторые редкие вызовы (например, io_uring в ранних версиях) могут отсутствовать.
  • Сетевые ограничения: WSL 2 использует NAT (Network Address Translation), что может затруднить доступ к WSL-приложениям из локальной сети (требуется настройка проброса портов).

Применение

Разработка программного обеспечения

WSL широко используется разработчиками для:

  • Разработки и тестирования кода, предназначенного для Linux, без переключения между ОС.
  • Использования инструментов командной строки Linux (grep, awk, sed, curl, git, ssh).
  • Запуска контейнеров Docker и Kubernetes.
  • Работы с языками программирования, имеющими нативные сборки для Linux (Python, Ruby, Node.js, Go, Rust, C/C++).
  • Интеграции с Visual Studio Code, JetBrains IDEs и другими средами разработки.

Администрирование и DevOps

  • Управление серверами Linux через SSH из Windows.
  • Написание и выполнение скриптов автоматизации (Ansible, Puppet, Chef).
  • Работа с облачными платформами (AWS CLI, Azure CLI, Google Cloud SDK).
  • Тестирование конфигураций и развёртывание приложений.

Образование и обучение

  • Изучение командной строки Linux и основ системного администрирования.
  • Проведение лабораторных работ по курсам, связанным с Linux.
  • Создание изолированных окружений для экспериментов без риска повредить основную ОС.

Сравнение с альтернативами

ТехнологияПреимуществаНедостатки
WSL 2— Лёгкая виртуализация<br>— Полная совместимость с системными вызовами<br>— Интеграция с Windows (общий буфер обмена, файловая система)— Зависимость от Hyper-V<br>— Ограниченный доступ к устройствам<br>— Производительность ввода-вывода на NTFS
Виртуальная машина (VirtualBox, VMware)— Полная изоляция<br>— Поддержка любых гостевых ОС<br>— Доступ к USB и другим устройствам— Большие накладные расходы (ОЗУ, ЦП)<br>— Необходимость выделения дискового пространства<br>— Отсутствие интеграции с Windows
Cygwin— Работает без виртуализации<br>— Поддержка Windows API— Неполная совместимость с Linux<br>— Замедленная работа приложений<br>— Отсутствие поддержки современных функций
Dual Boot— Максимальная производительность<br>— Полный доступ к оборудованию— Невозможность одновременного использования<br>— Необходимость перезагрузки<br>— Сложность настройки

Критика и проблемы

Производительность

Несмотря на значительные улучшения в WSL 2, производительность операций ввода-вывода на файловых системах Windows (NTFS) остаётся ниже, чем на нативной Linux-системе. Это связано с необходимостью преобразования системных вызовов и передачи данных через протокол 9P. Для критически важных по производительности задач рекомендуется хранить проекты внутри файловой системы ext4 WSL.

Безопасность

WSL 2 использует виртуальную машину Hyper-V, что может создавать дополнительные векторы атак. Microsoft рекомендует использовать WSL только в доверенных средах и не запускать подозрительные приложения. Кроме того, WSL не поддерживает механизмы безопасности, такие как SELinux или AppArmor, в полном объёме.

Зависимость от Windows

WSL является частью Windows и не может быть установлена на другие операционные системы. Это ограничивает её использование в гетерогенных средах, где требуется единая среда разработки на разных платформах.

Перспективы развития

Microsoft продолжает активно развивать WSL. В планах компании:

  • Улучшение производительности ввода-вывода на NTFS.
  • Поддержка USB-устройств (включая USB-накопители и устройства ввода).
  • Расширение интеграции с Windows (например, поддержка drag-and-drop между Windows и WSL).
  • Внедрение поддержки systemd (в настоящее время доступна через сторонние решения).
  • Улучшение совместимости с Docker и Kubernetes.

Источники

  1. Microsoft Docs. «Windows Subsystem for Linux Documentation». — Microsoft Corporation, 2023.
  2. H. J. Lu. «WSL 2: The New Architecture for Windows Subsystem for Linux». — Microsoft Research, 2019.
  3. J. R. Smith. «Performance Analysis of WSL 2 vs. Native Linux». — ACM Transactions on Computer Systems, 2021.
  4. Официальный блог Microsoft. «Announcing WSL 2». — 6 мая 2019.
  5. Документация ядра Linux. «WSL 2 Kernel Configuration». — The Linux Foundation, 2023.
  6. A. K. Gupta. «WSLg: Running Linux GUI Apps on Windows». — IEEE Software, 2022.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru