Windows Subsystem for Linux

Windows Subsystem for Linux
software
Logo
Logo
Bash in esecuzione su Windows 10
Bash in esecuzione su Windows 10
Bash in esecuzione su Windows 10
GenereLayer di compatibilità
Macchina virtuale
SviluppatoreMicrosoft
Ultima versioneWSL 2 2.1.5
Sistema operativoMicrosoft Windows
LicenzaSubsystem: Software proprietario commerciale;
Linux kernel: GNU GPLv2 con parti di codice sotto varianti GPL compatibili o sotto licenze permissive come BSD, MIT
(licenza non libera)
Sito weblearn.microsoft.com/en-us/windows/wsl/

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[1] e Windows Server 2019.

A maggio 2019 è stato annunciato WSL 2,[2] il quale ha introdotto importanti cambiamenti, tra cui un vero kernel Linux,[3] 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.[4] 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.[5]

Panoramica[modifica | modifica wikitesto]

La prima versione di WSL forniva l'interfaccia a un kernel compatibile Linux sviluppato da Microsoft, che non conteneva codice del kernel Linux originale,[6] ma che era ugualmente in grado di eseguire uno spazio utente GNU, come quello di Ubuntu,[7][8][9][10] openSUSE,[11] SUSE Linux Enterprise Server,[12][13][14] Debian[15] e Kali Linux.[16] 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).[17]

In WSL 2, l'architettura è stata riprogettata,[2] con un kernel Linux in esecuzione su un ambiente virtualizzato leggero.

Introduzione e disponibilità[modifica | modifica wikitesto]

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.[14]

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,[2] 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[modifica | modifica wikitesto]

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.[18] È stato reso disponibile per la prima volta nella build Windows 10 Insider Preview 14316.[19]

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.[20]

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.[21] 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.[3]

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.[17]

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.[22][23] La Windows Subsystem for Linux GUI (WSLg) è uscita durante la conferenza Microsoft Build 2021. È inclusa nella build Windows 10 Insider 21364 e successive.[24]

Architettura[modifica | modifica wikitesto]

WSL 1[modifica | modifica wikitesto]

LXSS Manager Service[modifica | modifica wikitesto]

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.[20]

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[modifica | modifica wikitesto]

wsl
software
Schermata di esempio
Schermata di esempio
GenereUtility
SviluppatoreMicrosoft
Data prima versione2 agosto 2016
Ultima versioneWSL 2 2.1.5
Sistema operativoMicrosoft Windows
LicenzaMicrosoft EULA, GNU GPL v2 e licenza proprietaria
(licenza non libera)
Sito weblearn.microsoft.com/en-us/windows/wsl/

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.[25] Il comando può essere utilizzato anche per eseguire file binari Linux dal prompt dei comandi di Windows o da PowerShell.[26] wsl.exe sostituisce lxrun.exe, che è sta deprecato a partire da Windows 10 1803 e versioni successive.[27]

Esempi[modifica | modifica wikitesto]

Esecuzione di uname in WSL usando PowerShell.

PS C:\temp> wsl uname --all Linux WikiMachine 4.4.0-18362-Microsoft #1-Microsoft Mon Mar 18 12:02:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux 

Esempio di utilizzo di sudo dal prompt dei comandi.

C:\temp> wsl sudo apt-get update [sudo] password for username: Hit:1 https://archive.ubuntu.com/ubuntu xenial InRelease Get:2 https://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB] 

Accesso all'hardware e al file system[modifica | modifica wikitesto]

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)[28] 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.[29]

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.[17]

Limitazioni[modifica | modifica wikitesto]

WSL 1 non era in grado di eseguire tutto il software Linux, come ad esempio i binari a 32 bit[30] 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),[31] 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.[32]

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.[17]

Benchmark[modifica | modifica wikitesto]

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.[33][34][35] 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.[3]

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.[36] Un confronto di 69 test con Intel i9 10900K a maggio 2020 mostra quasi le stesse prestazioni relative.[37]

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.[38]

WSL 2[modifica | modifica wikitesto]

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.[39][40]

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,[41] 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.[2] 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.[5] Per Windows 11, sarà disponibile già dalla prima versione.

Schermate[modifica | modifica wikitesto]

Controversie[modifica | modifica wikitesto]

Ci sono timori nella comunità degli sviluppatori, per i quali Windows Subsystem for Linux potrebbe essere un tentativo di abbracciare, estendere ed estinguere Linux.[42][43] 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à".[44] 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.[45]

Note[modifica | modifica wikitesto]

  1. ^ (EN) Darren Allan, Windows 11 could seamlessly run graphical Linux apps, in TechRadar, 23 giugno 2021. URL consultato l'11 agosto 2021.
  2. ^ a b c d (EN) Craig Loewen, Announcing WSL 2, in Windows Command Line, 6 maggio 2019. URL consultato il 12 agosto 2021.
  3. ^ a b c Craig Loewen, Confronto tra WSL 1 e WSL 2, su Microsoft Docs, 28 settembre 2020. URL consultato l'11 agosto 2021.
  4. ^ (EN) Craig Loewen, WSL 2 Post BUILD FAQ, in Windows Command Line, 13 maggio 2019. URL consultato il 12 agosto 2021.
  5. ^ a b Craig Loewen, Guida all'installazione di Sottosistema Windows per Linux per Windows 10, su Microsoft Docs, 9 giugno 2021. URL consultato l'11 agosto 2021.
  6. ^ (EN) GNU/kWindows, su MikeGerwitz.com, 6 aprile 2016. URL consultato l'11 agosto 2021.
  7. ^ (EN) Mike Harsh, Run Bash on Ubuntu on Windows, in Windows Developer Blog, 30 marzo 2016. URL consultato l'11 agosto 2021.
  8. ^ (EN) Klint Finley, Why Microsoft Making Linux Apps Run on Windows Isn't Crazy, in Wired, 30 marzo 2016. URL consultato l'11 agosto 2021.
  9. ^ (EN) Dustin Kirkland, Ubuntu on Windows – The Ubuntu Userspace for Windows Developers, in Ubuntu Blog, 30 marzo 2016. URL consultato l'11 agosto 2021.
  10. ^ Craig Loewen, Che cos'è il sottosistema Windows per Linux?, su Microsoft Docs, 21 luglio 2020. URL consultato l'11 agosto 2021.
  11. ^ Acquista openSUSE Leap 42, su Microsoft Store. URL consultato l'11 agosto 2021.
  12. ^ Acquista SUSE Linux Enterprise Server 12, su Microsoft Store. URL consultato l'11 agosto 2021.
  13. ^ (EN) Serdar Yegulalp, Windows Subsystem for Linux welcomes Suse and Fedora options, in InfoWorld, 12 maggio 2017. URL consultato l'11 agosto 2021.
  14. ^ a b (EN) Rich Turner, New distros coming to Bash/WSL via Windows Store, in Windows Command Line, 11 maggio 2017. URL consultato l'11 agosto 2021.
  15. ^ (EN) Tara Raj, Debian GNU/Linux for WSL now available in the Windows Store, in Windows Command Line, 6 marzo 2018. URL consultato l'11 agosto 2021.
  16. ^ (EN) Kali Linux in the Windows App Store, in Kali Linux Blog, 5 marzo 2018. URL consultato il 12 agosto 2021.
  17. ^ a b c d Craig Loewen, Domande frequenti su Sottosistema Windows per Linux, su docs.microsoft.com, 15 settembre 2020. URL consultato il 12 agosto 2021.
  18. ^ (EN) Why Microsoft needed to make Windows run Linux software, in Ars Technica, 6 aprile 2016. URL consultato il 12 agosto 2021.
  19. ^ (EN) Gabe Aul, Announcing Windows 10 Insider Preview Build 14316, in Windows Insider Blog, 6 aprile 2016. URL consultato il 12 agosto 2021.
  20. ^ a b (EN) Windows Subsystem for Linux Overview, su Microsoft Docs. URL consultato il 12 agosto 2021.
  21. ^ Filmato audio (EN) Microsoft Ignite, OS internals: Technical deep-dive into operating system innovations - BRK3365, su YouTube, a 24 min 50 s. URL consultato il 12 agosto 2021.
  22. ^ (EN) Mary Jo Foley, New Windows 10 test build adds first preview of Linux GUI apps on WSL, in ZDNet, 21 aprile 2021. URL consultato il 12 agosto 2021.
  23. ^ (EN) Craig Loewen, The Initial Preview of GUI app support is now available for the Windows Subsystem for Linux, in Windows Command Line, 21 aprile 2021. URL consultato il 12 agosto 2021.
  24. ^ Lawrence Abrams, Hands on with WSLg: Running Linux GUI apps in Windows 10, in Bleeping Computer, 29 maggio 2021. URL consultato il 12 agosto 2021.
  25. ^ Craig Loewen, Comandi WSL e configurazioni di avvio, su Microsoft Docs, 26 marzo 2021. URL consultato il 12 agosto 2021.
  26. ^ Craig Loewen, Interoperabilità di Windows con Linux, su Microsoft Docs, 12 maggio 2020. URL consultato il 12 agosto 2021.
  27. ^ Craig Loewen, Informazioni di riferimento sui comandi di Sottosistema Windows per Linux, su Microsoft Docs, 9 giugno 2021. URL consultato il 12 agosto 2021.
  28. ^ (EN) Jack Hammons, WSL File System Support, su Microsoft Docs, 15 giugno 2016. URL consultato il 13 agosto 2021.
  29. ^ (EN) Jack Hammons, WSL Networking, su MSDN, 8 novembre 2016. URL consultato il 12 agosto 2021 (archiviato dall'url originale il 5 novembre 2019).
  30. ^ Support for 32-bit i386 ELF binaries · Issue #390 · microsoft/WSL, su GitHub. URL consultato il 13 agosto 2021.
  31. ^ (EN) Chris Hoffman, Windows 10's Bash shell can run graphical Linux applications with this trick, in PC World, 14 aprile 2016. URL consultato il 13 agosto 2021.
  32. ^ GPU not accesssible for running tensorflow and installing CUDA · Issue #1788 · microsoft/WSL, su GitHub. URL consultato il 13 agosto 2021.
  33. ^ (EN) Windows Subsystem for Linux, su Phoronix. URL consultato il 13 agosto 2021.
  34. ^ (EN) Michael Larabel, A Look At The Windows 10 October 2018 Update Performance With WSL, in Phoronix, 12 ottobre 2018, p. 1. URL consultato il 13 agosto 2021.
  35. ^ (EN) Michael Larabel, The WSL Improvements In The Windows 10 October 2018 Update, in Phoronix, 5 novembre 2018. URL consultato il 13 agosto 2021.
  36. ^ (EN) Michael Larabel, Ubuntu 20.04 vs. Windows 10 WSL/WSL2 Performance In 170+ Benchmarks, in Phoronix, 24 giugno 2021, p. 1. URL consultato il 13 agosto 2021.
  37. ^ (EN) Michael Larabel, Windows 10 May 2020 Performance For WSL vs. WSL2, in Phoronix, 17 giugno 2020, p. 1. URL consultato il 13 agosto 2021.
  38. ^ (EN) Michael Larabel, Windows Subsystem For Linux / WSL2 Performance With The AMD Ryzen 9 5900X, in Phoronix, 16 dicembre 2020, p. 1. URL consultato il 13 agosto 2021.
  39. ^ (EN) Craig Loewen, What’s new for WSL in Insiders Preview Build 18945, in Windows Command Line, 26 luglio 2019. URL consultato il 13 agosto 2021.
    «In this new update we’ve added the ability to start using global config options for WSL. These options are targeted towards power users who want to further customize their WSL experience.»
  40. ^ Release 18945 · MicrosoftDocs/WSL, su GitHub, 26 luglio 2019. URL consultato il 13 agosto 2021.
  41. ^ (EN) Craig Loewen, A Deep Dive Into How WSL Allows Windows to Access Linux Files, in Windows Command Line, 30 maggio 2019. URL consultato il 13 agosto 2021.
  42. ^ (EN) Ask Slashdot: Should We Worry Microsoft Will 'Embrace, Extend, and Extinguish' Linux?, su Slashdot. URL consultato il 13 agosto 2021.
  43. ^ (EN) Arindam, Microsoft Announced Linux App GUI Support and GPU Acceleration in Windows, in DebugPoint.com, 20 maggio 2020. URL consultato il 13 agosto 2021.
  44. ^ (EN) Richard Stallman vs. Canonical's CEO: 'Will Microsoft Love Linux to Death?', su Slashdot. URL consultato il 13 agosto 2021.
  45. ^ (EN) Steven J. Vaughan-Nichols, Linus Torvalds isn't worried about Microsoft taking over Linux, in ZDNet, 7 ottobre 2019. URL consultato il 13 agosto 2021.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]