WSL — практическо ръководство

Част 1: Какво е WSL и как работи

Преди години се чудех дали изобщо има смисъл да инсталирам Linux на Windows машина. Днес WSL е едно от първите неща, които настройвам на всеки нов лаптоп. Тук обяснявам какво всъщност е, как работи под капака и как го ползвам всеки ден без да се боря с него.

WSL не е виртуална машина в класическия смисъл. Не стартирам отделен Linux kernel в VirtualBox или Hyper-V с цял диск. Вместо това получавам почти native Linux среда, която седи удобно до Windows и споделя файловата система, мрежата и ресурсите с host-а. Това е причината да го предпочитам пред тежки VM-и за ежедневна работа.

1. Защо изобщо ми трябва WSL?

Работя с Linux сървъри, Docker, Ansible, bash скриптове и всякакви CLI инструменти. Windows PowerShell е мощен, но не е bash. Git Bash е компромис. Пълна виртуална машина е тежка, бавна при I/O и постоянно ми краде RAM.

WSL решава точно този проблем: отварям терминал, пиша ssh, docker, apt, vim или каквото ми трябва, и всичко се държи почти като на истински Linux. А когато ми трябва Excel или браузър с пълна Windows интеграция — те са на един Alt+Tab разстояние.

  • не губя време за dual-boot;
  • не държа постоянно включена тежка VM;
  • мога да редактирам файлове от Windows и да ги изпълнявам в Linux;
  • Docker Desktop работи отлично върху WSL2;
  • получавам native Linux tools без да се отказвам от Windows приложения.

2. WSL1 срещу WSL2 — какво реално използвам

Когато Microsoft пусна първата версия, WSL1 превеждаше Linux system calls към Windows kernel. Беше бърз за някои неща, но имаше сериозни ограничения — особено с Docker, мрежи и файлова система.

WSL2 работи с истински Linux kernel, който Microsoft поддържа и обновява. Той се върти в лека виртуална машина, но интеграцията е толкова добра, че почти не усещам границата.

Windows

host OS

WSL2

lightweight VM

Linux Kernel

Microsoft-managed

От години ползвам само WSL2. WSL1 го оставям само ако имам много специфичен случай с огромно количество малки файлове на Windows файлова система и нужда от максимална скорост на достъп. В 99% от случаите WSL2 е правилният избор.

Практическо правило: ако някой ви каже „инсталирай WSL“, почти сигурно има предвид WSL2. Проверявайте с wsl -l -v.

3. Как го инсталирам на практика

В по-новите Windows версии (Windows 10 2004+ и Windows 11) инсталацията е направена изненадващо проста.

PowerShell (като Administrator)
wsl --install

Тази команда включва необходимите компоненти, сваля WSL2 kernel и по подразбиране инсталира Ubuntu. След рестарт отварям Ubuntu, задавам потребителско име и парола — и готово.

Ако искам да контролирам повече нещата:

По-контролирана инсталация
# Проверявам наличните дистрибуции
wsl --list --online

# Инсталирам конкретна дистрибуция
wsl --install -d Ubuntu-24.04

# Или Debian
wsl --install -d Debian

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

Проверка
wsl -l -v

Очаквам да видя VERSION 2. Ако е 1, конвертирам с:

Конвертиране към WSL2
wsl --set-version Ubuntu-24.04 2

4. Коя дистрибуция избирам

Ubuntu е безопасният избор — най-много документация, най-много готови пакети, най-лесно за Docker и повечето tutorial-и. Аз лично работя предимно с Ubuntu LTS (22.04 или 24.04).

Debian е по-минималистичен и ми харесва, когато искам по-чист старт. Fedora, openSUSE и другите също работят, но рядко ми трябват.

Мога да имам няколко дистрибуции едновременно. Една за ежедневна работа, една „чиста“ за тестове, една по-стара ако трябва да възпроизведа проблем от клиентски сървър.

Моят подход: една основна Ubuntu дистрибуция, която поддържам чиста и обновявам редовно. Всичко останало — временни експерименти, които после изтривам с wsl --unregister.

5. Как работи файловата система — най-важното практическо знание

Това е мястото, където хората най-често се объркват и губят производителност.

От Windows виждам Linux файловете тук:

Windows Explorer / PowerShell
\\wsl$\Ubuntu-24.04\home\fedia

От Linux виждам Windows дисковете тук:

Вътре в WSL
/mnt/c/Users/Fedia
/mnt/d/...

Ключовото правило, което следвам строго:

  • Работните проекти, git репозитории, node_modules, build-ове — винаги вътре в Linux файловата система (~/projects).
  • Windows файловете ползвам само когато трябва да отворя нещо с Windows приложение или да споделя резултат.
Защо? Ако държа проекта на /mnt/c/... и пускам npm install, cargo build или make, производителността пада драстично. Виждал съм build-ове, които отнемат 5–10 пъти повече време само заради това.

6. Основни команди, които ползвам всеки ден

Управление на дистрибуции
# Списък на инсталираните
wsl -l -v

# Стартиране на конкретна дистрибуция
wsl -d Ubuntu-24.04

# Спиране на всички
wsl --shutdown

# Изтриване на дистрибуция (внимание — губи данни)
wsl --unregister Ubuntu-24.04

# Експорт / импорт (за backup или прехвърляне)
wsl --export Ubuntu-24.04 D:\backups\ubuntu.tar
wsl --import Ubuntu-Restored D:\wsl\ubuntu D:\backups\ubuntu.tar

wsl --shutdown е моят приятел. Когато Docker Desktop се държи странно, когато мрежата „зацикли“ или когато искам да освободя RAM — спирам всичко и после стартирам наново.

7. Интеграция с Windows Terminal и VS Code

Използвам Windows Terminal. Добавям профил за всяка дистрибуция и работя удобно с tabs и split panes.

VS Code Remote - WSL е другото нещо, без което вече не мога. Отварям папка от WSL директно в VS Code и получавам пълна Linux среда — extensions, terminal, debugger — без да се занимавам с path проблеми.

От Windows Terminal / PowerShell
# Отварям текущата WSL директория в VS Code
code .

Това работи, защото VS Code автоматично детектира, че съм във WSL и стартира remote session.

8. Docker и WSL2 — най-честата комбинация

Docker Desktop на Windows вече по подразбиране използва WSL2 backend. Това означава, че контейнерите се въртят вътре в Linux, а не през Hyper-V с превод.

Аз почти винаги инсталирам Docker директно в дистрибуцията (не през Docker Desktop), когато искам максимален контрол. Но за повечето хора Docker Desktop + WSL2 е по-удобният вариант.

Важно: ако Docker Desktop е инсталиран, той създава собствени WSL дистрибуции (docker-desktop и docker-desktop-data). Не ги пипам и не ги изтривам.

9. Ресурси — RAM, CPU и диск

WSL2 по подразбиране може да вземе доста ресурси. На машини с 16 GB RAM понякога виждам, че Linux си взема 8–10 GB без да питам.

Създавам файл .wslconfig в потребителската си Windows директория:

C:\Users\Fedia\.wslconfig
[wsl2]
memory=6GB
processors=4
swap=2GB
localhostForwarding=true

След промяна правя wsl --shutdown и после стартирам отново. Това е едно от първите неща, които настройвам на нова машина.

10. Типични проблеми, които срещам и как ги решавам

Проблем Какво правя
WSL не стартира / „The system cannot find the file specified“ wsl --update и после wsl --shutdown
Много бавни git / npm / build операции Проверявам дали проектът е на /mnt/c. Местя го в ~/
Няма интернет вътре в WSL wsl --shutdown, проверка на Windows firewall / VPN, понякога sudo resolvectl flush-caches
Docker не вижда volumes Уверявам се, че работя в WSL2 и че path-овете са Linux-style
Дистрибуцията „изчезна“ след update Рядко, но се случва. Затова правя периодичен wsl --export

11. Какво не правя с WSL

  • Не го ползвам като единствен Linux сървър за production натоварвания.
  • Не държа важни данни само вътре в дистрибуцията без backup (export или rsync).
  • Не инсталирам GUI приложения, освен ако наистина ми трябват (WSLg е хубав, но не е за всичко).
  • Не очаквам 100% идентично поведение с bare-metal Linux — има малки разлики в networking, systemd (в по-новите версии вече има) и hardware достъп.

12. Практически workflow, който следвам

  1. Инсталирам WSL2 + Ubuntu LTS.
  2. Настройвам .wslconfig за разумни лимити на ресурси.
  3. Създавам ~/projects и работя само там.
  4. Инсталирам необходимите инструменти (git, curl, build-essential, Docker ако трябва).
  5. Конфигурирам Windows Terminal и VS Code Remote.
  6. Правя първи wsl --export като „чиста“ точка.
След това забравям, че работя „под Windows“. Терминалът ми е Linux, инструментите са Linux, а Windows остава за браузър, Office и игри.

13. Заключение

WSL не е магия и не е перфектен. Има моменти, в които мрежата се държи странно, в които трябва да рестартирам с wsl --shutdown, в които файловата система ме наказва, ако не внимавам къде държа проектите.

Но за ежедневна работа като разработчик, системен администратор или човек, който просто иска Linux tools без dual-boot — е едно от най-добрите решения, които Microsoft са направили през последните години.

В следващата част ще мина към конкретна настройка: как си подготвям Ubuntu дистрибуцията от нулата — packages, ssh ключове, git, zsh/bash, Docker и всичко, което ми трябва, за да мога да започна реална работа в рамките на 15–20 минути.