При запуске 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 иногда оказывается быстрее.
Сравнительная таблица подсистем
| Критерий | WSL1 | WSL2 |
|---|---|---|
| Ядро Linux | Нет, трансляция вызовов | Полноценное ядро в VM |
| Скорость файловых операций в Linux-ФС | Умеренная | Высокая |
| Доступ к файлам Windows | Быстрый | Медленнее |
| Запуск Docker | Не поддерживается нативно | Поддерживается |
| Потребление памяти | Минимальное | Выше, зависит от нагрузки |
Главное правило: держите файлы проекта внутри файловой системы Linux, а не на смонтированном диске Windows — это устраняет основную причину медленной работы WSL2 и снимает большую часть претензий к производительности.
Как установить и переключить версию подсистемы
Установка выполняется из PowerShell с правами администратора. Базовая команда устанавливает подсистему с дистрибутивом по умолчанию:
wsl --install
После установки проверьте версию конкретного дистрибутива и при необходимости переключите её:
wsl --list --verbose
wsl --set-version Ubuntu 2
Вместо Ubuntu укажите имя вашего дистрибутива из вывода первой команды. Конвертация занимает некоторое время и зависит от объёма данных внутри окружения.
☑️ Проверка перед переключением на WSL2
⚠️ Внимание: конвертация дистрибутива из 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$ в проводнике или изнутри самого окружения.