Article WSL2 logo

Avec la version 20.04 de Windows 10 dont Microsoft a repris le déploiement en juin 2020 après la correction d'une série de bugs, le sous-système Windows pour Linux (Windows subsystem for Linux) est passé en version 2 (WSL 2).

WSL est particulièrement intéressant pour les développeurs, ceux qui utilisent des Raspberry Pi, ou tout un chacun qui souhaite faciliter les communications et utilisations de Windows avec Linux sous SSH par exemple. WSL 2 est une révision majeure de l’architecture du sous-système Linux, il utilise une technique de virtualisation légère et un noyau Linux complet qui permet de nouvelles fonctionnalités. Cet article vient compléter l'article sur WSL 1 intitulé " Lancer des logiciels Linux natifs avec Windows10 et son WSL" et publié sur ce site.

1 - Différences en WSL 1 et WSL 2

WSL 2 est disponible uniquement dans Windows 10 à partir de la version 2004. Pour connaitre votre version actuelle de Windows tapez la commande winver dans une invite de commande.

WSL 2 modifie sensiblement la façon dont les distributions Linux interagissent avec Windows. Il s'appuie sur une machine virtuelle légère, basée sur Hyper-V l'hyperviseur de Microsoft, qui travaille en arrière-plan et de façon totalement transparente pour l'utilisateur.

Voici selon Microsoft les principales différences de caractéristiques entre WSL1 et WSL 2.

WSL2 000 001

Contrairement à WSL 1, le noyau Linux de WSL 2 est complet et toujours en Open source. Adapté par Microsoft pour l'optimiser dans Windows, il sera mis à jour régulièrement et automatiquement par l'intermédiaire de Windows Update

WSL 2 augmente les performances du système de fichiers et offre une compatibilité complète des appels système. Les distributions Linux peuvent s’exécuter sous WSL 1 ou WSL 2, et pour une même distribution, il est possible de basculer passer de WSL 1 à WSL 2 et inversement à tout moment.

  

2 - Installer WSL 2

Note : L'article Lancer des logiciels Linux natifs avec Windows10 et son WSL montre comment installer utiliser et utiliser WSL 1. Reportez-vous souvent à cet article, les procédures d'installation et d'utilisation de WSL 2 sont très semblables à celles de WSL 1 et sont parfois plus détaillées. Dans cet article nous ne montrerons que les principales différences et nouveautés de WSL 2.

Pour utiliser le WSL 2 , vous devez donc avoir au minimum la version 20.04 de Windows 10 en 64 bit.

Pour installer ce sous-système Linux il faut encore passer par le "vieux" panneau de configuration" en allant dans un premier temps dans le menu « Programmes et fonctionnalités » accessible depuis le panneau de configuration ou les «Paramètres Windows».

  • Depuis le panneau de configuration : Ouvrez Programmes et fonctionnalités puis sur le panneau de gauche cliquez sur « Activer ou désactiver des fonctionnalités Windows ».
  • Depuis « Paramètres » allez dans Applications puis « Applications et fonctionnalités ». En haut à droite sous « Paramètres associés » cliquez sur « Programmes et fonctionnalités » puis comme précédemment sur le panneau de gauche de la fenêtre qui s’ouvre, cliquez sur « Activer ou désactiver des fonctionnalités Windows ».


Dans la fenêtre intitulée « Fonctionnalités de Windows » qui s’ouvre cochez les cases :

  • Sous-système Windows pour Linux.
  • Plateforme d'ordinateur virtuel.
  • Cliquez sur OK

Il est inutile de cocher Hyper-V si vous ne l'utilisez pas, il est incompatible avec l'utilisation d'autres hyperviseurs comme VirtualBox. 

Le système télécharge les fichiers requis puis applique les modifications. À la fin du processus une boite de dialogue vous demande de redémarrer Windows pour terminer l’installation.

 WSL2 001 001

 

WSL 2 fonctionnant avec une machine virtuelle qui nécessite des instructions particulières du processeur, vous devez également activer la virtualisation dans le BIOS de votre machine. Celle-ci dépend de la marque de votre  microprocesseur. Il s'agit de VTX pour Intel et de SVM pour AMD.

Pour savoir si la virtualisation au niveau du processeur est activée ou non, vous pouvez passer par le gestionnaire de tâches.

  • Activez les touches CTRL + Alt + Suppr ou cherchez Gestionnaire de tâches et lancez-le dans la barre de recherches.
  • Le gestionnaire de tâches s'ouvre. Cliquez le cas échéant sur "plus de détails" en bas à gauche de la fenêtre du gestionnaire de tâche si la fenêtre ne montre que la liste des tâches en cours.
  • Ouvrez alors l'onglet "Performances" et sélectionnez "Processeur" dans la zone de gauche.
  • En bas du graphique de l'activité du processeur, vous pouvez voir si la virtualisation est activée ou non.

 

WSL2 001 002

Si la virtualisation n'est pas activée, vous devez alors passer par le BIOS ou l'UEFI de votre machine pour l'autoriser (si votre processeur est trop ancien il est possible qu'il ne supporte pas la virtualisation, mais c'est rare aujourd'hui).

Si vous ne savez pas comment activer cette virtualisation, vous pouvez consulter cette page : "Comment activer la technologie de virtualisation Intel ou AMD" du site Tech2Tech.

Après ces opérations votre WSL 2 est opérationnel.

3 – Manipulations sous WSL 2

Dans notre exemple nous allons installer une distribution Linux Debian, sur une machine sur laquelle les distribution Ubuntu 20.04 et Kali-linux avaient été déjà installées sous WSL 1 avant la mise à jour de Windows en version 20.04 et décrit dans l'article déjà cité "Lancer des logiciels Linux natifs avec Windows10 et son WSL".

Si on ouvre une invite de commande avec la commande wsl  -l -v dont l'option  :

-l :  affiche la liste des distributions installées.

-v :  affiche les versions de WSL sous lesquelles les distributions fonctionnent.

On voit la liste des distributions installées avec leur version. Le "*" devant Ubuntu-20.04 indique que Ubuntu est la version lancée par défaut si vous tapez simplement wsl sans option dans la fenêtre de commande.

Notez que sous WSL 1, l'option wsl -v ne fonctionne pas.

En tapant wsl –help (-- = 2 tirets) vous obtiendrez toutes les options de la commande wsl.

WSL2 001 003

On voit par exemple que wsl -l -v est équivalent à wsl  --list –verbose.

En tapant :

wsl : on lance la distribution par défaut Ubuntu-20.04

wsl -d Ubuntu-20.04 : on lance la distribution Ubuntu-20.04.

wsl -d kali-linux : on lance la distribution kali-linux.

Le nom des distribution dit être exactement celui qui apparait dans la liste avec wsl -l ou wsl -l -v.

Par exemple on obtient la fenêtre ci-après en ayant tapé wsl -d kali-linux dans une fenêtre de commande puis la commande linux "ls" pour afficher le contenu du répertoire.

Pour sortir de kali-linux il suffira de taper exit.

Dans la suite de l'article il faudra bien faire la différence entre une fenêtre d'invite commande Windows et une fenêtre bash de Linux.

La fenêtre ci-dessus est une invite de commande Windows. Vous entrez ici des commandes Windows.  Par exemple wsl -l -v est une commande Windows comme la commande dir qui affiche le répertoire courant. Si on tape par exemple la commande Windows wsl -d kali-linux, Windows ouvre une fenêtre qui est sous linux (bash). Dans cette fenêtre on lance des commandes Linux (comme ls qui affiche le répertoire courant). On sort d'un "bash" en tapant la commande exit. C'est la même commande exit qui permet aussi de fermer une fenêtre d'invite de commande Windows.

Pour toutes ces fenêtre de commande on peut utiliser l'invite classique de Windows CMD, une console Windows PowerShell ou le tout nouveau Windows Terminal (installable depuis e Microsoft store) qui est très pratique à utiliser et qui a vocation à remplacer l'ancienne invite de commande CMD.  

Si dans une autre fenêtre de commande on tape wsl -l -v, on voit dans statut que la distribution kali-linux est en cours de fonctionnement (running).

WSL2 001 005

La fenêtre ci-dessous est une fenêtre bash obtenue après avoir lancé kali-linux et lancé la commande ls.

WSL2 001 004

Une fois dans une distribution on tape exit pour sortir du bash et arrêter la distribution.

4 – Installation d'une distribution Linux sous WSL 2

L'installation est identique sous WSL 1 et WSL2

Lançons le Microsoft store à partir du menu de Windows ou en tapant https://aka.ms/wslstore

Dans un navigateur. Profitez éventuellement de l'ouverture du Microsoft Store pour mettre à jour les applications déjà installées en cliquant en haut à droite sur l'icone en forma de trois points (…)  pour ouvrir le sous-menu et choisir "Téléchargements et mises à jour".

Taper Linux par exemple dans la zone de recherche du Microsoft store. Parmi les distributions qui apparaissent nous allons choisir Debian.

WSL2 001 006

Cliquer sur Debian puis sur installer.

WSL2 001 007

Une fois l'installation terminée au bout de quelques secondes, le bouton "Installation" se transforme en "Lancer".

Comme avec WSL 1, l'icône Debian va apparaitre dans le menu démarrer (rubrique "Récemment ajoutées ") et vous pouvez l'épingler ou la placer dans la barre de tâches.

En cliquant sur lancer une console, "bash " s'ouvre et l'installation proprement dite commence.

Quelques instants après on vous demande de saisir un nom d'utilisateur et un mot de passe. Après confirmation du mot de passe l'installation est terminée et la console bash vous donne la main. Retenez bien ce nom d'utilisateur et ce mot de passe.

Nous allons mettre à jour la distribution :

  • Taper les commandes linux sudo apt-get update puis sudo apt-get upgrade.
  • Répondez par y s'il y a des mises à jour à faire.
  • Une fois la mise à jour terminée, tapez exit pour éteindre la machine et refermer la console bash.
  • Vous pouvez quitter le Microsoft Store s'il était resté ouvert.

Ouvrez une invite de commande Windows et tapez wsl -l -w

On voit maintenant que la distribution Debian a été installée. Elle est en version WSL 1 même si nous sommes sous WSL 2.

WSL2 001 008

 

5 - Changer la version d'une distribution

 

Nous allons passer cette version en WSL 2. En regardant l'aide de WSL (wsl –help) on voit qu'il faut taper la commande : wsl –set-version [nom de la distribution]  [n° de version]

Dans notre cas cela donne : wsl –set-version Debian 2

  • La première fois qu'un changement de version est demandé, Windows va demander une mise à jour du noyau.
  • Ouvrez votre navigateur préféré et dans la barre d'adresse entrez l'url : https://aka.ms/wsl2kernel.
  • Sur le site, cliquez sur le lien "Téléchargez le dernier package de mise à jour du noyau Linux WSL2".
  • Enregistrez le fichier wsl_update_x64.msi comme pour un téléchargement classique.
  • Le téléchargement terminé, fermez le navigateur et à l'aide du gestionnaire de fichier, double-cliquez sur ce fichier pour le lancer.
  • Le programme s'installe comme n'importe quel autre logiciel.
  • Cette installation ne se fait qu'une fois, Windows mettra le noyau à jour automatiquement par la suite.

WSL2 001 009

Reprenons notre invite de commande et retapons wsl –set-version Debian 2

Cette fois ci la conversion commence et prend un certain temps.

Le noyau Linux de la distribution va évoluer en passant de WSL 1 à WSL 2. Il sera plus complet et offrira plus de fonctionnalités.

WSL2 001 009 1

Au bout de plusieurs minutes, quand l'invite de commande vous à rendu la main, en tapant la commande wsl -l -v, on voit bien que notre Debian est passée en version 2.

WSL2 001 009 2

En tapant wsl –set-version Debian 1 on pourra remettre la distribution en version 1.

En tapant wsl –set-version kali-linux 1 on pourrait passer la distribution kali-linux en version 2. Il faut entrer le nom de la distribution exactement comme il apparait dans liste.

 En tapant wsl -d Debian dans une invite de commande on accède donc au bash de Debian.

WSL2 001 009 3

Les commandes sudo apt-get update et sudo apt-get upgrade nous indiquent  que la distribution est à jour.

WSL2 001 009 4

On tape exit pour quitter le bash et revenir à l'invite de commande Windows.

6 - Exporter et importer des distributions

Une des nouvelles fonctionnalités de WSL 2 et de permettre l'export et l'import de machines. Cela permet de faire des sauvegardes de distributions, de les installer sur d'autres ordinateurs ou de gardes des configurations différentes d'une distribution.

Les distributions sont exportées sous forme de fichiers .tar qui est un format de compression.

Pour exporter la distribution de nom Debian sous la forme du fichier de nom deb2.tar il faut entrer la commande : wsl - -export Debian deb2.tar

Ce fichier sera enregistré par défaut dans votre répertoire utilisateur (en général c:\users\nom de votre compte).

Nous allons maintenant repasser la distribution Debian en version 1 en tapant la commande wsl –set-version Debian 1

Nous allons exporter de nouveau cette distribution en version 1 vers le fichier que nous appellerons deb1.tar en entrant la commande : wsl --export Debian deb1.tar

Nous allons importer maintenant ces distributions respectivement sous les noms Debian1 et Debian2 en tapant ces commandes : 

wsl --import Debian1 c:\users\reseauhp deb1.tar

wsl --import Debian2 c:\users\reseauhp deb2.tar

Il faut indiquer le nom que vous donnez à la distribution importée, le chemin ou se situe le fichier tar et le nom du fichier (vous pouvez donc placer ou déplacer vos fichiers exportés où vous voulez).

Notez que cette commande semble instable. A plusieurs reprise le résultat de la commande a été fichier introuvable alors que la syntaxe était bonne. N'hésitez pas à la refaire plusieurs fois si cela vous arrive et vérifiez bien avant que les chemins soient corrects.

On voit que les machines sont importées en version 1 (deb2.tar avait été exporté à partir d'une distribution en version 2).

WSL2 001 009 5

Pour importer une machine en WSL 2, il faut préciser la version comme ci-après :

wsl --import Deb3 c:\users\reseauhp deb1.tar –version 2

On voit bien ici qu'on obtient bien une distribution Deb3 en version 2 (la fenêtre de commande utilisée ici est une fenêtre PowerShell de Windows Terminal, vous pouvez toujours utiliser l'invite de commande classique CMD).

WSL2 001 009 6

Nous n'allons garder que les 3 distributions Ubuntu, Kali-linux et Deb3.

Pour désinscrire une distribution il faut faire la commande wsl –unregister [nom de la distribution] (voir l'aide wsl –help).

Par exemple pour désinscrire nos 3 distributions on tape successivement les commandes :

wsl –unregister Debian1

wsl –unregister Debian1

wsl –unregister Debian

Il ne nous reste maintenant que 3 distributions dont Deb3 en version 2. On peut éventuellement supprimer les fichier tar pour gagner de la place.

7 - Lancer des applications Linux en mode graphique

Comme avec WSL 1 on peut lancer des applications graphiques Linux à condition de les installer avant car par défaut elles ne le sont pas dans les distributions proposées par Windows.

Reportez-vous à l'article " Lancer des logiciels Linux natifs avec Windows10 et son WSL" cité plus haut pour voir comment installer des applications graphiques.

Pour notre distribution Debian vous pouvez installer le bureau gnome en utilisant la commande linux : sudo apt-get install task-gnome-desktop L'installation est longue car il y a beaucoup de fichiers. Nous allons installer l'éditeur de texte graphique gedit en tapant sudo apt-get install gedit Pour lancer une application graphique il faut utiliser un xserveur. Nous allons utiliser le logiciel VcXsr (voir l'article " Lancer des logiciels Linux natifs avec Windows10 et son WSL" pour plus de précisions). Si comme avec wsl 1 vous lancez le xserveur et entrez la commande export DISPLAY = :0.0Puis gedit, vous verrez que la connexion échoue et que l'application ne se lance pas. Cela provient du fait que WSL 1 et WSL 2 ne fonctionnent pas de la même façon. Sous WSL 1, la distribution Linux émulée (la machine Linux) à la même adresse IP que la machine hôte (votre machine Windows).Sous WSL 2, la distribution Linux tourne dans une machine virtuelle qui a une adresse IP particulière. Si vous allez dans le panneau de configuration (modifier les options d'adaptateurs), vous voyez que WSL 2 a ajouté un connecteur virtuel sur lequel est branchée la machine virtuelle.   

WSL2 002 001

 Dans une invite de commande Windows en tapant ipconfig on obtient la liste des adresses IP.

Notre machine a pour adresse IP locale 172.20.0.122 (en générale votre machine devrait avoir une adresse ressemblant à 192.168.1.xx).

La machine Linux a pour IP 172.17.32.1

WSL2 002 001 1

Donc quand on tape export DISPLAY= :0.0, la machine Linux ne peut pas trouver le xserveur pour afficher l'application graphique. Il faut lui donner en plus l'adresse IP du xserveur qui tourne sur Windows.

Donc pour lancer gedit sous WSL 2 il faut entrer dans notre cas dans la fenêtre bash l'adresse IP de la machine Windows sous la forme :

export DISPLAY=172.20.0.122:0.0

puis taper gedit pour obtenir le fenêtre ci-dessous.

WSL2 002 002

Si vous les avez installées auparavant vous pourrez lancer et utiliser des applications comme le bureau Gnome, Firefox ou LibreOffice ou des applications spécifiques à Linux que l'on ne trouve pas sous Windows.

Attention toutefois, votre adresse IP locale sous Windows est susceptible de changer à chaque redémarrage de Windows. Si vous voulez inscrire en dur la commande export DISPLAY=xxx.yyy.zzz.aaa :0.0 dans les fichiers de configuration comme indiqué dans l'article WSL 1, pour vous éviter de la retaper avant de lancer une application graphique, il vous faudra attribuer une adresse IP fixe à votre ordinateur.

8 - Autres caractéristiques de WSL 2

Dans WSL 2, vous pouvez aussi

  • Exécuter des outils Windows (p. ex. notepad.exe) à partir d’une ligne de commande Linux.
  • Exécuter les outils Linux  à partir d’une ligne de commande Windows.
  • Partager des variables d’environnement entre Linux et Windows.
  • Utiliser le système de fichiers Linux pour des performances plus rapides en stockant vos fichiers projet dans le système de fichiers Linux  et non pas dans le système de fichiers racine Windows.
  • On peut accéder à son système de fichiers racine Linux à l’aide du gestionnaire de fichiers Windows en tapant explorer.exe . (avec un point à la fin).
  • WSL 2 offre de meilleures performances et une compatibilité à 100 % des appels système, cependant WSL 1 sera plus rapide si vous préférez stocker vos fichiers projet dans le système de fichiers Windows ou si vous utilisez des applications Windows pour accéder à des fichiers Linux.
  • Les opérations gourmandes en fichiers, telles que git clone,  apt update, apt upgrade, etc., sont toutes nettement plus rapides avec WSL 2.
  • WSL 2 utilise une plus petite quantité de mémoire au démarrage.
  • Si dans Linux vous créez une application réseau comme un serveur ou une base de données,  vous pourrez y accéder à partir de Windows en vous connectant à l'adresse localhost.
  • Vous  pouvez définir WSL 2 comme version par défaut en tapant dans une invite PowerShell : wsl --set-default-version 2. Les distributions Linux seront alors installées en version WSL 2 par défaut.

9 – Architectures de WSL 1 et WSL 2

Sur ce schéma sont représentées les architectures simplifiées de WSL1 et WSL2.

Architectures techniques WSL 1 et WSL 2

  • WSL 2 fonctionne en machine virtuelle légère avec un disque virtuel.
  • WSL 1 est une sorte de couche émulation où les appels systèmes Linux sont convertis en appels Windows via des ponts. WSL 1 est une couche intermédiaire entre le Noyau Linus et le noyau Windows.

Quand on reste dans Linux (commandes Linux internes)  WSL 2 sera plus rapide que WSL 1  qui devra interpréter et convertir les appels système Linux vers Windows. Par exemple une installation de paquet Linux sera environ 10 fois plus rapide  sous WSL 2 que sous WSL 1.

Par contre quand on sort du disque virtuel Linux, les écritures sur le système de fichiers Windows seront moins rapide sous WSL 2 que sous WSL 1. Dans WSL 2 le Noyau Linux communique directement avec l'hyperviseur qui lui a l'accès direct à la couche matérielle, ce qui explique une plus grande rapidité par rapport à WSL1 où la couche WSL doit passer par le noyau Linux avant d'accèder à la couche matérielle.

Quand sous WSL 2 on doit écrire dans le système de fichiers Windows, on voit que le circuit est plus long, il faut passer par l'hyperviseur puis dans le noyau Windows et ensuite dans la couche matérielle.

Selon le type de traitement utilisé on choisira WSL 1 ou WSL 2 en fonction du critère de rapidité désiré. On retiendra cependant que sous WSL 2 on peut manipuler sans danger les fichiers Windows, en tapant explorer.exe . (avec le point) dans un bash Linux. Pour des problèmes de compatibilité, Microsoft ne le conseille pas sous WSL 1.

 

No comments