# Windows Subsystem for Linux

Windows Subsystem for Linux (WSL) és una capa de compatibilitat per executar fitxers binaris de Linux (en format ELF) de forma nativa a Windows 10 i Windows Server 2019.
El maig de 2019, es va anunciar WSL 2, introduint canvis importants com un nucli Linux real, mitjançant un subconjunt de funcions Hyper-V. Des del juny de 2019, WSL 2 està disponible per als clients de Windows 10 mitjançant el programa Windows Insider, inclosa l'edició Home.

## Visió general

La primera versió de WSL publicada per Microsoft proporcionà una interfície compatible amb el nucli de Linux, que no contenia cap codi del nucli de Linux, que podia llavors executar un entorn d'usuari GNU a la part superior del mateix sistema, amb distribucions com Ubuntu, openSUSE, SUSE Linux Enterprise Server, Debian i Kali Linux. Aquest espai d'usuari podia contenir un intèrpret d'ordres i un llenguatge d'ordres GNU Bash, amb eines de línia d'ordres natives de GNU (sed, awk, etc.), intèrprets de llenguatge de programació (Ruby, Python, etc.) i fins i tot aplicacions gràfiques (amb un Servidor X11 al costat de l’amfitrió).
L'arquitectura es va redissenyar a WSL 2, amb un nucli Linux funcionant en un entorn de màquina virtual lleuger.

## Introducció i disponibilitat

Quan es va presentar amb l'actualització d’aniversari per a Windows 10 el 2 d’agost de 2016, només hi havia disponible una imatge d’Ubuntu. La Fall Creators Update, publicada el 17 d’octubre de 2017, va traslladar el procés d’instal·lació de les distribucions de Linux al Windows Store i va introduir imatges SUSE.
WSL només estava disponible en versions de 64 bits de Windows 10 des de la versió 1607. Però també estaria disponible al Windows Server 2019.
Microsoft va anunciar WSL 2 el 6 de maig de 2019 que incloïa un backend completament nou basat en màquina virtual (basat en un subconjunt de funcions Hyper-V) en lloc de la capa d’adaptació de crides del sistema anterior, prevista per al llançament a través del programa Windows Insider el juny de 2019.

## Desenvolupament

La primera incursió de Microsoft per aconseguir la compatibilitat similar de Unix a Windows va començar amb el subsistema POSIX de Microsoft, substituït pels Serveis de Windows per a UNIX a través de MKS/Interix, que finalment va quedar obsolet amb el llançament de Windows 8.1. La tecnologia darrere del subsistema Windows per a Linux es va originar en el no publicat Project Astoria, que va permetre que algunes aplicacions d'Android s'executessin a Windows 10 Mobile I que es va fer disponible per primera vegada a la versió 14316 de Windows 10 Insider Preview.
Mentre que els projectes anteriors de Microsoft i Cygwin s’havien centrat a crear els seus propis entorns similars a Unix basats en l'estàndard POSIX, WSL pretén la compatibilitat nativa amb Linux. En lloc d’ajustar funcionalitats no natives a les trucades del sistema Win32 com feien servir aquests sistemes anteriors, el disseny inicial de WSL (WSL 1) va aprofitar l'executable del nucli NT per servir els programes Linux com a processos mínims especials i aïllats (coneguts com a "pico processes") connectats al nucli mode "pico providers" com a gestors de trucades i excepcions del sistema dedicats diferents del d'un procés NT de vainilla, optant per reutilitzar les implementacions NT existents sempre que sigui possible.
Tot i que WSL (mitjançant aquest disseny inicial) era molt més ràpid i, sens dubte, molt més popular que els seus germans UNIX-on-Windows, els enginyers del nucli de Windows van trobar dificultats per intentar augmentar el rendiment de WSL i la compatibilitat amb les trucades intentant remodelar el nucli NT existent per reconèixer i funcionar correctament a l'API de Linux. En una conferència de Microsoft Ignite el 2018, els enginyers de Microsoft van oferir una visió general d’alt nivell d’una nova tecnologia “lleugera” Hyper-V VM per a la contenimentació on un nucli virtualitzat podia fer un ús directe de les primitives NT a l’amfitrió. El 2019, Microsoft va anunciar una arquitectura WSL completament redissenyada (WSL 2) que utilitza aquesta tecnologia de màquina virtual lleugera que allotja imatges reals (personalitzades) del nucli Linux, reclamant una compatibilitat completa amb syscall.
Microsoft considerà WSL com "principalment una eina per a desenvolupadors, especialment per a desenvolupadors web i aquells que treballen en projectes de codi obert o amb ells". El setembre del 2018, Microsoft va dir que "WSL requeriria menys recursos (CPU, memòria i emmagatzematge) que una màquina virtual completa" (que abans de WSL era la forma més directa d'executar programari Linux en un entorn Windows), alhora que permetia als usuaris utilitzar aplicacions de Windows i eines de Linux al mateix conjunt de fitxers.

## Arquitectura
### WSL 1
#### Servei de gestor LXSS

LXSS Manager Service és el servei encarregat d’interactuar amb el subsistema (a través dels controladors lxss.sys i lxcore.sys), i la forma en què Bash.exe (que no s’ha de confondre amb els shell proporcionats per les distribucions de Linux) llança Linux processos, així com gestiona les crides del sistema Linux i els bloquejos binaris durant la seva execució.
Tots els processos Linux invocats per un usuari concret passen a una "instància Linux" (normalment, el primer procés invocat és init). Un cop tancades totes les aplicacions, es tanca la instància.

#### wsl.exe

L'ordre wsl.exe s'utilitzaria per gestionar distribucions al subsistema Windows per a Linux a la línia d'ordres. Pot llistar les distribucions disponibles, establir una distribució predeterminada i desinstal·lar distribucions. L'ordre també es pot utilitzar per executar binaris de Linux des del símbol del sistema o del Windows PowerShell. wsl.exe substitueix lxrun.exe que està obsolet a partir de Windows 10 1803 i versions posteriors.

##### Exemples

Executant l'uname al WSL mitjançant PowerShell.
Exemple amb l' sudo des del símbol del sistema.

#### Accés al maquinari i al sistema de fitxers

El disseny de WSL 1 no presentava emulació / virtualització de maquinari (a diferència d'altres projectes com coLinux) i feia ús directe del sistema de fitxers amfitrió (mitjançantVolFS i DrvFS) i algunes parts del maquinari, com la xarxa, que garanteix la interoperabilitat. Per exemple, es podia accedir als servidors web a través de les mateixes interfícies i adreces IP configurades a l’amfitrió i comparteixen les mateixes restriccions en l’ús de ports que requereixen permisos administratius o ports que ja ocupen altres aplicacions.
Hi ha certes ubicacions (com ara carpetes del sistema) i configuracions l'accés / modificació de les quals està restringit, fins i tot quan s'executa com a root, amb sudo des de l'intèrpret d'ordres. Cal iniciar una instància amb privilegis elevats per aconseguir que "sudo" doni privilegis d'arrel reals i permeti aquest accés.

#### Limitacions

El WSL 1 no és capaç d'executar tot el programari Linux, com ara binaris de 32 bits, o aquells que requereixen serveis específics del nucli Linux no implementats a WSL. A causa de la manca de nucli Linux "real" al WSL 1, no es poden executar mòduls del nucli, com ara els controladors de dispositiu. WSL 2, però, fa ús d’instàncies de nucli Linux virtualitzades en directe.
És possible executar algunes aplicacions gràfiques (GUI) (com Mozilla Firefox) instal·lant un servidor X11 en l'entorn de Windows (host) (com VcXsrv o Xming), encara que no sense advertències, com ara la manca de suport d’àudio (tot i que es pot solucionar instal·lant PulseAudio al Windows d’una manera similar a X11) o acceleració de maquinari (resultant en un rendiment gràfic deficient). El suport per a OpenCL i CUDA tampoc s’està implementant actualment, tot i que està previst per a futures versions.
Microsoft va afirmar que WSL va ser dissenyat per al desenvolupament d'aplicacions i no per a ordinadors d'escriptori o servidors de producció, recomanant l'ús de màquines virtuals (Hyper-V), Kubernetes i Azure per a aquests propòsits.

#### Punts de referència

En els punts de referència, el rendiment de WSL 1 és sovint a prop de Linux natives Ubuntu, Debian, Intel Clear Linux o altres distribucions Linux. En algunes proves, l’I/O és un coll d’ampolla per al WSL. Microsoft reclama el backend WSL 2 redissenyat per oferir vint vegades augment de velocitat en determinades operacions en comparació amb el de WSL 1.

### WSL 2

La versió 2 introduí canvis en l'arquitectura. Microsoft optà per la virtualització mitjançant un subconjunt altament optimitzat de funcions Hyper-V, per tal d’executar el nucli i les distribucions (basades en el nucli), prometent un rendiment equivalent al WSL 1. Per a una compatibilitat posterior, els desenvolupadors no necessitarien canviar res a les seves distribucions publicades. Els paràmetres de WSL 2 es podrien modificar mitjançant la configuració global de WSL, continguda en un fitxer INI anomenat .wslconfig a la carpeta Perfil d'usuari.
La instal·lació de distribució residiria dins d'un sistema de fitxers amb format ext4 dins d'un disc virtual i el sistema de fitxers amfitrió seria accessible de manera transparent a través del protocol 9P, de manera similar a altres tecnologies de màquines virtuals com QEMU. Per als usuaris, Microsoft va prometre fins a 20 vegades el rendiment de lectura / escriptura de WSL 1. Des del Windows es proporciona un redirector de xarxa IFS per a l'accés al fitxer de convidat de Linux mitjançant el prefix de camí UNC de \\wsl$
WSL 2 requereix Windows 10 versió 1903 o superior, amb Build 18362 o superior, per als sistemes x64, i la versió 2004 o superior, amb Build 19041 o superior, per als sistemes ARM64.

## Captures de pantalla

* Bash s'executa a Windows 10
* Firefox per a Linux que s’executa a WSL
* Gestor de paquets Synaptic que s’executa a WSL

## Polèmica

Hi ha temors a la comunitat de desenvolupadors que el subsistema Windows per a Linux pugui ser una manera d'abraçar, estendre i extingir Linux.
Richard Stallman ha expressat el seu temor que la integració de la funcionalitat de Linux a Windows només dificulti el desenvolupament de programari lliure, i ha considerat que els esforços com WSL són "un pas enrere en la campanya per la llibertat". Linus Torvalds, per contra, va dir que no li preocupava la presa de possessió de Linux per part de Microsoft, perquè creia que les llicències GPL 2 de Linux i la mida del projecte ho feien impossible, a més de citar l’augment de la cooperació de Microsoft amb la comunitat Linux.

## Referències

* 1 2 3 Craig Loewen. «Announcing WSL 2». Windows Command Line Tools For Developers, 06-05-2019.
* 1 2 3 mscraigloewen. «About WSL 2». docs.microsoft.com.
* ↑ «WSL 2 Post BUILD FAQ». Windows Command Line Tools For Developers, 14-05-2019.
* ↑ Gerwitz, Mike. «GNU/kWindows». mikegerwitz.com. [Consulta: 8 abril 2018].
* ↑ Harsh, Mike. «Run Bash on Ubuntu on Windows». Building Apps for Windows. Microsoft, 30-03-2016.
* ↑ Finley, Klint. «Why Microsoft Making Linux Apps Run on Windows Isn't Crazy». Wired. Condé Nast, 30-03-2016.
* ↑ Kirkland, Dustin. «Ubuntu on Windows – The Ubuntu Userspace for Windows Developers». Ubuntu Insights. Canonical, 30-03-2016.
* ↑ Hammons, Jack. «Bash on Ubuntu on Windows». MSDN. Microsoft, 09-04-2016.
* ↑ Get openSUSE Leap 42 - Microsoft Store
* ↑ Get SUSE Linux Enterprise Server 12 - Microsoft Store
* ↑ Yegulalp, Serdar. «Windows Subsystem for Linux welcomes Suse and Fedora options». InfoWorld, 12-05-2017. [Consulta: 16 setembre 2017].
* 1 2 «Ubuntu now available from the Windows Store!». Windows Command Line Tools For Developers Blog, 10-07-2017. [Consulta: 11 agost 2017].
* ↑ «Debian GNU/Linux for WSL now available in the Windows Store» (en anglès). .
* ↑ «Kali Linux in the Windows App Store» (en anglès). .
* 1 2 3 4 «Frequently Asked Questions for WSL». Microsoft. [Consulta: 13 novembre 2016].
* ↑ Bright, Peter. «Why Microsoft needed to make Windows run Linux software». Ars Technica. Condé Nast, 06-04-2016.
* ↑ Aul, Gabe. «Announcing Windows 10 Insider Preview Build 14316». Windows Experience Blog. Microsoft, 06-04-2016.
* ↑ «Windows Subsystem for Linux Overview» (en anglès). Windows Subsystem for Linux.
* ↑ Microsoft Ignite. «OS internals: Technical deep-dive into operating system innovations - BRK3365». [Consulta: 7 maig 2019].
* ↑ Jack Hammons. «Windows Subsystem for Linux Overview». Windows Subsystem for Linux blog on MSDN, 22-04-2016.
* ↑ Manage and configure Windows Subsystem for Linux
* ↑ Windows Subsystem for Linux interoperability with Windows
* ↑ Command Reference for Windows Subsystem for Linux
* ↑ Jack Hammons. «WSL File System Support». Windows Subsystem for Linux blog on MSDN, 15-06-2016.
* ↑ Jack Hammons. «WSL Networking». Windows Subsystem for Linux blog on MSDN, 08-11-2016.
* ↑ «Please enable WSL to run 32 bit ELF binaries». Windows Developer feedback (Microsoft/UserVoice). Arxivat de l'original el 2019-08-23. [Consulta: 11 març 2021].
* ↑ «Support for 32-bit i386 ELF binaries». GitHub.
* ↑ «Windows 10's Bash shell can run graphical Linux applications with this trick». PC World. [Consulta: 10 setembre 2018].
* ↑ «GPU not accesssible for running tensorflow and installing CUDA · Issue #1788 · Microsoft/WSL». GitHub. [Consulta: 10 setembre 2018].
* ↑ «OpenCL & CUDA GPU support». Windows Developer feedback (Microsoft/UserVoice), 15-09-2016. Arxivat de l'original el 7 de juliol 2018. [Consulta: 10 setembre 2018].
* ↑ «Windows Subsystem for Linux». Phoronix.
* ↑ Michael Larabel. «A Look At The Windows 10 October 2018 Update Performance With WSL». Phoronix, 12-10-2018.
* ↑ Michael Larabel. «The WSL Improvements In The Windows 10 October 2018 Update». Phoronix, 05-11-2018.
* ↑ Loewen, Craig. «What’s new for WSL in Insiders Preview Build 18945». Microsoft devblog, 26-07-2019. Arxivat de l'original el 26 juliol 2019. [Consulta: 26 juliol 2019].
* ↑ Hillis, Ben. «MicrosoftDocs/WSL | Build 18947». GitHub, 25-07-2019. Arxivat de l'original el 26 juliol 2019. [Consulta: 26 juliol 2019].
* ↑ «A Deep Dive Into How WSL Allows Windows to Access Linux Files» (en anglès americà). Windows Command Line Tools For Developers, 30-05-2019. [Consulta: 24 juny 2019].
* ↑ Jujjuri, Venkateswararao; Van Hensbergen, Eric; Liguori, Anthony; Pulavarty, Badari Linux Symposium, July 13–16, 2010.
* ↑ «Announcing WSL 2» (en anglès americà). Windows Command Line Tools For Developers, 06-05-2019. [Consulta: 24 juny 2019].
* ↑ «Installation Instructions for WSL 2» (en anglès americà). [Consulta: 7 maig 2020].
* ↑ «Should We Worry Microsoft Will 'Embrace, Extend, and Extinguish' Linux?» (en anglès americà). [Consulta: 7 març 2018].
* ↑ «Microsoft Announced Linux App GUI Support» (en anglès americà). [Consulta: 20 maig 2020].
* ↑ «Richard Stallman vs. Canonical's CEO: 'Will Microsoft Love Linux to Death?'» (en anglès americà). [Consulta: 27 juliol 2020].
* ↑ Vaughn-Nichols, Steven. «Linus Torvalds isn't worried about Microsoft taking over Linux». ZDNet, 07-10-2019. [Consulta: 19 desembre 2020].

## Enllaços externs

* Bloc de la línia d’ordres del Windows
* WSL a Microsoft Docs
* Windows Subsystem for Linux a Github
* Windows Subsystem for Linux a Github
* Eines de línia d'ordres de Windows per a desenvolupadors