WSL : développez sous Linux sans quitter Windows 10 (et sans VM)

Cela fait maintenant deux ans que Microsoft a introduit WSL (Windows Subsystem for Linux) au cœur même de Windows 10. Peut-être avez-vous lu ou entendu parler de « Bash on Ubuntu on Windows », la première appellation de cette fonctionnalité ? Une nouveauté relativement inattendue de la part de l’éditeur de Redmond… bien qu’à y regarder de plus près elle s’inscrive dans une démarche qui remonte assez loin, aux origines même de Windows NT. En effet, Il y a 25 ans, Windows NT 3.1 introduisait un sous-système POSIX. Le but était d’offrir une API POSIX permettant la compilation de programmes issus du monde UNIX (faisant au passage de Windows NT un système certifié POSIX pour la partie API, ce que Linux n’est pas). Plus tard, POSIX subsystem fut remplacé par Windows Services for Unix (SFU), lequel fut finalement abandonné sous Windows 8. Mais WSL pousse le curseur beaucoup plus loin que ces prédécesseurs peu connus…

WSL, c’est quoi exactement ?

En premier lieu, de quoi s’agit-il au juste ? De fait, WSL n’est ni un portage de programmes Linux (comme l’est Cygwin), ni une VM. En gros, WSL, c’est un système intégré dans Windows, et fonctionnant de concert avec le noyau NT, afin d’émuler le fonctionnement d’un noyau Linux, avec tous les services de base nécessaires (systèmes de fichiers, devices, sockets, gestion des signaux etc.) En clair, WSL permet l’exécution de binaires ELF64 (des programmes Linux compilés) directement dans Windows, sans machine virtuelle, et sans recompilation. Pour réaliser cela, Windows 10 a introduit un nouveau type de process, les « pico process ». Les pico process cohabitent avec les process NT standards, mais sont gérés conjointement par le noyau NT (pour les fonctions essentielles de management de process) et par un driver spécifique (lxss.sys et lxcore.sys) pour la prise en charge des API système Linux. Le driver traduit les appels au noyau Linux en appels NT équivalents lorsque c’est possible, et dans les autres cas émule la fonctionnalité manquante.
Au final, WSL permet l’installation au sein de Windows 10 de distributions Linux entières. Ces distributions sont accessibles via le Microsoft Store, et s’installent aussi simplement qu’une application Windows. Le seul prérequis est l’activation préalable de l’option « Sous-système Windows pour Linux » dans les paramètres Windows.

La principale différence entre ces distributions et les distributions habituelles est qu’elles n’intègrent pas de noyau. À la place, elles reposent sur les drivers de WSL. Il s’agit donc de distributions userland complètes, avec en particulier leur système de gestion de packages, et l’accès direct aux dépôts natifs. A ce jour sont disponibles : Debian, Ubuntu, Suse Linux Enterprise Server, OpenSUSE et KALI Linux.

Première utilisation…

Une fois la distribution de votre choix installée, Linux n’est plus qu’à un clic depuis le menu Windows. Une fois votre première session ouverte, a lieu le téléchargement des packages restants et la finalisation de l’installation. Puis après avoir répondu à quelques questions (notamment l’utilisateur Linux à créer), le système est prêt. Vous pouvez dès à présent (et si vous avez choisi Debian ou Ubuntu), lancer un sudo apt-get update suivi par un sudo apt-get dist-upgrade pour installer les dernières mises à jour depuis les dépôts officiels de la distribution.

Côté fonctionnement interne, WSL embarque deux nouveaux systèmes de fichiers : VolFs et DrvFs. VolFs supporte la plupart des sémantiques du système de fichiers virtuel (VFS) de Linux (permissions, liens symboliques, noms de fichiers avec les caractères non admis par Windows et sensibles à la casse, FIFOs, sockets, devices…). C’est le système de fichiers utilisé pour le montage racine du VFS linux et toute l’arborescence qui en est issue (les répertoires système ou applicatif /usr, /bin, /etc… ou données des utilisateurs /home). Le support physique de ce point de montage est fourni par un sous-répertoire de C:\Users\AppData\Local. Au passage, il est tout à fait déconseillé de tenter d’accéder à cet espace depuis un programme Windows, les métadonnées du système de fichiers VolFs n’étant pas gérées par les applications Windows. Vous risquez tout simplement de corrompre le système de fichiers. Il n’y a donc pas d’interopérabilité avec Windows à ce niveau.
Conséquence de l’utilisation d’un répertoire du dossier utilisateur Windows pour héberger le système de fichiers racine, il découle que chaque utilisateur dispose de son environnement WSL personnel, et peut donc accéder aux privilèges root pour installer des applications Linux, sans interférer avec les autres utilisateurs.
Le second système de fichiers, DrvFs, permet quant à lui l’interopérabilité avec Windows. Les lecteurs Windows sont automatiquement montés sous /mnt en utilisant ce système de fichiers : /mnt/c, /mnt/d etc. DrvFs fonctionne de façon similaire à VolFs ; toutefois il adhère aux règles Windows en ce qui concerne les noms de fichiers ou les permissions. Les types de fichiers spéciaux tels que les FIFOs ou les sockets ne sont pas supportés.
Grâce à DrvFs, vous pouvez monter une clé USB formatée en NTFS :

sudo mkdir /mnt/e
sudo mount -t drvfs E: /mnt/e

Pour monter un partage réseau :

sudo mount -t drvfs '\\serv\share' /mnt/share

Microsoft maintient un site de documentation consacré à WSL. On trouve également sur le blog de WSL un post détaillé sur les systèmes de fichiers.

Pour qui ?

Au final, avec cette fonctionnalité, Microsoft vise le public des développeurs. L’intention est de fournir un environnement permettant de retrouver directement sur son PC les outils de développement et de run d’un vrai serveur Linux. Il est ainsi possible de tester vos développements dans leur environnement cible, tout en restant sous Windows 10. Très simplement et sans VM, vous pouvez avoir sur votre poste tous les outils et services GNU/Linux dont vous avez besoin, et continuer à travailler sans serveur physique, sans VM, voire sans réseau. Vous pouvez même installer plusieurs distributions et les faire fonctionner en même temps.
Au dela, WSL peut également vous rendre service si vous souhaitez simplement disposer dans Windows des outils en ligne de commande auxquels vous êtes habitués (à la manière de Cygwin). L’avantage par rapport à une VM, c’est la légèreté, puisque les process Windows et Linux se partagent la mémoire, WSL consomme moins de ressources CPU, mémoire et disque. C’est aussi l’intégration dans Windows, vous pouvez accéder aux lecteurs via /mnt/c, /mnt/d etc., monter des chemins réseau, accéder aux périphériques de stockage USB.
Attention toutefois : WSL n’a pas pour but de fournir un bureau Linux. Si l’exécution d’applications graphiques est possible, il faut toutefois disposer d’un serveur X sous Windows (par exemple : XMing). WSL est avant tout conçu pour une utilisation en ligne de commande.

Le retour de la ligne de commande ?

Alors que les environnements de développement modernes reposent généralement sur des paradigmes visuels et des IHM graphiques, WSL s’inscrit dans une approche « ligne de commande » qui peut paraître, pour certains jeunes développeurs, datée, pour ne pas dire archaïque voire complètement dépassée. WSL participe en réalité à un écosystème bien intégré dans Windows, à côté d’autres outils maison qui ont également prouvé leur utilité et leur capacité à résoudre efficacement certains types de problèmes, tels que PowerShell. Cette approche est mise en avant par Microsoft dans un blog dédié à la ligne de commande.
Sous Windows, les outils orientés ligne de commande reposent sur la console, une application intégrée au système d’exploitation dès les toutes premières versions, au tournant des années 80-90. La console, conçue originellement pour le shell CMD.EXE, n’avait pratiquement pas évolué depuis cette époque de pionniers. Avec l’arrivée récente de WSL elle a dû subir un petit lifting pour la rendre vraiment utilisable avec Linux : compatibilité VT100 améliorée, gestion de la souris et du copier/coller, couleurs… Du coup, ces améliorations bénéficient aussi aux autres shells que sont CMD.EXE ou PowerShell.

Et Cygwin ?

WSL semble arriver sur un terrain déjà occupé par Cygwin. Effectivement, ce dernier permet depuis des années d’utiliser un shell et des commandes GNU/Linux sous Windows. En fait, la question de la comparaison avec WSL est tout à fait légitime et vient naturellement. Cependant, il existe des différences importantes entre ces deux systèmes, qui devraient vous permettre de choisir assez facilement, selon l’utilisation que vous envisagez, et selon la version de Windows que vous utilisez.
Cygwin est une collection de programmes GNU, Linux ou UNIX portés sous Windows à partir des sources, après les éventuelles modifications nécessaires pour les adapter aux paradigmes Windows (par exemple : utilisation de noms de fichiers Windows). Fondamentalement, il s’agit donc de programmes Windows, dont parfois les fonctionnalités ont pu être adaptées. Vous n’êtes pas sous Linux, et vous n’aurez pas accès aux services d’une distribution Linux.
Comme nous l’avons vu, WSL fourni une compatibilité au niveau binaire. Pas de recompilation, pas de modification des programmes. Vous utilisez une vraie distribution Linux, avec tous les packages mis à disposition par la distribution.
Toutefois il existe toujours une place pour Cygwin. En effet, WSL n’est disponible que sous Windows 10 64 bits. Qui plus est, pour l’utiliser pleinement (et pouvoir installer les distributions mise à disposition sur le Store Microsoft) il vous faudra la « Fall Creators Update » (version 1709, build 16299.15) mise à disposition depuis octobre 2017 (WSL peut être utilisé avec une version plus ancienne, mais avec quelques limitations : activation préalable du mode développeur de Windows, et choix de la distribution réduit à Ubuntu). Cygwin, a contrario, peut être installé sur n’importe quelle version de Windows.

Dans l’IoT aussi…

Pour aller plus loin, je vous recommande vivement le numéro 23 de Hackable Magazine (mars-avril 2018, on peut le commander sur le site de l’éditeur), qui publie mon article consacré à WSL (p. 60). Vous y découvrirez des informations détaillées et pratiques sur l’architecture du système, son installation, et quelques cas concrets d’utilisation dans une optique plus « embarqué ».

Leave a Reply

Your email address will not be published. Required fields are marked *