Bash sur Windows : comment ça fonctionne

Par:
fredericmazue

mer, 27/04/2016 - 14:58

Microsoft a publié un très intéressant billet donnant des informations techniques sur le fonctionnement du Bash Linux sous Windows 10. Une intégration que tous les administrateurs systèmes accueillent avec enthousiasme. Les amateurs de Linux également.

Microsoft commence par rappeler que le noyau Windows NT a été dès le départ conçu pour fonctionner avec des sous-systèmes. Un de ces sous-systèmes est d'ailleurs l'interface de programmation Win32.

En ce qui concerne Bash, celui-ci fonctionne dans Windows 10 dans un sous-système appelé WSL, pour Windows Subsystem for Linux. Celui-ci est formé de plusieurs composants, en mode utilisateur et en mode noyau. En mode utilisateur, se trouve la gestion du cycle de vie des instances Linux, en mode noyau se trouvent des pilotes et des processus Pico.

La charnière du tout est le LXSS Manager Service, qui est un courtier vers les pilotes Linux, par lequel Bash invoque les librairies Linux. Ce service s'occupe aussi de la synchronisation dans les contextes particuliers à Windows comme l'installation et la désinstallation des applications, et bloque les opérations Linux pendant ces moments.

Les processus Linux tournent dans des processus Pico. Un processus Pico est un conteneur de virtualisation léger. Les processus Pico sont une création de Microsoft Research dans le cadre du projet Drawbridge, dont le site officiel est ici.

Le processus Pico expose à son processus Linux qu'il gère les appels systèmes que celui-ci s'attend à trouver dans le noyau Linux. Les appels systèmes Linux sont mappés vers les API Windows NT et transmis au noyau par les pilotes évoqués plus haut.

Le billet mentionne par exemple les appels systèmes Linux ultra utilisés fork, open, and kill qui sont mappés vers les API NT NtCreateProcess, NtOpenFile, and NtTerminateProcess. Sachant que le fork de Linux n'a pas d'équivalent direct sous Windows. Alors, le pilote se charge de faire la cuisine nécessaire, préliminaire à l'appel de NtCreateProcess.

WSL procure un support de systèmes de fichiers virtuels similaires à celui du noyau Linux et travaille avec deux systèmes de fichiers. Le premier, VolFs, apporte tout ce qu'un système de fichiers Linux apporte : permissions, liens symboliques, noms de fichiers qui ne seraient pas légaux sous Windows, sensibilité à la casse, etc. Il est possible de chrooter un répertoire VolFS avec chroot.

Enfin DriveFs, s'occupe de l'interopérabilité avec Windows. C'est par lui que les volumes Windows sont montés, et que Bash peut accéder aux fichiers Windows résidant dans ces volumes:  /mnt/c, /mnt/d, etc. C'est encore grâce à DriveFS qu'un fichier peut être édité par exemple dans Visual Studio, tout en étant manipulé par une commande Bash depuis WSL.