Windows 10 è dotato di un componente, chiamato Sottosistema Windows per Linux (WSL), che consente di eseguire i programmi per Linux sotto Windows. La funzionalità è maturata nel tempo fino ad arrivare alla seconda versione (WSL2), che ora integra il kernel Linux completo per la massima compatibilità e velocità. Si presenta all'utente sottoforma di una shell Bash completa (la stessa di Ubuntu, openSUSE o Fedora) corredata da tutti i micro-programmi classici del mondo Linux. Ci sono ls, grep, awk, sed, diff, ssh, curl e wget, ma -ancor più importante- siamo liberi di installare qualsiasi altro software disponibile nei repository accessibili tramite apt o yum o addirittura compilare dai sorgenti. In questa guida vedremo come installare il Sottosistema Windows per Linux (WSL2) ed usare le funzioni principali
nota: La trattazione è incentrata sulla nuova versione, WSL2. È comunque grossomodo analoga anche per la generazione precedente.
WSL1 e WSL2
Windows 10 1909 (Novembre 2019) e compilazioni precedenti integravano la prima versione di WSL. Per realizzarlo, Microsoft aveva implementato uno strato di traduzione intermedio che esponeva le stesse Application programming interface (API) del kernel Linux, le quali, rispondendo esattamente allo stesso modo del "vero Linux", consentivano alle applicazioni native di funzionare come al solito.
A partire da Windows 10 2004 (Maggio 2020), però, Microsoft ha integrato la seconda generazione: WSL2. La nuova generazione abbandona l'emulazione delle API e integra una copia dell'intero kernel Linux, che Microsoft preleva dal sito ufficiale (kernel.org), ottimizzata allo scopo e compilata internamente. Il kernel viene poi eseguito all'interno di una macchina virtuale invisibile all'utente.
Rispetto alla tecnologia impiegata da "WSL1", la presenza del kernel completo garantisce una compatibilità maggiore e performance del file system di un altro livello: si parla di un incremento di velocità pari a due/cinque volte durante la creazione di un clone Git, installazione via npm o build con cmake.
Come diretta conseguenza, il file system Linux (ext4) risiede ora all'interno di un file VHD (disco fisso virtuale) che cresce progressivamente per contenere tutto il necessario. Al momento in cui scrivo, può arrivare fino a 256 GB automaticamente. Raggiunto tale limite, è necessario ampliarlo manualmente.
Un altro vantaggio è la gestione dinamica della memoria: in caso l'applicazione Linux abbisognasse di ingenti quantità di RAM, WSL2 alloca progressivamente quanto necessario. Se la necessità scende, la RAM in esubero viene liberata e restituita al sistema operativo.
WSL2 non soppianta WSL, ma vi si affianca. Ogni distribuzione installata può essere eseguita con l'uno o con l'altro sistema. Ma, se non per motivi specifici, non vi sono ragioni per preferire l'edizione più vecchia: WSL2 è migliore, più veloce e compatibile.
WSL2: compatibilità e requisiti
Sottosistema Windows per Linux (WSL) richiede Windows 10 a 64 bit (x64) oppure Windows 10 ARM64. Non funziona sul sistema operativo in compilazione a 32 bit e nemmeno in modalità "S".
Sebbene sia disponibile anche per Windows Server, WSL è rivolto principalmente all'uso desktop e, in particolare, ai programmatori e power user. È disponibile per tutte le edizioni per PC: da Windows 10 Home (compreso) in avanti.
Per quanto riguarda il processore, WSL2 richiede il supporto hardware alla virtualizzazione:
» Leggi: Come scoprire se la CPU è dotata di supporto hardware alla virtualizzazione
Passo 1: installare Sottosistema Windows per Linux in un solo comando
Se il PC monta Windows 10 21H2, Aggiornamento di Ottobre 2021 o versioni successive, è possibile installare WSL2 in modo ultra-semplificato:
- aprire il Prompt dei comandi di Amministratore
- impartire
wsl --install
- riavviare il PC
Al primo riavvio sarà necessario attendere qualche minuto mentre la procedura scompatta tutti i file e rende disponibile l'ambiente di lavoro. Il comando wsl --install
seleziona automaticamente Ubuntu. Chi preferisse usare una distribuzione differente dovrebbe usare l'argomento -d
seguito dal nome della distribuzione. Alcuni esempi:
wsl --install -d debian
wsl --install -d kali-linux
wsl --install -d opensuse-42
Per visualizzare la lista completa delle distribuzioni disponibili, impartire wsl --list --online
In qualsiasi momento possiamo ripetere l'operazione per installare anche altre distribuzioni, una di fianco all'altra. È infatti assolutamente previsto di installarne più d'una sullo stesso PC.
Passo 1 (Alternativa): installare Sottosistema Windows per Linux manualmente
Se il PC monta una generazione di Windows 10 più vecchia oppure se, per qualsiasi motivo, wsl --install
non funziona, possiamo svolgere l'installazione "alla vecchia maniera". Per prima cosa, è necessario installare il componente Sottosistema Windows per Linux
. Si tratta di una funzionalità opzionale di Windows, che deve essere attivata manualmente. Il modo più facile è tramite linea di comando:
- fare click con il pulsante destro del mouse sul pulsante Start
- scegliere
Windows Powershell (Amministratore)
- impartire i seguenti comandi:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
Riavviare il PC.
In alternativa, possiamo raggiungere il medesimo risultato tramite interfaccia grafica:
- cercare
Pannello di controllo
sotto Start - aprire il vecchio
Programmi e funzionalità
- seguire il link
Attivazione o disattivazione delle funzionalità di Windows
(nella colonna di sinistra)
Dalla lista proposta:
- scorrere fino ad individuare
Piattaforma macchina virtuale
: spuntare la casella - scorrere fino ad individuare
Sottosistema Windows per Linux
: spuntare la casella - cliccare
OK
- concludere con il riavvio quando richiesto
Tornati al desktop dopo il riavvio, procediamo a scaricare e installare questo aggiornamento:
» Download: WSL2 Linux kernel update package
Al termine, fare click con il pulsante destro del mouse sul pulsante Start e scegliere Windows Powershell (Amministratore)
. All'interno della console, impartire questo comando:
wsl --set-default-version 2
Così facendo, ogni nuova distribuzione Linux installata da qui in avanti utilizzerà il nuovo "motore" WSL2.
Il comando appena impartito è valido solo per le distribuzioni installate da qui in poi. Per quelle eventualmente già installate in precedenza (magari perché si tratta di un PC Windows 10 recentemente aggiornato), è necessario modificare il gestore puntualmente, una per una, passandolo da "WSL1" a WSL2. Ho mostrato la procedura qui:
Da ricordare: impartendo wsl --list --verbose
possiamo verificare se una determinata distribuzione già installata utilizza WSL 1
oppure 2
. L'indicazione è riportata nella colonna version
Procediamo installando la nostra distribuzione Linux preferita tramite Microsoft Store. Al momento in cui scrivo, le principali disponibili gratuitamente sono:
- Ubuntu (consigliata a chiunque non abbia una preferenza "forte" verso un'alternativa)
- openSUSE Leap
- SUSE Linux Enterprise Server
- Kali Linux for WSL
- Debian GNU/Linux
Effettuata la scelta, completare cliccando Ottieni
e quindi Installa
Passo 2: Avviare WSL2
Ad installazione terminata, avviamo la distribuzione scelta tramite il collegamento aggiunto al menu Start
Non aspettiamoci l'interfaccia grafica colorata di Ubuntu (Gnome) o similari: l'ambiente di lavoro è Bash, ovvero una shell testuale del mondo Linux (è la più diffusa e impiegata di default un po' da tutte le distribuzioni).
Alla primissima esecuzione dobbiamo scegliere un nome utente per creare l'account sul sistema Linux, e la relativa password. Potete scegliere quello che volete (in caso di dubbio: il proprio nome va benissimo)
Curiosità: WSL2 non consente più di scegliere lo username root
, come ero solito fare. Un'utenza con lo stesso nome viene infatti creata automaticamente all'avvio ed è disponibile per eseguire comandi con i privilegi massimi, proprio come succede sui "veri" computer Linux.
Arrivati fino a qui è tutto pronto per lavorare con Linux su Windows! Gli esperti di Pinguino si troveranno immediatamente a proprio agio. Nei prossimi paragrafi vedremo comunque qualche comando e come accedere al file system Windows da Linux (e viceversa). Prima ancora, però, ricordate che per concludere la sessione di lavoro Linux è sufficiente chiudere la finestra.
Fatelo con tranquillità: ogni installazione, modifica o creazione di file dall'ambiente Linux viene sempre salvata e persiste fra una sessione Bash e la successiva.
Passo 3: cambiare cartella, elencare i file
Il primissimo comando Linux da ricordare è pwd
: si limita a stampare a terminale il percorso completo nel quale ci troviamo.
Con cd /
si torna al livello "radice" dal quale si dirama tutto il filesystem Linux. Con ll
, visualizziamo il contenuto della directory corrente
Il disco C:\
di Windows è montato sotto /mnt/c/
(le altre unità sono /mnt/d/
e via dicendo, esattamente come da lettera assegnata sotto Windows).
Entriamoci quindi tramite cd /mnt/c/
e richiediamo la lista dei file disponibili con ll
. Ignoriamo gli errori di accesso (Permesso negato
oppure Permission denied
) sui file di sistema e noteremo, fra le altre, la cartella Users
Con cd Users
(attenzione a rispettare la maiuscole!) seguito da ll
e poi ancora cd mioutente
entriamo nella nostra cartella utente di Windows. La maggior parte dei nostri file personali saranno probabilmente qui!
Fate bene attenzione a non confondere questa directory -ovvero la cartella utente di Windows- con la Home dell'utente Linux: per raggiungere quest'ultima dovete infatti impartire cd $HOME
(attenzione! è tutto maiuscolo!), comando che vi poterà sotto /home/mioutentelinux
Riepilogando:
/mnt/c/Users/mioutente/
: cartella personale di Windows (la stessa visualizzabile con Esplora file)/home/mioutentelinux/
: cartella "home" di Linux
Passo 4: installare programmi Linux
Come anticipato, le utilità di base sono immediatamente disponibili. Abbiamo già usato cd
e ll
, ma possiamo anche modificare i file con l'editor "nano", scaricare pagine web con wget -O $HOME/turbolab.it.txt https://turbolab.it/scarica/204
(come trattato poco fa, il file verrà salvato nella Home di Linux, non in quella di Windows!) e via dicendo.
» Leggi: Come scaricare file da linea di comando: guida a curl e wget per Linux Ubuntu/CentOS
"Giocare" con le utility base di Linux è utile per prendere confidenza con l'ambiente, ma non serve a molto dal punto di vista "produttivo". Fortunatamente, l'ambiente di lavoro include il gestore di pacchetti della distribuzione scelta: parliamo quindi di apt per Ubuntu e tool equivalenti per le altre distribuzioni, già configurati per accedere agli stessi, identici repository e installare automaticamente nuovo software.
Se avete scelto Ubuntu, iniziamo con sudo apt update
per aggiornare la lista dei pacchetti disponibili. Ora, tanto per fare una prova veloce, procediamo con sudo apt install cowsay -y
. Ad installazione completata, lanciamo /usr/games/cowsay "Saluti a tutti da TurboLab.it"
per visualizzare un fumetto
Pronti per una partitina al mitico Space invaders? Per installare un suo clone per terminale basta impartire sudo apt install ninvaders -y
, seguito dal comando di esecuzione: /usr/games/ninvaders
. Ci si sposta con le frecce di direzione, si sparano punti esclamativi con lo spazio
Per iniziare a "fare sul serio" potremmo pensare di installare Apache HTTP Server, ovvero il server web che consente di erogare i siti Internet. Il comando è sudo apt install apache2 -y
, mentre il servizio si avvia con sudo service apache2 restart
. Ora possiamo aprire il browser web di Windows all'indirizzo http://localhost per visualizzare la pagina di cortesia erogata da Apache
» Leggi anche: Installare e configurare un server web: La Grande Guida ad Apache, PHP, MySQL su Windows e Linux
Ancora: grazie a questo strumento possiamo eseguire Redis senza la necessità di appoggiarsi ad un fork specifico per Windows: basta installarlo con sudo apt install redis-server -y
e lanciarlo con redis-server
Ricordate soltanto che qualsiasi programma Linux in esecuzione viene arrestato alla chiusura della finestra.
In seguito, quando vorrete aggiornare i software, non dovrete far altro se non impartire i seguenti comandi dall'ambiente Linux:
sudo apt update
(aggiorna la lista dei pacchetti disponibili)sudo apt full-upgrade -y
(scarica e installa le nuove versioni dei pacchetti)
» Leggi anche: Aggiornare Ubuntu: quali differenze fra apt-get update, apt-get upgrade e apt-get dist-upgrade? Il modo migliore è... zzupdate!
Passo 5: Entrare ed uscire tramite Prompt dei comandi
È utile sapere che possiamo entrare nell'ambiente Linux anche da un qualsiasi tradizionale Prompt dei comandi Windows, e non solo avviando esplicitamente lo strumento dal menu Start:
- Per entrare nell'ambiente Linux: comando
bash
- Per uscire: impartire
exit
oppure combinazione da tastieraCtrl+D
Questo ci dà un grande vantaggio: così facendo, ci ritroveremo immediatamente posizionati, anche da Bash, nella stessa cartella del PC nella quale eravamo con il Prompt dei comandi
Passo 6: eseguire programmi con interfaccia grafica
Fino ad ora ci siamo limitati ad eseguire programmi per il terminale. Possiamo però lanciare anche software con interfaccia grafica... tra cui l'utilissimo Firefox per Linux che consente di navigare al riparo dai malware per Windows.
Allo scopo, abbiamo due possibilità:
- se il PC monta Windows 10 21H2 o successivi » Leggi: WSL in Windows 10: come eseguire programmi Linux con interfaccia grafica (WSLg, modo ufficiale 2022)
- se il PC monta una generazione precedente » Leggi: Guida a Bash su Windows 10 (WSL): come eseguire programmi Linux/Ubuntu ad interfaccia grafica (GUI) su Windows 10
Passo 7: lanciare programmi Linux da Windows
Se vi trovate spesso ad usare un determinato programma per Linux potete aprire Bash e lanciare detto applicativo in una mossa sola. La sintassi è bash -c "nomeprogramma"
, ad esempio, bash -c "nano"
per eseguire l'editor di testi
Se aprite spesso un determinato programma in questo modo è certamente una buona idea creare un collegamento:
- fare click con il pulsante destro del mouse in un punto vuoto del desktop
- scegliere
Nuovo -> Collegamento
- immettere il comando e avanzare
- scegliere un nome a piacere
Per scegliere una bella icona:
- fare click con il pulsante destro del mouse sull'elemento appena creato
- seguire
Proprietà -> Cambia icona..
- navigare fino all'icona desiderata
- confermare ripetutamente
Passo 8: Disinstallare un programma
Se desiderate rimuovere un programma, il comando da impartire sotto Ubuntu è apt purge nomepacchetto -y
. Quindi, per disinstallare cowsay e apache2 che abbiamo installato al precedente Passo 7
, useremo:
sudo apt purge cowsay -y
-
sudo apt purge apache2 -y
Possiamo anche disinstallare molteplici pacchetti in una volta sola, specificandoli tutti nello stesso comando. Nel nostro caso:
sudo apt purge cowsay apache2 -y
Di tanto in tanto è saggio fare pulizia e rimuovere tutte i pacchetti installati per soddisfare a dipendenze, ma ora non più necessari. Il comando -del tutto sicuro- è sudo apt autoremove
.
Passo 9: Accedere ai file WSL da Windows 10
Un problema molto sentito da chi lavora con Bash su Windows 10 tramite WSL è la difficoltà nell'accedere da Windows ai file salvati nei percorsi propri dell'ambiente Linux. Ebbene: le build moderne di Windows 10 abbattono anche questa barriera grazie ad una funzione dedicata:
» Leggi: Windows 10: come visualizzare / accedere ai file WSL (Bash) con Esplora File (Explorer)?
Conclusioni e altri riferimenti utili
Bene, siamo giunti alla conclusione. In questa guida abbiamo visto come "installare Linux su Windows" tramite WSL2: uno strumento potentissimo, integrato nativamente in Windows 10, che consente di eseguire la shell Bash e tutti i principali programmi per Linux all'interno del comodo e familiare desktop di Windows.
Chi volesse saperne di più può consultare questi riferimenti (in inglese):
- Windows Subsystem for Linux Installation Guide for Windows 10 - guida ufficiale Microsoft all'installazione di WSL
- Bash on Ubuntu on Windows - pagina MSDN di riferimento
- Frequently Asked Questions - domande e risposte
- Windows Command Line Tools For Developers - blog del team di sviluppo
- Command-line UserVoice portal - servizio di raccolta di feedback da parte degli utenti
- BashOnWindows su GitHub: repository GitHub dedicato alla raccolta di problematiche