Negli ultimi anni, Microsoft ha compiuto un cambio di rotta significativo nei confronti del mondo open source ed uno degli strumenti più emblematici di questa trasformazione è WSL (Windows Subsystem for Linux), una funzionalità integrata in Windows che consente di eseguire un ambiente Linux direttamente all’interno del sistema operativo Microsoft, senza ricorrere a macchine virtuali o dual boot.
Cos’è WSL
WSL (Windows Subsystem for Linux) è un sottosistema sviluppato da Microsoft che permette di eseguire binari Linux nativi su Windows. In termini pratici, significa poter aprire un terminale Bash, eseguire script shell, usare strumenti come grep, awk, curl, git e persino compilare ed eseguire applicazioni Linux, il tutto senza uscire dall’ambiente Windows.
Esistono due versioni principali:
- WSL 1: traduce le chiamate di sistema Linux in chiamate Windows tramite un layer di compatibilità, più leggero ma con alcune limitazioni di compatibilità
- WSL 2: Introduce un vero kernel Linux in esecuzione su una macchina virtuale (Hyper-V). Garantisce compatibilità completa con le syscall Linux, prestazioni I/O nettamente superiori e supporto a Docker nativo
Per la maggior parte degli utilizzi odierni, WSL 2 è la scelta raccomandata.
Perché usare WSL
WSL è diventato uno strumento fondamentale per diverse categorie di utenti:
- Sviluppatori web e backend che lavorano con stack Linux (Node.js, Python, Ruby, PHP) e necessitano di un ambiente coerente con i server di produzione
- DevOps e SysAdmin che devono gestire script Bash, strumenti come ansible, terraform o kubectl direttamente da Windows
- Data Scientist che utilizzano librerie Python o R ottimizzate per ambienti Linux
- Studenti e appassionati che vogliono imparare Linux senza abbandonare Windows
Rispetto alle alternative tradizionali, WSL offre vantaggi concreti. Il dual boot garantisce prestazioni native, ma risulta scomodo da gestire nella pratica quotidiana. Le macchine virtuali offrono un isolamento completo dell’ambiente, ma comportano un consumo significativo di risorse hardware. WSL 2, invece, combina leggerezza, integrazione nativa con Windows e prestazioni elevate, rappresentando nella maggior parte dei casi la soluzione più equilibrata.
Installazione
Su Windows 10 (build 19041 e successive) e Windows 11, l’installazione è un singolo comando eseguito in PowerShell con privilegi di amministratore:
wsl --install
# Output atteso
Download in corso: Sottosistema Windows per Linux 2.7.8
Installazione in corso: Sottosistema Windows per Linux 2.7.8
Sottosistema Windows per Linux 2.7.8 è stato installato.
Installazione del componente facoltativo di Windows: VirtualMachinePlatform
Strumento Gestione e manutenzione immagini distribuzione
Versione: 10.0.26100.8521
Versione immagine: 10.0.26200.8655
Attivazione funzionalità
[==========================100.0%==========================]
Operazione completata.
L'operazione richiesta è stata eseguita. Le modifiche avranno effetto al riavvio del sistema.Il comando abilita il componente WSL e attiva la piattaforma di virtualizzazione necessaria per WSL 2. Al termine viene richiesto un riavvio e successivamente possiamo verificarne lo stato con
wsl --list --verbose
# Output atteso
sottosistema Windows per Linux non ha distribuzioni installate.
Per risolvere il problema, installare una distribuzione con le istruzioni seguenti:
Usare 'wsl.exe --list --online' per elencare le distribuzioni disponibili
e 'wsl.exe --install <Distro>' per l'installazione.Se non risulta nessuna distribuzione installata, possiamo verificare le distribuzioni disponibili con il comando
wsl --list --online
# Output atteso
Di seguito è riportato un elenco di distribuzioni valide che è possibile installare.
Installare con 'wsl.exe --install <Distro>'.
NAME FRIENDLY NAME
Ubuntu Ubuntu
Ubuntu-26.04 Ubuntu 26.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
openSUSE-Tumbleweed openSUSE Tumbleweed
openSUSE-Leap-16.0 openSUSE Leap 16.0
SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7
SUSE-Linux-Enterprise-16.0 SUSE Linux Enterprise 16.0
kali-linux Kali Linux Rolling
Debian Debian GNU/Linux
AlmaLinux-8 AlmaLinux OS 8
AlmaLinux-9 AlmaLinux OS 9
AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10
AlmaLinux-10 AlmaLinux OS 10
archlinux Arch Linux
FedoraLinux-44 Fedora Linux 44
FedoraLinux-43 Fedora Linux 43
eLxr eLxr 12.12.0.0 GNU/Linux
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_10 Oracle Linux 8.10
OracleLinux_9_5 Oracle Linux 9.5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6Scelta la distribuzione che si vuole utilizzare è sufficiente digitare il comando passando il valore della colonna “NAME” corrispondente. Supponendo di vole installare Kali Linux il comando è
wsl --install -d kali-linux
# Output atteso
Download in corso: Kali Linux Rolling
Installazione: Kali Linux Rolling
Installazione della distribuzione completata. Può essere avviato tramite 'wsl.exe -d kali-linux'
Avvio di kali-linux in corso...
Waiting for systemd to start...
running
Please create a default Kali WSL user. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: carlo
New password:
Retype new password:
passwd: password updated successfully
usermod: no changes
┌──(carlo㉿PCWIN001)-[/mnt/c/Users/carlo]Al primo avvio della distribuzione, viene richiesto di creare un nome utente e una password per l’account Linux, indipendenti dalle credenziali Windows.
Gestione delle distribuzioni
Completata l’installazione è possibile gestire le distribuzioni WSL dal terminale. Il comando wsl –list –verbose mostra lo stato di tutte le distribuzioni installate con la versione WSL associata e indica quelle attualmente in esecuzione
wsl --list --verbose
# Output atteso
NAME STATE VERSION
* kali-linux Running 2Per avviare una distribuzione specifica o impostarne una come predefinita (utile per eseguire wsl senza argomenti) possiamo usare i comandi seguenti
# Avvio di una distribuzione
wsl -d kali-linux
# Imposta la distribuzione come predefinita
wsl --set-default kali-linuxSe si vuole fermare tutte le istanze in esecuzione e la macchina virtuale sottostante, utile per liberare memoria o applicare modifiche alla configurazione
wsl --shutdownSe invece si vuole spegnere solo una distribuzione
wsl --terminate kali-linuxDopo aver installato la distribuzione scelta è buona pratica effettuare l’aggiornamento del sistema. Per Kali Linux il comando è
sudo apt update && sudo apt full-upgrade -yInfine, le distribuzioni possono essere esportate come archivi tar per backup o migrazione su un altro PC, e reimportate in seguito
wsl --export kali-linux C:\backup\kali-linux.tar
wsl --import kali-linux C:\WSL\kali-linux C:\backup\kali-linux.tarNavigare nel filesystem
In WSL è possibile accedere ai file di Windows attraverso il percorso /mnt/
ls -lha /mnt/c/"Program Files"/Viceversa, da Windows Explorer è possibile accedere ai file Linux digitando nella barra degli indirizzi
\\wsl$\kali-linuxPer ottenere le migliori prestazioni, conviene lavorare sui file all’interno del filesystem Linux in quanto le operazioni I/O attraverso il mount /mnt/c/ incrociano due filesystem e risultano significativamente più lente.
Gestione della rete
WSL 2 dispone di un proprio indirizzo IP, separato da quello del PC Windows ed i due ambienti si trovano su una rete virtuale interna gestita tramite un’interfaccia Hyper-V. Verso l’esterno, WSL 2 si presenta con l’indirizzo IP del PC Windows grazie al NAT
WSL 2 (172.20.10.100) → NAT → Windows (192.168.0.100) → DestinazioneQuesto aspetto ha implicazioni pratiche rilevanti. Le regole firewall sui server remoti vanno configurate con l’IP Windows, e i log di accesso registreranno sempre l’IP del PC Windows, non quello interno di WSL.
Per recuperare l’indirizzo IP assegnato ad una distribuzione WSL
ip addr show eth0 | grep "inet "Il comando può variare in base alla distribuzione linux scelta.
Chiamare comandi Linux da PowerShell
Una delle funzionalità più distintive di WSL è la possibilità di richiamare comandi Linux direttamente da una sessione PowerShell, senza aprire un terminale separato. Il prefisso wsl passa il comando alla distribuzione predefinita e restituisce l’output in PowerShell e la directory di lavoro corrente in Windows viene automaticamente mappata al percorso equivalente in WSL.
# Cercare una stringa ricorsivamente nei file della cartella corrente
wsl grep -r "Error" .
# Usare awk per estrarre una colonna da un file di testo
wsl awk '{print $2}' report.txt
# Visualizzare i file ordinati per dimensione
wsl ls -lhS /mnt/c/Windows/È possibile anche costruire pipeline che attraversano i due ambienti: PowerShell produce l’output e WSL lo elabora con strumenti Linux, o viceversa.
# Filtrare l'output di un comando PowerShell con grep
Get-Content C:\log\app.log | wsl grep -i "ERROR"
# Contare le occorrenze con sort e uniq
Get-Content C:\log\app.log | wsl grep "Error" | wsl sort | wsl uniq -cQuesto approccio è utile in contesti dove si vuole sfruttare la potenza degli strumenti Unix su file e output Windows senza abbandonare PowerShell come shell principale.
Eseguire servizi locali in WSL
WSL 2 espone automaticamente le porte aperte dai servizi Linux su localhost di Windows. Un server avviato in WSL è immediatamente raggiungibile dal browser Windows, da Postman o da qualsiasi altro client senza configurazioni aggiuntive.
Questo rende WSL un ambiente di sviluppo locale completo: invece di installare nginx, PostgreSQL o Node.js direttamente su Windows, si installano nella distribuzione Linux e si accede ai servizi da Windows come se fossero in esecuzione localmente.
# Avviare un server web nginx in WSL
sudo apt install nginx
sudo service nginx startAprendo http://localhost nel browser Windows si vedrà la pagina di benvenuto di nginx servita da WSL. Lo stesso vale per qualsiasi altra porta
# Avviare un server Python sulla porta 8080
python3 -m http.server 8080
# Output atteso
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
127.0.0.1 - - [21/Jun/2026 13:22:27] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [21/Jun/2026 13:22:32] "GET /Test.txt HTTP/1.1" 200 -In questo caso il servizio è raggiungibile da Windows all’indirizzo http://localhost:8080. Il forwarding automatico delle porte è gestito da WSL 2 tramite l’interfaccia virtuale Hyper-V e non richiede nessuna configurazione manuale.