Windows Subsystem for Linux

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Windows Subsystem for Linux

Description de cette image, également commentée ci-après
Bash s'exécutant sous Windows 10
Informations
Créateur Microsoft
Développé par Microsoft
Première version
Type Composant de Microsoft Windows (d)Voir et modifier les données sur Wikidata
Licence Q63130800 et licence publique générale GNUVoir et modifier les données sur Wikidata
Site web blogs.msdn.microsoft.com/wslVoir et modifier les données sur Wikidata

Windows Subsystem for Linux (WSL) est une couche de compatibilité permettant d'exécuter des exécutables binaires Linux (au format ELF) de manière native sur Windows 10 et Windows Server 2019.

Une version nommée WSL 2 est annoncée en mai 2019[1]. Cette nouvelle version introduit d'importants changements, notamment la présence d'un véritable noyau Linux[2] via un sous-ensemble de fonctionnalités Hyper-V. Depuis juin 2019, WSL 2 est disponible pour les clients Windows 10 via le programme Windows Insider, y compris l'édition Famille[3].

Vue d'ensemble[modifier | modifier le code]

La première version de WSL fournit une interface noyau compatible Linux développée par Microsoft, qui ne contient aucun code source du noyau Linux[4]. Cette interface permet d'exécuter un espace utilisateur GNU comme celui d'Ubuntu[5],[6],[7],[8], openSUSE[9], SUSE Linux Enterprise Server[10],[11],[12], Debian[13] ou Kali Linux[14]. Un tel espace utilisateur peut contenir un shell Bash avec des outils en ligne de commande GNU / Linux natifs (sed, awk, etc.), des interpréteurs de langage de programmation (Ruby, Python, etc.) et même des applications graphiques (utilisant un serveur X11 côté hôte)[15].

L'architecture a été repensée dans WSL 2[1], avec un noyau Linux s'exécutant dans une machine virtuelle légère.

Introduction et disponibilité[modifier | modifier le code]

Lors de son introduction avec la mise à jour anniversaire (1607) le 2 août 2016, seule une image Ubuntu était disponible. La mise à jour Fall Creators (1709), publiée le 17 octobre 2017, a déplacé le processus d'installation des distributions Linux vers le Windows Store et a introduit les images SUSE[12].

WSL est disponible uniquement dans les versions 64 bits de Windows 10 à partir de la version 1607. Il est également disponible sous Windows Server 2019.

Le 6 mai 2019[1], Microsoft a annoncé le lancement de WSL 2[1], qui propose un tout nouveau backend basé sur une machine virtuelle (basée sur un sous-ensemble de fonctionnalités Hyper-V) au lieu de la couche de compatibilité antérieure. WSL2 devrait être publié via le programme Windows Insider en juin 2019.

Développement[modifier | modifier le code]

La première tentative de Microsoft pour atteindre une compatibilité de type Unix sur Windows a commencé avec le sous-système Microsoft POSIX, remplacé par Windows Services for UNIX, qui a finalement été rendu obsolète à la sortie de Windows 8.1. La technologie à l'origine de WSL est issue du projet non publié Astoria, qui permettait à certaines applications Android de s'exécuter sur Windows 10 Mobile[16]. Il a d'abord été mis à disposition dans Windows 10 Insider Preview build 14316[17].

Alors que les projets précédents de Microsoft et de Cygwin s’étaient concentrés sur la création de leurs propres environnements de type Unix basés sur le standard POSIX, WSL vise la compatibilité native avec Linux. Au lieu d'encapsuler les fonctionnalités non natives dans les appels système Win32, la conception initiale de WSL (WSL 1) exploitait l'exécutif du noyau NT pour servir les programmes Linux en tant que processus minimaux isolés et uniques (appelés "pico processus") liés au mode noyau "pico providers" en tant que gestionnaires d'appels système et d'exceptions dédiés, distincts de ceux d'un processus NT classique, en choisissant de réutiliser les implémentations NT existantes dans la mesure du possible[18].

Bien que WSL (dans cette conception initiale) soit beaucoup plus rapide et sans doute beaucoup plus populaire que les autres solutions permettant d'utiliser Linux sur Windows, les ingénieurs du noyau Windows ont eu du mal à augmenter les performances de WSL et la compatibilité des appels systèmes en essayant de remodeler le noyau NT existant pour qu'il reconnaisse et fonctionnent correctement sur l'API de Linux . Lors d'une conférence Microsoft Ignite en 2018, les ingénieurs Microsoft ont donné un aperçu d'une nouvelle technologie "légère" de machine virtuelle Hyper-V pour la conteneurisation dans laquelle un noyau virtualisé pouvait utiliser directement les primitives NT sur l'hôte. En 2019, Microsoft a annoncé une architecture WSL 2 entièrement repensée, utilisant cette technologie VM légère hébergeant des images de noyau Linux réelles (personnalisées), revendiquant ainsi une compatibilité complète[2].

Microsoft présente WSL comme un outil pour les développeurs - en particulier les développeurs Web et ceux qui travaillent sur ou avec des projets open source"[15]. WSL utilise moins de ressources qu'une machine virtuelle classique (avant WSL, une machine virtuelle était le moyen le plus direct pour exécuter un logiciel Linux dans un environnement Windows), tout en permettant aux utilisateurs d'utiliser des applications Windows et des outils Linux sur le même ensemble de fichiers.

Architecture[modifier | modifier le code]

WSL 1[modifier | modifier le code]

Service du gestionnaire LXSS[modifier | modifier le code]

LXSS Manager Service est le service qui interagit avec le sous-système (via les pilotes lxss.sys​ et lxcore.sys​), qui gère la façon dont bash.exe​ (à ne pas confondre avec les shells fournis par les distributions Linux) lance les processus Linux, et qui gère également les appels système Linux et les verrous binaires lors de leur exécution[19].

Tous les processus Linux appelés par un utilisateur vont dans une "instance Linux" (généralement, le premier processus appelé est init). Une fois toutes les applications fermées, l'instance est fermée.

wsl.exe[modifier | modifier le code]

Windows Subsystem for Linux

Description de l'image Ubuntu on Windows 10 - bash.png.
Informations
Développé par Microsoft
Première version
Environnement Microsoft Windows
Type Composant de Microsoft Windows (d)Voir et modifier les données sur Wikidata
Licence Q63130800 et licence publique générale GNUVoir et modifier les données sur Wikidata
Site web blogs.msdn.microsoft.com/wslVoir et modifier les données sur Wikidata

La commande wsl.exe permet de gérer, en ligne de commande, les distributions dans WSL. Cette commande peut répertorier les distributions disponibles, définir une distribution par défaut et désinstaller les distributions[20]. La commande peut également être utilisée pour exécuter directement des fichiers binaires Linux à partir de l'invite de commande Windows ou de Windows PowerShell[21]. wsl.exe remplace lxrun.exe qui est obsolète à partir de Windows 10 1803[22].

Exemples[modifier | modifier le code]

Exécuter la commande uname dans WSL à l'aide de 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

Exemple d'utilisation de la commande sudo partir de l'invite de commande.

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]

Accès au matériel et au système de fichiers[modifier | modifier le code]

La conception de WSL 1 ne comportait aucune émulation / virtualisation matérielle (contrairement à d’autres projets tels que coLinux) et utilisait directement le système de fichiers hôte (via VolFS​ et DrvFS​) [23] et certaines parties du matériel, telles que le réseau afin de garantir l’interopérabilité[24]. Les serveurs Web, par exemple, sont accessibles via les mêmes interfaces et adresses IP configurées sur l'hôte et partagent les mêmes restrictions pour l'utilisation des ports nécessitant des autorisations administratives ou déjà occupés par d’autres applications).

Pour des raisons de sécurité, l'accès à certains emplacements (tels que les dossiers système) est restreint, même lors de l'exécution en tant que root (avec sudo à partir du shell). Pour accéder à ce type d'emplacement protégé, il est nécessaire de lancer une instance WSL avec des privilèges élevés (en tant qu'administrateur) afin que "sudo" donne de vrais privilèges root et autorise un tel accès[15].

Limites[modifier | modifier le code]

WSL 1 ne peux pas exécuter tous les logiciels Linux, tels que les fichiers binaires 32 bits[25],[26], ou ceux nécessitant des services spécifiques du noyau Linux non implémentés dans WSL. En raison de l'absence de "vrai" noyau Linux dans WSL 1, les modules du noyau, tels que les pilotes de périphérique, ne peuvent pas être exécutés. WSL 2, quant à lui, utilise des instances de noyau Linux virtualisées.

Il est possible d’exécuter certaines applications graphiques (comme Mozilla Firefox) en installant un serveur X11 dans l’environnement Windows (hôte) (VcXsrv ou Xming par exemple) [27]. Cependant, l'audio ou l'accélération matérielle ne sont pas pris en charge (ce qui entraîne de mauvaises performances graphiques). La prise en charge d’OpenCL et de CUDA n’est pas non plus mise en œuvre actuellement, bien que celle-ci soit prévue pour les versions futures[28],[29].

Microsoft a déclaré que WSL 1 était destiné principalement au développement d'applications et non pas à l'exécution d'environnement de bureau ou de serveurs de production. Pour ce type d'usage, Microsoft recommande l'utilisation de machines virtuelles (Hyper-V), Kubernetes et Azure[15].

Performances[modifier | modifier le code]

Dans les tests de performance, les performances de WSL 1 sont souvent proches des distributions Linux natives Ubuntu, Debian, Intel Clear Linux ou autres. Dans certains tests, les I/O sont un goulot d'étranglement pour WSL[30],[31],[32]. Selon Microsoft, les modifications apportées à WSL sont censées offrir une vitesse multipliée par vingt sur certaines opérations par rapport à celle de WSL 1[2].

WSL 2[modifier | modifier le code]

La version 2 introduit des modifications dans l'architecture. Microsoft a opté pour la virtualisation via un sous-ensemble hautement optimisé de fonctionnalités Hyper-V, afin d'exécuter le noyau fourni et les distributions sous-jacentes, offrant des performances équivalentes à WSL 1. La compatibilité avec les versions antérieures est prévue, les développeurs n’ont donc pas besoin de changer quoi que ce soit dans leurs distributions publiées. Dans WSL 2, il existe une nouvelle configuration globale. Il est toutefois toujours possible, comme avec WSL1, d'utiliser un fichier INI nommé .wlsconfig situé également dans le dossier personnel de l'utilisateur[33],[34].

L'installation de la distribution s'effectue sur un système de fichiers au format ext4 dans un disque virtuel. Le système de fichiers hôte est accessible de manière transparente via le protocole 9P (en)[35]. Microsoft a annoncé multiplier par 20 les performances de lecture / écriture par rapport à WSL 1[36].

Captures d'écran[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

  1. a b c et d Craig Loewen, « Announcing WSL 2 », Windows Command Line Tools For Developers,
  2. a b et c mscraigloewen, « About WSL 2 », docs.microsoft.com
  3. « WSL 2 Post BUILD FAQ », Windows Command Line Tools For Developers,
  4. Gerwitz, « GNU/kWindows », mikegerwitz.com (consulté le 8 avril 2018)
  5. Harsh, « Run Bash on Ubuntu on Windows », Building Apps for Windows, Microsoft,
  6. Finley, « Why Microsoft Making Linux Apps Run on Windows Isn't Crazy », Wired, Condé Nast,
  7. Kirkland, « Ubuntu on Windows – The Ubuntu Userspace for Windows Developers », Ubuntu Insights, Canonical,
  8. Hammons, « Bash on Ubuntu on Windows », MSDN, Microsoft,
  9. Get openSUSE Leap 42 - Microsoft Store
  10. Get SUSE Linux Enterprise Server 12 - Microsoft Store
  11. Yegulalp, « Windows Subsystem for Linux welcomes Suse and Fedora options », InfoWorld, (consulté le 16 septembre 2017)
  12. a et b « Ubuntu now available from the Windows Store! », Windows Command Line Tools For Developers Blog, (consulté le 11 août 2017)
  13. (en) « Debian GNU/Linux for WSL now available in the Windows Store », Windows Command Line Tools For Developers,‎ 6mars 2018 (lire en ligne)
  14. (en) « Kali Linux in the Windows App Store », Kali Linux,‎ (lire en ligne)
  15. a b c et d « Frequently Asked Questions for WSL », Microsoft (consulté le 13 novembre 2016)
  16. Bright, « Why Microsoft needed to make Windows run Linux software », Ars Technica, Condé Nast,
  17. Aul, « Announcing Windows 10 Insider Preview Build 14316 », Windows Experience Blog, Microsoft,
  18. (en) Jack Hammons, « Windows Subsystem for Linux Overview », MSDN Blogs,‎ (lire en ligne)
  19. Jack Hammons, « Windows Subsystem for Linux Overview », Windows Subsystem for Linux blog on MSDN,
  20. Manage and configure Windows Subsystem for Linux
  21. Windows Subsystem for Linux interoperability with Windows
  22. Command Reference for Windows Subsystem for Linux
  23. Jack Hammons, « WSL File System Support », Windows Subsystem for Linux blog on MSDN,
  24. Jack Hammons, « WSL Networking », Windows Subsystem for Linux blog on MSDN,
  25. « Please enable WSL to run 32 bit ELF binaries », Windows Developer feedback (Microsoft/UserVoice)
  26. « Support for 32-bit i386 ELF binaries », GitHub
  27. « Windows 10's Bash shell can run graphical Linux applications with this trick », PC World (consulté le 10 septembre 2018)
  28. « GPU not accesssible for running tensorflow and installing CUDA · Issue #1788 · Microsoft/WSL », GitHub (consulté le 10 septembre 2018)
  29. « OpenCL & CUDA GPU support », Windows Developer feedback (Microsoft/UserVoice), (consulté le 10 septembre 2018)
  30. « Windows Subsystem for Linux », Phoronix
  31. Michael Larabel, « A Look At The Windows 10 October 2018 Update Performance With WSL », Phoronix,
  32. Michael Larabel, « The WSL Improvements In The Windows 10 October 2018 Update », Phoronix,
  33. Loewen, « What’s new for WSL in Insiders Preview Build 18945 » [archive du ] [html], Microsoft devblog, (consulté le 26 juillet 2019) : « 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. »
  34. Hillis, « MicrosoftDocs/WSL | Build 18947 » [archive du ] [html], GitHub, (consulté le 26 juillet 2019)
  35. (en-US) « A Deep Dive Into How WSL Allows Windows to Access Linux Files », Windows Command Line Tools For Developers, (consulté le 24 juin 2019)
  36. (en-US) « Announcing WSL 2 », Windows Command Line Tools For Developers, (consulté le 24 juin 2019)

Liens externes[modifier | modifier le code]