При запуске Linux-окружения в Windows пользователь сталкивается с выбором между двумя подсистемами — WSL1 и WSL2, и неверный выбор напрямую влияет на скорость сборки проектов, работу Docker и совместимость с сетевыми инструментами. Разница между ними принципиальна: первая транслирует системные вызовы Linux в вызовы Windows, вторая использует полноценное ядро Linux внутри лёгкой виртуальной машины.

Однозначного ответа «какая подсистема лучше» не существует — выбор зависит от задач. Для веб-разработки и контейнеров обычно выигрывает WSL2, а для сценариев, где нужен быстрый доступ к файлам Windows из Linux-окружения, иногда удобнее WSL1. Ниже разберём критерии выбора, настройку и типичные ошибки.

Чем WSL1 отличается от WSL2

WSL1 — это слой совместимости: ядра Linux как такового нет, а вызовы транслируются в Windows-окружение. За счёт этого подсистема запускается почти мгновенно и не потребляет заметных ресурсов в простое.

WSL2 работает иначе. Внутри используется настоящее ядро Linux, запущенное в служебной виртуальной машине на базе Hyper-V. Это даёт полную совместимость системных вызовов, что критично для Docker, systemd-сервисов и низкоуровневых сетевых утилит.

  • 🚀 Скорость работы с файловой системой Linux выше у WSL2
  • 📁 Доступ к файлам Windows (/mnt/c) быстрее у WSL1
  • 🐳 Поддержка Docker и полной совместимости — только у WSL2
  • 💾 Потребление памяти ниже у WSL1

Когда какую подсистему выбрать

Если вам нужно собирать проекты, запускать контейнеры или работать с инструментами вроде iptables — выбирайте WSL2. Полное ядро устраняет целый класс ошибок совместимости, которые в WSL1 проявляются как странные сбои сетевых утилит и отказ запуска отдельных демонов.

Обратная ситуация — скрипты, которые интенсивно читают и пишут файлы на диске Windows. В WSL2 обращение к /mnt/c идёт через сетевой протокол внутри виртуальной машины, и операции с тысячами мелких файлов могут заметно тормозить. Здесь WSL1 иногда оказывается быстрее.

📊 Какую подсистему вы используете для разработки?
WSL2 — контейнеры и полная совместимость
WSL1 — быстрый доступ к файлам Windows
Обе, в зависимости от задачи
Пока не использую WSL

Сравнительная таблица подсистем

КритерийWSL1WSL2
Ядро LinuxНет, трансляция вызововПолноценное ядро в VM
Скорость файловых операций в Linux-ФСУмереннаяВысокая
Доступ к файлам WindowsБыстрыйМедленнее
Запуск DockerНе поддерживается нативноПоддерживается
Потребление памятиМинимальноеВыше, зависит от нагрузки

Главное правило: держите файлы проекта внутри файловой системы Linux, а не на смонтированном диске Windows — это устраняет основную причину медленной работы WSL2 и снимает большую часть претензий к производительности.

Как установить и переключить версию подсистемы

Установка выполняется из PowerShell с правами администратора. Базовая команда устанавливает подсистему с дистрибутивом по умолчанию:

wsl --install

После установки проверьте версию конкретного дистрибутива и при необходимости переключите её:

wsl --list --verbose

wsl --set-version Ubuntu 2

Вместо Ubuntu укажите имя вашего дистрибутива из вывода первой команды. Конвертация занимает некоторое время и зависит от объёма данных внутри окружения.

☑️ Проверка перед переключением на WSL2

Выполнено: 0 / 4

⚠️ Внимание: конвертация дистрибутива из WSL1 в WSL2 меняет сетевую модель — у окружения появится отдельный виртуальный сетевой адаптер. Если у вас настроены правила файрвола или проброс портов под старую схему, их потребуется перенастроить.

Типичные проблемы и их диагностика

Частая жалоба — WSL2 «съедает» всю оперативную память. Подсистема динамически выделяет память и не всегда сразу возвращает её Windows. Ограничить потребление можно через файл .wslconfig в домашней папке пользователя, указав параметр memory в секции [wsl2]. Точный синтаксис и поддерживаемые ключи зависят от версии Windows, поэтому сверяйтесь с официальной документацией Microsoft.

Вторая типичная ситуация — недоступность сети внутри дистрибутива после перехода на WSL2. Возможная причина — конфликт виртуального коммутатора Hyper-V с VPN-клиентом или корпоративным прокси. Проверьте, работает ли сеть без VPN, и посмотрите настройки DNS внутри окружения.

Почему localhost в WSL2 ведёт себя иначе

В WSL2 окружение имеет собственный IP-адрес, отличный от адреса Windows. В свежих версиях Windows предусмотрена функция зеркалирования localhost, но её поведение зависит от версии ОС и настроек. Если сервис внутри WSL недоступен из браузера Windows, проверьте, на каком интерфейсе он слушает — адрес 127.0.0.1 внутри Linux ограничит доступ извне.

⚠️ Внимание: не храните единственную копию проекта только внутри файловой системы WSL-дистрибутива. При удалении или перерегистрации дистрибутива данные внутри него удаляются. Используйте Git-репозиторий или регулярное резервное копирование.

💡

Команда wsl --shutdown полностью останавливает подсистему и освобождает память — полезно, если WSL2 начал тормозить после долгой сессии.

Альтернативы: когда WSL вообще не нужен

Иногда вопрос «какая подсистема лучше» решается отказом от подсистемы. Если требуется изолированная среда с графическим интерфейсом или специфическим ядром, полноценная виртуальная машина (VirtualBox, VMware) даст больше контроля. Для запуска отдельных Linux-приложений достаточно контейнера в Docker Desktop, который, кстати, сам использует WSL2 как бэкенд.

  • 🖥️ Нужен графический рабочий стол Linux — рассмотрите виртуальную машину
  • 📦 Нужен один сервис в изоляции — хватит Docker-контейнера
  • ⚙️ Нужна максимальная производительность — нативная установка Linux второй системой
💡

Для большинства задач разработки в 2020-х оптимален WSL2 с файлами проекта внутри Linux-ФС; WSL1 оставьте для сценариев с интенсивным обменом файлами с Windows.

Частые вопросы

Можно ли держать одновременно WSL1 и WSL2?

Да. Версия задаётся для каждого дистрибутива отдельно командой wsl --set-version. Можно иметь несколько дистрибутивов с разными версиями подсистемы и переключаться между ними.

Почему Docker не запускается в WSL1?

Docker-демону требуется полноценное ядро Linux с поддержкой соответствующих системных вызовов. WSL1 лишь транслирует вызовы, поэтому нативный запуск демона невозможен. Используйте WSL2 или Docker Desktop.

Как вернуть дистрибутив с WSL2 обратно на WSL1?

Той же командой wsl --set-version ИмяДистрибутива 1. Перед конвертацией сделайте резервную копию важных данных — процесс обычно проходит штатно, но подстраховка не помешает.

Влияет ли WSL2 на работу других виртуальных машин?

WSL2 использует платформу Hyper-V. Старые версии некоторых гипервизоров конфликтовали с ней, современные выпуски VirtualBox и VMware умеют работать поверх Hyper-V, но производительность виртуальных машин может снижаться. Проверяйте документацию конкретной версии вашего гипервизора.

Где физически хранятся файлы дистрибутива WSL2?

Данные хранятся в виртуальном диске формата VHDX в профиле пользователя Windows. Напрямую править файлы внутри VHDX из Windows не следует — обращайтесь к ним через путь \\wsl$ в проводнике или изнутри самого окружения.