
WSL, Docker, Linux e macchine virtuali… Sembra un mondo complesso per chi lavora a progetti di sviluppo Windows. Molti sviluppatori sentono parlare benissimo di… Sottosistema Windows per LinuxMa quando si siedono al PC, non hanno ben chiaro quale problema reale risolverà, quali rischi comporta o come ripulire tutto in seguito.
In questo articolo esamineremo più da vicino cos'è la WSL, a cosa serve oltre l'ovvio e soprattutto, Come utilizzarlo in modo da "ingombrare" il meno possibile l'installazione di Windows.Vedremo anche quando potrebbe interessarti invertire la situazione e utilizzare Linux come sistema principale, lasciando Windows in una macchina virtuale.
Cos'è esattamente la WSL e perché se ne parla così tanto?
WSL sta per Sottosistema Windows per Linux, il sottosistema Windows per l'esecuzione di distribuzioni Linux Integrato in Windows 10 e 11. L'idea di Microsoft è semplice: offrire un ambiente Linux "reale" senza obbligare l'utente a utilizzare il dual boot o a configurare una classica macchina virtuale con VirtualBox o VMware.
In pratica, con WSL puoi avere una distribuzione come Ubuntu, Debian o Kali in esecuzione insieme a Windows, condividere file tra entrambi i sistemi e avviare i tipici strumenti Linux (bash, ssh, apt, Python, Node, Docker...) senza mai abbandonare la tua postazione di lavoro abituale. Il tutto con un elevato grado di integrazione con il sistema host.
Dal suo lancio, WSL ha generato opinioni fortemente polarizzate. Alcuni sviluppatori lo considerano un successo assoluto e un motivo valido per continuare a usare Windows. Altri, soprattutto dalla comunità Linux più purista, lo vedono come una manovra di "Adotta-estingue" per mantenere l'egemonia di Microsoft nel settore dei desktopAl di là delle controversie, la realtà è che WSL ha cambiato il modo di lavorare di molti sviluppatori.
La versione attualmente consigliata è WSL 2Non si tratta più solo di un livello di compatibilità; utilizza una macchina virtuale leggera con un vero kernel Linux. Microsoft insiste sul fatto che "non è una VM tradizionale" perché la crea, configura e ottimizza per l'utente, ma alla base c'è la virtualizzazione con tecnologie come Hyper-V.
WSL 1 vs WSL 2 e requisiti da tenere a mente
Oggi è importante capire la differenza tra WSL 1 e WSL 2. Soprattutto per quanto riguarda le questioni di prestazioni, compatibilità e requisiti hardwareWSL 1 eseguiva una traduzione delle chiamate di sistema di Linux in Windows; funzionava bene per molte cose, ma falliva in termini di compatibilità con strumenti più avanzati.
Con WSL 2, Microsoft cambia approccio: Esegue un kernel Linux completo all'interno di una macchina virtuale altamente ottimizzata.Ciò migliora notevolmente la compatibilità (Docker, file system Linux standard, ecc.) e la maggior parte dei software che funzionano su un sistema Linux "reale" funzionano anche all'interno di WSL 2.
Lo svantaggio è che WSL 2 ha più dipendenze. Richiede il supporto per la virtualizzazione della CPU e SLAT (Second Level Address Translation).Questa funzionalità è presente nei processori relativamente moderni (Intel Nehalem e successivi, AMD Opteron e successori). Le CPU più vecchie, come alcuni processori Core 2 Duo, semplicemente non saranno in grado di utilizzare WSL 2, nemmeno abilitando tutte le funzionalità.
Inoltre, per utilizzare WSL 2 è necessaria una versione di Windows sufficientemente recente: Windows 10 1903 (build 18362) o superiore, oppure Windows 11Nei sistemi più vecchi, bisogna attenersi a WSL 1, con le sue limitazioni. Ciò significa che, in un certo senso, Stai ancora trascinando i requisiti e i cicli di vita di WindowsSe il tuo computer non è più supportato, lo sarà anche WSL.
Configurazione rapida di WSL e prime decisioni
Nelle versioni attuali di Windows, Microsoft ha semplificato notevolmente il processo. Da una console PowerShell con privilegi di amministratore, è sufficiente eseguire Il comando wsl –install installerà WSL e un sistema Ubuntu predefinito.Il sistema scarica automaticamente i componenti necessari e la distribuzione dal Microsoft Store.
Durante il primo avvio della distribuzione ti verrà chiesto di creare un nome utente e una password per il sistema LinuxQuell'utente è il tuo account principale all'interno della distribuzione, completamente indipendente dal tuo account Windows, il che contribuisce a mantenere un certo livello di isolamento.
Se vuoi andare un po' oltre, puoi elencare tutte le distribuzioni disponibili con wsl –list –in linea e scegliere, ad esempio, Debian, Kali, openSUSE o altre varianti di Ubuntu. L'installazione viene eseguita con wsl –install -d NOME_DISTRIBUZIONE e ogni distribuzione vive nella propria "scatola" isolata.
Per impostazione predefinita, sui nuovi sistemi il comando wsl –install stesso Configura WSL 2 come versione baseMa puoi assicurartelo con `wsl --set-default-version 2`. Se hai già distribuzioni create con WSL 1, puoi migrarle singolarmente con wsl –set-version NOME_DISTRIBUZIONE 2, a costo di un tempo di conversione breve.
Come WSL influisce sul sistema Windows e dove memorizza i dati.
Una delle tue principali preoccupazioni è probabilmente quanto WSL "ingombra" il tuo sistema Windows e dove finisce tutto ciò che installi su Linux. La cosa essenziale è che Ogni distribuzione WSL viene memorizzata in una cartella di dati utente all'interno di %LocalAppData%\PackagesE, se preferisci gestire i file al di fuori di Esplora risorse classico, puoi utilizzare gestori di file alternativiNon rilascia file sparsi su tutto il disco come farebbe una classica installazione di Linux.
All'interno di quella cartella c'è una directory LocalState con un disco virtuale (VHDX) che contiene l'intero file system di Linux: /, /home, /var, ecc.In altre parole, il server web, Docker, i database, il codice del progetto: tutto risiede all'interno di quel container. Finché non si modifica nulla all'esterno, l'impatto sui percorsi tipici di Windows è minimo.
Tuttavia, WSL richiede l'attivazione di alcune funzionalità di sistema: “Sottosistema Windows per Linux” e, per WSL 2, “Piattaforma per macchine virtuali”Questo può essere fatto tramite PowerShell (Enable-WindowsOptionalFeature) o dall'interfaccia grafica "Attiva o disattiva funzionalità di Windows". Installa anche Kernel Linux per WSL in %SystemRoot%\System32\lxss\tools.
Questi componenti diventano parte di Windows una volta attivati, quindi se in qualsiasi momento desideri Lascia il sistema come se non avessi mai toccato WSLDovrai disinstallare le distribuzioni, disabilitare le funzionalità opzionali e, se necessario, rimuovere il pacchetto del kernel. Non è un processo semplice del tipo "basta eliminare una cartella e il gioco è fatto", ma non è nemmeno particolarmente complicato.
Tieni inoltre presente che WSL crea un'interfaccia di rete virtuale, regola le regole del firewall e, nel caso di WSL 2, si basa su servizi come ICS (Internet Connection Sharing) e HNS per la gestione interna di NAT, DNS e DHCP.Tutto ciò è trasparente nelle operazioni quotidiane, ma spiega perché alcune VPN aziendali o firewall a volte entrano in conflitto con WSL.
Utilizzo di WSL per lo sviluppo web e attività meno ovvie.
Oltre al tipico "Voglio avere bash su Windows", WSL brilla quando ne hai bisogno Ricrea ambienti Linux di produzione senza abbandonare il desktop di Windows.Ad esempio, il caso che hai menzionato: un progetto FOSS che utilizza Docker, Flask, ArangoDB e altri servizi di backend.
Invece di dover lottare con strane versioni di Windows o con Docker Desktop su Windows nativo (il che storicamente si è rivelato piuttosto problematico), è possibile installare l'intero stack direttamente nella propria distribuzione WSL. Docker funziona nativamente sul kernel WSL 2.I servizi Linux funzionano come su un server reale e puoi continuare a utilizzare VS Code o altri strumenti grafici da Windows.
Ci sono anche vantaggi meno ovvi. Puoi correre script di amministrazione, strumenti da riga di comando specifici per Linux, buone versioni di Node e NVM, gestori di pacchetti come apte in generale l'intero ecosistema di utility a cui sono abituati gli sviluppatori di server.
Grazie all'integrazione del file system, WSL monta i dischi Windows in /mnt (ad esempio, /mnt/c per l'unità C:). Questo ti consente di Modifica il codice con il tuo editor Windows ed eseguilo in Linux senza duplicare i progetti..
Un'altra cosa interessante è l'interoperabilità dall'altro lato: dalla shell Linux puoi chiamare File eseguibili di Windows come notepad.exe, powershell.exe o qualsiasi file .exe di sistema.Se la variabile PATH include percorsi Win32 come /mnt/c/Windows/System32, è sufficiente digitare il nome del file eseguibile per avviarlo, a meno che la shell non abbia accidentalmente sovrascritto la variabile PATH.
Windows Terminal: il partner ideale per WSL
Per rendere più confortevole la tua esperienza WSL, Microsoft consiglia di utilizzare Terminale Windows (Terminale Windows in spagnolo)Si tratta di un'applicazione moderna che consente di aprire schede da diverse shell: PowerShell, CMD e, cosa molto importante, ciascuna delle proprie distribuzioni WSL.
Con Windows Terminal puoi creare sessioni Ubuntu, Debian o Kali da un unico programma, con schede e pannelli, configurare scorciatoie da tastiera e Personalizza caratteri, colori e profili senza dover gestire migliaia di finestre cmd.exe separate. Inoltre, elimina la dipendenza da strumenti obsoleti come PuTTY per le connessioni SSH, poiché è possibile connettersi a server remoti direttamente da una distribuzione WSL.
Il flusso di lavoro tipico per molti sviluppatori su Windows oggi è il seguente: Il codice viene scritto in VS Code, il terminale principale in Windows Terminal e il backend e gli strumenti vengono utilizzati all'interno di WSL.Questa combinazione offre un'esperienza molto simile a quella di lavorare su macOS o direttamente su una distribuzione Linux desktop.
Rete, DNS, VPN e altri grattacapi in WSL
Dove WSL 2 di solito causa più problemi è nella rete: quando si utilizza una VM leggera, dipende da un adattatore virtuale, regole del firewall e un piccolo NAT interno che a volte entrano in conflitto con le configurazioni aziendali, le VPN, gli antivirus con firewall o le rigide politiche di sicurezza.
Un problema comune è che WSL non ha accesso a Internet sui computer aziendali.In molti domini Active Directory, le regole del firewall definite dall'organizzazione bloccano le regole locali. Poiché l'eccezione creata da HNS per consentire il traffico DNS dalla vNIC di WSL è locale, viene sovrascritta. Se `AllowLocalFirewallRules` o `AllowInboundRules` sono impostati su `False` nel profilo corrispondente (utilizzando `Get-NetFirewallProfile`), WSL non risolverà i nomi.
La soluzione sta nel fatto che l'amministratore definisca una regola aziendale appropriata. Oppure, in alternativa, Abilita il tunneling DNS di WSL utilizzando l'opzione sperimentale dnsTunneling. nel file .wslconfig. Questa funzionalità fa sì che le query DNS interne di Linux vengano indirizzate direttamente al resolver di Windows attraverso il livello di virtualizzazione, senza la necessità di pacchetti di rete classici che potrebbero entrare in conflitto con il firewall.
Anche alcune VPN causano problemi. Ci sono casi noti con Cisco AnyConnect, client OpenVPN, soluzioni come ZScaler, McAfee Safe Connect o Bitdefender che manipolano route, NRPT o proxy in modo da interrompere il NAT o interferire con il traffico WSL. A volte la soluzione è abilitare networkingMode=mirrored, altre volte disabilitare dnsTunneling o persino modificare la configurazione di autoProxy in modo che il mirroring HTTP_PROXY/HTTPS_PROXY all'interno di Linux si adatti al tuo scenario.
Nella modalità NAT classica ci sono limitazioni come Nel file /etc/resolv.conf è possibile definire solo tre server DNS.Anche questo è un problema che dnsTunneling contribuisce a risolvere: Linux utilizza tutti i server DNS configurati da Windows. Inoltre, i suffissi DNS vengono gestiti in modo diverso a seconda che si utilizzi NAT puro, NAT con tunneling DNS o modalità mirror. In modalità mirror, tutti i suffissi DNS di Windows vengono riflessi nella ricerca resolv.conf e vengono aggiornati automaticamente quando cambiano sull'host.
Compatibilità di Docker e dei container all'interno di WSL
Uno dei motivi principali per l'adozione di WSL 2 è stato quello di migliorare drasticamente l'esperienza Docker. L'idea ufficiale di Microsoft e Docker è che Docker Desktop utilizza WSL 2 come backend, invece di Hyper-V diretto o del suo vecchio motore.
Tuttavia, non tutto è perfetto. Sono stati rilevati problemi, ad esempio, quando Si utilizza la modalità di rete mirror (networkingMode=mirrored) e si eseguono i container con porte pubblicateIn questi casi, Docker Desktop potrebbe non riuscire a creare i container se si utilizza lo spazio dei nomi di rete predefinito. La soluzione temporanea consiste nell'avviare i container con `--network host` oppure aggiungere le porte problematiche a `ignoredPorts` nel file `.wslconfig`.
Ci sono anche incidenti con container che trasportano Gestore di rete o altri servizi di rete complessi attivi Possono impedire il corretto funzionamento della configurazione di rete di WSL, soprattutto per le connessioni di ritorno all'host. Microsoft consiglia di disabilitare questi tipi di daemon quando non sono strettamente necessari.
Se, inoltre, il tuo ambiente aziendale aggiunge un proxy HTTP/S e abiliti autoProxy in WSL, variabili come HTTP_PROXY, HTTPS_PROXY, NO_PROXY e WSL_PAC_URLTieni presente che le variabili definite dall'utente hanno la precedenza su quelle generate automaticamente. Linux non supporta nativamente PAC, quindi potrebbe essere necessario adattare gli script o disabilitare la funzionalità.
Errori comuni nelle distribuzioni Linux e come risolverli
Una volta all'interno della distribuzione, possono anche comparire i tipici problemi di Linux, alcuni dei quali aggravati dalle peculiarità di WSL. Un esempio classico è che I comandi di Windows come powershell.exe o notepad.exe non vengono trovati invocandoli da bash con un messaggio "comando non trovato".
Nella maggior parte dei casi, ciò è dovuto a uno script di avvio (come /etc/profile in Debian). ridefinire PATH senza tenere conto del valore passato da WSLQuesto può causare la perdita di percorsi come /mnt/c/Windows e posizioni simili. L'approccio corretto non è sovrascrivere il PATH, ma piuttosto estenderlo o semplicemente rimuovere le righe problematiche. Si consiglia inoltre di verificare che `appendWindowsPath=false` sia impostato in `/etc/wsl.conf`.
Un altro problema ricorrente è Errori di aggiornamento di apt-get relativi a udev e ai servizi di sistema Queste funzionalità non sono supportate all'interno di WSL, poiché non si tratta di un sistema completo con init tradizionale. La soluzione usuale consiste nell'installare uno script policy-rc.d in /usr/sbin che restituisca exit 101 per impedire l'avvio dei servizi, aggiungere i permessi di esecuzione e utilizzare dpkg-divert per reindirizzare /sbin/initctl a /bin/true.
Anche SSH ha le sue peculiarità. Se, tentando di connettersi a un server remoto, si incontrano avvisi come "FILE CHIAVE PRIVATA NON PROTETTO!" e permessi 0777, è molto probabile che Stai salvando le chiavi in una directory montata da Windows con permessi eccessivamente permissivi. Affinché WSL gestisca correttamente i permessi POSIX sui file di Windows, si consiglia di aggiungere una sezione a /etc/wsl.conf con opzioni come metadata,uid=1000,gid=1000,umask=0022.
Al contrario, se si configura un server OpenSSH all'interno della propria distribuzione WSL e quando ci si connette da Windows si vede "Connessione chiusa da 127.0.0.1 porta 22", controllare i log avviando sshd in modalità debug e verificare che Ci sono chiavi host in /etc/ssh che non sono state eliminateSe mancano, possono essere rigenerati oppure, più semplicemente, è possibile disinstallare e reinstallare il pacchetto openssh-server.
Utilizzo di WSL nelle versioni precedenti di Windows e nella variante legacy
In team con Versioni molto vecchie di Windows 10 (Creators Update, Anniversary Update) Il supporto per WSL è considerevolmente più limitato. Utilizzava bash.exe, lxrun e un'implementazione meno matura. I comandi e i percorsi erano diversi. I comandi Linux venivano passati con bash -c, le distribuzioni erano memorizzate in %LocalAppData%\lxss e l'interoperabilità con Windows era più rudimentale.
Se provenite da quella fase e avete ancora la "versione legacy" di WSL, Microsoft consiglia Migra i tuoi dati a una distribuzione moderna dallo Store e disinstallare la vecchia versione. Puoi farlo con wsl –unregister Legacy oppure eliminando manualmente la cartella %LocalAppData%\lxss (attenzione, in questo modo verranno eliminati tutti i vecchi contenuti di Linux).
In questi sistemi, caratteristiche come WSL 2, supporto ufficiale per le applicazioni grafiche Linux, integrazione con Docker Desktop e semplificazione di wsl –install Non sono disponibili. Se il tuo hardware lo consente, è consigliabile aggiornare a una build recente. In alternativa, puoi passare direttamente a Windows 11 per sfruttare la versione corrente del sottosistema.
In ogni caso, se prima di tutto vuoi ridurre al minimo l'impatto su Windows o il tuo computer non è più in grado di soddisfare i requisiti, esiste un'alternativa sempre più valida: Utilizza Linux come sistema principale e relega Windows a una macchina virtuale. (Ad esempio, con VirtualBox, VMware o GNOME Boxes). In questo modo si evita di dipendere dai requisiti sempre più stringenti di Windows 11 e si prolunga la vita utile dell'hardware.


