# Windows Subsystem for Linux

Windows Subsystem for Linux (WSL), in italiano sottosistema Windows per Linux, è un layer di compatibilità per l'esecuzione di binari Linux (in formato ELF) in modo nativo su Windows 10, Windows 11 e Windows Server 2019.
A maggio 2019 è stato annunciato WSL 2, il quale ha introdotto importanti cambiamenti, tra cui un vero kernel Linux, attraverso un sottoinsieme di funzionalità di Hyper-V. Da giugno 2019, WSL 2 è disponibile per gli utenti Windows 10 tramite il programma Windows Insider, inclusa l'edizione Home. WSL non è disponibile automaticamente per tutti gli utenti di Windows 10/11. Può essere installato sia partecipando al programma Windows Insider che con l'installazione manuale.

## Panoramica

La prima versione di WSL forniva l'interfaccia a un kernel compatibile Linux sviluppato da Microsoft, che non conteneva codice del kernel Linux originale, ma che era ugualmente in grado di eseguire uno spazio utente GNU, come quello di Ubuntu, openSUSE, SUSE Linux Enterprise Server, Debian e Kali Linux. Tale spazio utente può contenere una shell GNU Bash e un linguaggio di comando, con strumenti da riga di comando GNU nativi (sed, awk, ecc.), interpreti di linguaggi di programmazione (Ruby, Python, ecc.) e persino applicazioni grafiche (usando un server X11 lato host).
In WSL 2, l'architettura è stata riprogettata, con un kernel Linux in esecuzione su un ambiente virtualizzato leggero.

## Introduzione e disponibilità

Quando è stato introdotto con l'Anniversary Update il 2 agosto 2016, era disponibile solo un'immagine di Ubuntu. Il Fall Creators Update, uscito il 17 ottobre 2017, ha spostato il processo di installazione delle distribuzioni Linux su Windows Store e ha introdotto le immagini SUSE.
WSL è disponibile solo nelle versioni a 64 bit di Windows 10 dalla versione 1607. È disponibile anche su Windows Server 2019 e Windows 11.
Microsoft ha annunciato WSL 2 il 6 maggio 2019, il quale presenta un backend completamente nuovo basato su VM (basato su un sottoinsieme di funzionalità di Hyper-V), al posto del precedente layer di compatibilità a chiamate di sistema, pianificato per il lancio tramite il programma Windows Insider nel giugno 2019.

## Sviluppo

Il primo tentativo di Microsoft di creare un layer di compatibilità Unix-like per Windows è stato con il Microsoft POSIX Subsystem, che fu poi sostituito dal Windows Services for UNIX mantenuto da MKS/Interix, a sua volta deprecato con l'uscita di Windows 8.1. La tecnologia alla base del sottosistema Windows per Linux ha avuto origine dall'inedito Project Astoria, che consentiva l'esecuzione di alcune applicazioni Android su Windows 10 Mobile. È stato reso disponibile per la prima volta nella build Windows 10 Insider Preview 14316.
Mentre i precedenti progetti di Microsoft e di terze parti - come Cygwin - si focalizzavano sulla creazione di ambienti univoci Unix-like basati sullo standard POSIX, WSL mira alla compatibilità nativa con Linux. Invece di racchiudere funzionalità non native nelle chiamate di sistema Win32 utilizzate da questi sistemi precedenti, il progetto iniziale di WSL (WSL 1) sfruttava l'executive del kernel NT per eseguire i programmi Linux come processi minimali speciali e isolati (noti come pico processes) collegati alla modalità kernel pico provider come chiamate di sistema dedicate e gestori di eccezioni distinti da quelli di un processo NT vanilla, scegliendo di riutilizzare le implementazioni NT esistenti ove possibile.
Sebbene WSL (tramite questo design iniziale) fosse molto più veloce e probabilmente molto più popolare dei suoi fratelli UNIX-on-Windows, gli ingegneri del kernel di Windows hanno trovato difficoltà nel tentare di aumentare le prestazioni di WSL e la compatibilità con le syscall, cercando di rimodellare il kernel NT esistente per interpretare e operare correttamente sull'API di Linux. In una conferenza Microsoft Ignite nel 2018, gli ingegneri Microsoft hanno fornito una panoramica di alto livello di una nuova tecnologia VM "leggera", basata su Hyper-V, per la containerizzazione, che permettesse a un kernel virtualizzato di utilizzare direttamente le primitive NT sull'host. Nel 2019, Microsoft ha annunciato un'architettura WSL (WSL 2) completamente riprogettata, grazie all'utilizzo di una tecnologia VM leggera che ospita immagini del kernel Linux effettive (personalizzate), rivendicando la piena compatibilità con le syscall.
Microsoft ha pensato WSL come "principalmente uno strumento per gli sviluppatori, in particolare gli sviluppatori web e coloro che lavorano su o con progetti open source". Nel settembre 2018, Microsoft ha affermato che "WSL richiede meno risorse (CPU, memoria e spazio di archiviazione) rispetto a una macchina virtuale completa" (che prima di WSL era il modo più diretto per eseguire il software Linux in un ambiente Windows), consentendo inoltre agli utenti di utilizzare app Windows e strumenti Linux sullo stesso set di file.
Nell'aprile 2021, Microsoft ha reso disponibile una build di test di Windows 10 che include anche la possibilità di eseguire applicazioni Linux con interfaccia utente grafica (GUI) utilizzando WSL 2 e CBL-Mariner. La Windows Subsystem for Linux GUI (WSLg) è uscita durante la conferenza Microsoft Build 2021. È inclusa nella build Windows 10 Insider 21364 e successive.

## Architettura
### WSL 1
#### LXSS Manager Service

LXSS Manager Service è il servizio incaricato di interagire con il sottosistema (tramite i driver lxss.sys e lxcore.sys) e il metodo con cui Bash.exe (da non confondere con le Shell fornite dalle distribuzioni Linux) lancia i processi Linux, oltre a gestire le chiamate di sistema Linux e i lock dei binari durante la loro esecuzione.
Tutti i processi Linux invocati da un particolare utente passano da una "Linux Instance" (di solito, il primo processo invocato è init). Una volta chiuse tutte le applicazioni, l'istanza viene chiusa.

#### wsl.exe

Il comando wsl.exe viene utilizzato per gestire le distribuzioni nel sottosistema Windows per Linux lato riga di comando. Può elencare le distribuzioni disponibili, impostare una distribuzione predefinita e disinstallare le distribuzioni. Il comando può essere utilizzato anche per eseguire file binari Linux dal prompt dei comandi di Windows o da PowerShell. wsl.exe sostituisce lxrun.exe, che è sta deprecato a partire da Windows 10 1803 e versioni successive.

##### Esempi

Esecuzione di uname in WSL usando PowerShell.
Esempio di utilizzo di sudo dal prompt dei comandi.

#### Accesso all'hardware e al file system

Il design di WSL 1 non prevedeva l'emulazione/virtualizzazione hardware (a differenza di altri progetti come coLinux) e utilizzava direttamente il file system dell'host (tramite VolFS e DrvFS) più alcune parti dell'hardware, come la rete, che garantisce l'interoperabilità. I server Web, ad esempio, erano accessibili tramite le stesse interfacce e indirizzi IP configurati sull'host e condividevano le stesse restrizioni sull'uso di porte che richiedessero autorizzazioni amministrative o che fossero già occupate da altre applicazioni.
Ci sono determinate posizioni (come le cartelle di sistema) e configurazioni il cui accesso e modifica sono limitati, anche eseguendo come root, con sudo, dalla shell. È necessario avviare un'istanza con privilegi elevati per far sì che "sudo" abbia i privilegi di root reali con tale livello di accesso.

#### Limitazioni

WSL 1 non era in grado di eseguire tutto il software Linux, come ad esempio i binari a 32 bit o quelli che richiedono servizi del kernel Linux specifici non implementati in WSL. A causa della mancanza di un kernel Linux "reale" in WSL 1, i moduli del kernel, come i driver di dispositivo, non possono essere eseguiti. WSL 2, tuttavia, utilizza istanze del kernel Linux virtualizzate live.
È possibile eseguire alcune applicazioni grafiche (GUI, come Mozilla Firefox) installando un server X11 all'interno dell'ambiente Windows (host, come VcXsrv o Xming), seppur con alcune limitazioni, come la mancanza di supporto audio (anche se questo può essere risolto installando PulseAudio in Windows in modo simile a X11) o accelerazione hardware (con conseguenti scarse prestazioni grafiche). Anche il supporto per OpenCL e CUDA non è attualmente implementato, sebbene sia previsto per le versioni future.
Microsoft ha dichiarato che WSL è stato progettato per lo sviluppo di applicazioni e non per computer desktop o server di produzione, raccomandando l'uso di macchine virtuali (Hyper-V), Kubernetes e Azure per tali scopi.

#### Benchmark

Nei benchmark le prestazioni di WSL 1 sono spesso state vicine a Linux Ubuntu, Debian, Intel Clear Linux o altre distribuzioni Linux native. L'I/O è risultato in alcuni test un collo di bottiglia per WSL. Il backend riprogettato di WSL 2 è promosso da Microsoft per offrire un aumento di venti volte della velocità su determinate operazioni rispetto a quello di WSL 1.
A giugno 2020, un benchmark con 173 test con un AMD Threadripper 3970x mostra buone prestazioni con WSL 2 (20H2), pari all'87% delle prestazioni di Ubuntu 20.04.0 LTS nativo. Si tratta di un miglioramento rispetto a WSL 1, che dimostrava solo il 70% delle prestazioni di Ubuntu nativo in questo confronto. WSL 2 migliora le prestazioni di I/O, fornendo un livello quasi nativo. Un confronto di 69 test con Intel i9 10900K a maggio 2020 mostra quasi le stesse prestazioni relative.
A dicembre 2020, un benchmark con 43 test con un AMD Ryzen 5900X mostra buone prestazioni con WSL 2 (20H2), pari al 93% delle prestazioni di Ubuntu 20.04.1 LTS nativo. Si tratta a sua volta di un miglioramento rispetto a WSL 1, che ha dimostrato solo il 73% in questo confronto.

### WSL 2

La versione 2 introduce dei cambiamenti nell'architettura. Microsoft ha optato per la virtualizzazione attraverso un sottoinsieme altamente ottimizzato di funzionalità Hyper-V, al fine di usufruire di kernel e distribuzioni nativi, promettendo prestazioni equivalenti a WSL 1. Per la retrocompatibilità, gli sviluppatori non devono modificare nulla nelle loro distribuzioni pubblicate. Le impostazioni di WSL 2 possono essere modificate dalla configurazione globale di WSL, contenuta in un file INI denominato .wslconfig nella cartella del profilo utente.
L'installazione della distribuzione risiede all'interno di un file system formattato ext4 gestito da un disco virtuale e il file system host è accessibile in modo trasparente tramite il protocollo 9P, similmente ad altre tecnologie di virtualizzazione come QEMU. Per gli utenti, Microsoft ha promesso prestazioni di lettura/scrittura fino a 20 volte superiori rispetto a WSL 1. Windows dal lato interno mette a disposizione un redirector di rete IFS per l'accesso ai file del guest Linux, utilizzando il prefisso del percorso UNC \\wsl$.
WSL 2 richiede Windows 10 versione 1903 o successive, con build 18362 o successive, per sistemi x64 e versione 2004 o successive, con build 19041 o successive, per sistemi ARM64. Per Windows 11, sarà disponibile già dalla prima versione.

## Schermate

* Bash in esecuzione su Windows 10
* Firefox per Linux in esecuzione su WSL
* Il gestore di pacchetti Synaptic in esecuzione su WSL

## Controversie

Ci sono timori nella comunità degli sviluppatori, per i quali Windows Subsystem for Linux potrebbe essere un tentativo di abbracciare, estendere ed estinguere Linux. Richard Stallman ha espresso il timore che l'integrazione delle funzionalità di Linux in Windows possa ostacolare lo sviluppo del software libero, definendo effort come WSL "un passo indietro nella campagna per la libertà". Linus Torvalds, al contrario, ha affermato di non essere preoccupato per l'adozione di Linux da parte di Microsoft, essendo la licenza GPL 2 di Linux e le dimensioni del progetto fattori in forte opposizione alla cosa, citando a proposito la maggiore e crescente cooperazione di Microsoft con la comunità Linux.