<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WSL2 on kenji.blog</title><link>http://kenji.blog/fr/tags/wsl2/</link><description>Recent content in WSL2 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 07:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/tags/wsl2/index.xml" rel="self" type="application/rss+xml"/><item><title>Hyper-V vs WSL2 : Comparaison des technologies de virtualisation sur Windows</title><link>http://kenji.blog/fr/p/hyper-v-vs-wsl2-windows-virtualization/</link><pubDate>Sun, 13 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/hyper-v-vs-wsl2-windows-virtualization/</guid><description>&lt;img src="http://kenji.blog/p/hyper-v-vs-wsl2-windows-virtualization/img/eyecatch.jpg" alt="Featured image of post Hyper-V vs WSL2 : Comparaison des technologies de virtualisation sur Windows" />&lt;h2 id="1-introduction--lévolution-de-la-virtualisation-sur-windows">1. Introduction : L&amp;rsquo;évolution de la virtualisation sur Windows
&lt;/h2>&lt;p>La technologie de virtualisation sur la plateforme Windows a connu une évolution spectaculaire au cours des dernières décennies. Autrefois, les hyperviseurs de type 2 tiers (tels que VMware Workstation ou VirtualBox) étaient la norme, mais depuis que Microsoft a introduit &amp;ldquo;Hyper-V&amp;rdquo; avec Windows Server 2008, un hyperviseur de type 1 a également été intégré aux systèmes d&amp;rsquo;exploitation de bureau tels que Windows 10/11.&lt;/p>
&lt;p>Et ces dernières années, ce qui attire le plus l&amp;rsquo;attention parmi les développeurs est &amp;ldquo;WSL2 (Windows Subsystem for Linux 2)&amp;rdquo;. Alors que WSL1 s&amp;rsquo;appuyait sur la traduction des appels système, WSL2 utilise une &amp;ldquo;Lightweight Utility VM&amp;rdquo; (machine virtuelle utilitaire légère) qui applique la technologie d&amp;rsquo;Hyper-V, réalisant ainsi une compatibilité Linux complète et une amélioration spectaculaire des performances.&lt;/p>
&lt;p>Dans cet article, nous comparerons et expliquerons en détail ces deux puissantes technologies de virtualisation — le &amp;ldquo;Hyper-V&amp;rdquo; complet et le &amp;ldquo;WSL2&amp;rdquo; axé sur l&amp;rsquo;expérience du développeur — en termes d&amp;rsquo;architecture, de performances (CPU, mémoire, E/S disque), de configuration réseau, et des meilleurs cas d&amp;rsquo;utilisation, avec une profondeur technique abyssale.&lt;/p>
&lt;hr>
&lt;h2 id="2-théorie-fondamentale-des-hyperviseurs-et-comparaison-architecturale">2. Théorie fondamentale des hyperviseurs et comparaison architecturale
&lt;/h2>&lt;p>Pour comprendre la technologie de virtualisation, il est essentiel de classer les hyperviseurs (Virtual Machine Monitors : VMM) par type.&lt;/p>
&lt;h3 id="21-différences-entre-les-hyperviseurs-de-type-1-et-de-type-2">2.1. Différences entre les hyperviseurs de type 1 et de type 2
&lt;/h3>&lt;p>Un hyperviseur est une couche logicielle qui abstrait l&amp;rsquo;accès au matériel et permet à plusieurs systèmes d&amp;rsquo;exploitation (OS invités) de s&amp;rsquo;exécuter simultanément sur une seule machine physique.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Type 1 (Bare Metal)&lt;/strong> : S&amp;rsquo;exécute directement sur le matériel. Il n&amp;rsquo;y a pas de concept d&amp;rsquo;OS hôte (bien qu&amp;rsquo;il puisse y avoir un OS de gestion avec des privilèges stricts), l&amp;rsquo;overhead est extrêmement faible, offrant des performances et une sécurité élevées. Exemples : Hyper-V, VMware ESXi, Xen.&lt;/li>
&lt;li>&lt;strong>Type 2 (Hébergé)&lt;/strong> : S&amp;rsquo;exécute comme une application sur l&amp;rsquo;OS hôte (Windows, macOS, etc.). Étant donné que tous les accès au matériel passent par l&amp;rsquo;OS hôte, l&amp;rsquo;overhead est important. Exemples : VMware Workstation, Oracle VirtualBox.&lt;/li>
&lt;/ul>
&lt;p>Le Hyper-V de Windows est un pur &lt;strong>hyperviseur de Type 1&lt;/strong>. Lorsque Hyper-V est activé, l&amp;rsquo;OS Windows lui-même avec lequel l&amp;rsquo;utilisateur interagit habituellement s&amp;rsquo;exécute dans une machine virtuelle spéciale appelée &amp;ldquo;Partition racine&amp;rdquo; (Root Partition).&lt;/p>
&lt;h3 id="22-détails-architecturaux-dhyper-v">2.2. Détails architecturaux d&amp;rsquo;Hyper-V
&lt;/h3>&lt;p>L&amp;rsquo;architecture d&amp;rsquo;Hyper-V adopte une conception de micro-noyau et est basée sur des unités logiques d&amp;rsquo;isolation appelées partitions (Partition).&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;Matériel (CPU, RAM, Disque, NIC)&amp;#34;] --&amp;gt; B[&amp;#34;Hyperviseur Windows (Ring -1)&amp;#34;]
B --&amp;gt; C[&amp;#34;Partition racine (OS Windows)&amp;#34;]
B --&amp;gt; D[&amp;#34;Partition enfant 1 (VM Windows)&amp;#34;]
B --&amp;gt; E[&amp;#34;Partition enfant 2 (VM Linux)&amp;#34;]
C --&amp;gt; F[&amp;#34;VMBus (Bus de machine virtuelle)&amp;#34;]
D --&amp;gt; F
E --&amp;gt; F
C --&amp;gt; G[&amp;#34;VID (Pilote d&amp;#39;infrastructure de virtualisation)&amp;#34;]
C --&amp;gt; H[&amp;#34;VMWP.exe (Processus de travail)&amp;#34;]
&lt;/pre>
&lt;ul>
&lt;li>&lt;strong>Hyperviseur Windows&lt;/strong> : S&amp;rsquo;exécute avec le niveau de privilège le plus élevé du CPU (Ring -1 ou mode VMX Root) et gère uniquement l&amp;rsquo;allocation de la mémoire et la planification du CPU. Il ne contient pas de pilotes de périphériques.&lt;/li>
&lt;li>&lt;strong>Partition racine&lt;/strong> : La partition où s&amp;rsquo;exécute l&amp;rsquo;OS Windows hôte. Elle possède tous les pilotes de périphériques et contrôle directement le matériel. Elle fournit également les fonctions de gestion (fournisseur WMI, VMWP.exe, etc.) des partitions enfants.&lt;/li>
&lt;li>&lt;strong>Partition enfant&lt;/strong> : La partition où s&amp;rsquo;exécute l&amp;rsquo;OS invité. L&amp;rsquo;accès direct au matériel n&amp;rsquo;est pas autorisé ; elle envoie des requêtes d&amp;rsquo;E/S (Synthetic I/O) à la partition racine via un bus de mémoire partagée logique appelé &amp;ldquo;VMBus&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;h3 id="23-fonctionnement-de-wsl2-et-lightweight-utility-vm">2.3. Fonctionnement de WSL2 et Lightweight Utility VM
&lt;/h3>&lt;p>WSL2 utilise la même technologie de base d&amp;rsquo;hyperviseur de type 1 que Hyper-V, mais utilise un sous-ensemble de fonctionnalités appelé &amp;ldquo;Virtual Machine Platform (VMP)&amp;rdquo;, différent d&amp;rsquo;une machine virtuelle Hyper-V complète.&lt;/p>
&lt;p>La &amp;ldquo;Lightweight Utility VM&amp;rdquo; adoptée par WSL2 élimine complètement l&amp;rsquo;émulation de matériel hérité (comme les BIOS ou cartes mères virtuels) que possèdent les machines virtuelles traditionnelles.&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;OS Hôte Windows (Espace utilisateur)&amp;#34;]
B[&amp;#34;Système de fichiers NTFS&amp;#34;]
C[&amp;#34;Serveur de protocole 9P (Plan 9)&amp;#34;]
D[&amp;#34;Lightweight Utility VM (Noyau Linux)&amp;#34;]
E[&amp;#34;ext4.vhdx (Disque virtuel)&amp;#34;]
F[&amp;#34;Espace utilisateur Linux (Distributions WSL2)&amp;#34;]
A --&amp;gt; C
C --&amp;gt;| Partage de fichiers inter-OS | D
D --&amp;gt; E
D --&amp;gt; F
&lt;/pre>
&lt;p>La plus grande caractéristique de WSL2 est sa &lt;strong>rapidité de démarrage&lt;/strong> et son &lt;strong>intégration transparente avec l&amp;rsquo;OS hôte&lt;/strong>. Le noyau Linux démarre en moins d&amp;rsquo;une seconde, et il accède au système de fichiers (NTFS) du côté Windows via le protocole de système de fichiers réseau &lt;code>9P&lt;/code> de Plan 9.&lt;/p>
&lt;hr>
&lt;h2 id="3-analyse-approfondie-des-performances--ressources-de-calcul-et-es">3. Analyse approfondie des performances : Ressources de calcul et E/S
&lt;/h2>&lt;p>Les performances des machines virtuelles sont représentées par la somme des overheads pour chaque composant : CPU, mémoire et E/S disque.&lt;/p>
&lt;h3 id="31-cpu-et-overhead-de-changement-de-contexte">3.1. CPU et overhead de changement de contexte
&lt;/h3>&lt;p>Hyper-V et WSL2 utilisent tous deux la virtualisation assistée par le matériel (Intel VT-x / AMD-V). Les instructions CPU s&amp;rsquo;exécutent généralement à une vitesse native, mais lors de l&amp;rsquo;exécution d&amp;rsquo;instructions privilégiées ou d&amp;rsquo;E/S, une interruption appelée &amp;ldquo;VM Exit&amp;rdquo; se produit, entraînant un changement de contexte vers l&amp;rsquo;hyperviseur.&lt;/p>
&lt;p>Cet overhead CPU $T_{overhead}$ peut être exprimé par le modèle mathématique suivant :&lt;/p>
$$ T_{overhead} = \sum_{i=1}^{N} (t_{vm\_exit} + t_{hypercall\_process} + t_{vm\_entry}) $$&lt;p>Où :&lt;/p>
&lt;ul>
&lt;li>$N$ : Nombre d&amp;rsquo;occurrences de VM Exit par unité de temps&lt;/li>
&lt;li>$t_{vm\_exit}$ : Temps de transition de l&amp;rsquo;invité à l&amp;rsquo;hyperviseur&lt;/li>
&lt;li>$t_{hypercall\_process}$ : Temps de traitement des E/S ou des interruptions via VMBus&lt;/li>
&lt;li>$t_{vm\_entry}$ : Temps de retour de l&amp;rsquo;hyperviseur à l&amp;rsquo;invité&lt;/li>
&lt;/ul>
&lt;p>Comme WSL2 n&amp;rsquo;a pas d&amp;rsquo;émulation héritée, $t_{hypercall\_process}$ est optimisé et extrêmement petit. Par conséquent, pour les calculs CPU purs (comme la compilation du noyau ou l&amp;rsquo;inférence de modèles d&amp;rsquo;apprentissage automatique), la dégradation des performances est de l&amp;rsquo;ordre de quelques pourcents par rapport à un environnement bare metal.&lt;/p>
&lt;h3 id="32-mécanisme-dallocation-de-la-mémoire">3.2. Mécanisme d&amp;rsquo;allocation de la mémoire
&lt;/h3>&lt;p>En termes de méthodes de gestion de la mémoire, il existe une nette différence de philosophie de conception entre les deux.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Hyper-V (Dynamic Memory)&lt;/strong> : La partition racine alloue et récupère dynamiquement la mémoire en fonction des besoins en mémoire de la VM invitée. Cependant, la mémoire allouée en tant que cache de page dans l&amp;rsquo;OS invité a tendance à ne pas être libérée à moins que le système ne soit sous pression.&lt;/li>
&lt;li>&lt;strong>WSL2 (Récupération dynamique de mémoire)&lt;/strong> : WSL2 dispose d&amp;rsquo;un mécanisme propriétaire qui renvoie (Reclaim) régulièrement la mémoire devenue inutile (y compris le cache) dans la VM Linux à l&amp;rsquo;hôte Windows. Les premières versions de WSL2 avaient un problème où le cache de page Linux dévorait la mémoire Windows (processus Vmmem gonflé), mais cela a maintenant été amélioré par des patchs du noyau.&lt;/li>
&lt;/ul>
&lt;h3 id="33-caractéristiques-des-es-disque-vhdx-vs-ext4vhdx">3.3. Caractéristiques des E/S disque (VHDX vs ext4.vhdx)
&lt;/h3>&lt;p>Le goulot d&amp;rsquo;étranglement le plus fréquent des performances des machines virtuelles est l&amp;rsquo;E/S disque.&lt;/p>
&lt;p>La latence d&amp;rsquo;E/S $L_{total}$ est calculée comme suit :&lt;/p>
$$ L_{total} = L_{guest\_fs} + L_{vmbus} + L_{host\_fs} + L_{physical\_disk} $$&lt;p>&lt;strong>Pour Hyper-V&lt;/strong> :
Les invités Hyper-V typiques utilisent des disques virtuels au format &lt;code>VHDX&lt;/code>. Les requêtes d&amp;rsquo;E/S émises par le système de fichiers (ext4 ou NTFS) dans l&amp;rsquo;OS invité traversent le pilote de stockage de périphérique bloc de VMBus (storvsc) et sont traitées comme un accès au fichier VHDX sur le NTFS côté Windows.&lt;/p>
&lt;p>&lt;strong>Pour WSL2&lt;/strong> :
Les distributions Linux sur WSL2 s&amp;rsquo;exécutent sur un système de fichiers ext4 natif construit à l&amp;rsquo;intérieur d&amp;rsquo;un fichier dédié &lt;code>ext4.vhdx&lt;/code>. Les opérations de fichiers à l&amp;rsquo;intérieur de Linux (comme dans le répertoire &lt;code>~&lt;/code>) atteignent des performances natives équivalentes à celles de l&amp;rsquo;Hyper-V ci-dessus.
Cependant, &lt;strong>lors de l&amp;rsquo;accès aux fichiers du côté Windows depuis le Linux de WSL2 (comme &lt;code>/mnt/c/&lt;/code>)&lt;/strong>, ou vice versa, le processus est très différent. Cet accès inter-OS utilise le &lt;code>9P (Plan 9 File System Protocol)&lt;/code>.&lt;/p>
$$ L_{cross\_os} = L_{9p\_client} + L_{socket\_transfer} + L_{9p\_server} + L_{ntfs} $$&lt;p>L&amp;rsquo;accès via ce protocole 9P a un important overhead de traitement de sérialisation, et les performances chutent drastiquement (parfois avec un délai plus de 10 fois supérieur) pour les applications lisant et écrivant un grand nombre de petits fichiers (par exemple, &lt;code>npm install&lt;/code> ou les opérations Git dans un projet Node.js situé dans un répertoire côté Windows).
C&amp;rsquo;est pourquoi la &lt;strong>règle d&amp;rsquo;or absolue lors de l&amp;rsquo;utilisation de WSL2 est de toujours placer les fichiers de projet dans le système de fichiers natif de Linux (sous &lt;code>~/&lt;/code>)&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="4-structure-du-réseau--nat-default-switch-bridged">4. Structure du réseau : NAT, Default Switch, Bridged
&lt;/h2>&lt;p>La flexibilité des capacités réseau est l&amp;rsquo;une des principales différences entre Hyper-V et WSL2.&lt;/p>
&lt;h3 id="41-le-réseau-de-wsl2-basé-sur-le-nat">4.1. Le réseau de WSL2 (Basé sur le NAT)
&lt;/h3>&lt;p>Par défaut, le réseau de WSL2 est configuré en &amp;ldquo;NAT (Network Address Translation)&amp;rdquo; en utilisant la technologie de commutateur virtuel d&amp;rsquo;Hyper-V.
Une adresse IP privée (par exemple : &lt;code>172.20.x.x&lt;/code>) différente de celle de l&amp;rsquo;hôte Windows est automatiquement attribuée à la VM Linux. Un mécanisme est intégré pour que l&amp;rsquo;accès à &lt;code>localhost&lt;/code> depuis l&amp;rsquo;hôte Windows soit redirigé vers les services (ports) démarrés dans WSL2, permettant aux développeurs de tester des serveurs web sans se soucier du réseau.&lt;/p>
&lt;p>Récemment, un nouveau mode réseau appelé &amp;ldquo;Mirrored mode&amp;rdquo; (mode miroir) a été introduit dans les versions preview de WSL2. Cela vise à améliorer le support d&amp;rsquo;IPv6 et la compatibilité des connexions VPN (configurable via &lt;code>.wslconfig&lt;/code>).&lt;/p>
&lt;h3 id="42-commutateur-virtuel-dhyper-v-virtual-switch">4.2. Commutateur virtuel d&amp;rsquo;Hyper-V (Virtual Switch)
&lt;/h3>&lt;p>Hyper-V permet la construction de réseaux avancés au niveau de l&amp;rsquo;entreprise. Via le &amp;ldquo;Gestionnaire de commutateur virtuel&amp;rdquo;, il offre principalement trois modes :&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Externe (External)&lt;/strong> : Lie la carte réseau physique de la machine hôte au commutateur virtuel, permettant aux VM invitées de participer directement au réseau physique (connexion par pont). La VM obtient une IP du même sous-réseau que le réseau physique depuis un serveur DHCP.&lt;/li>
&lt;li>&lt;strong>Interne (Internal)&lt;/strong> : N&amp;rsquo;autorise que les communications entre l&amp;rsquo;OS hôte et les VM, et entre les VM elles-mêmes. Elles ne peuvent pas accéder directement au réseau externe.&lt;/li>
&lt;li>&lt;strong>Privé (Private)&lt;/strong> : N&amp;rsquo;autorise que les communications entre les VM, bloquant même la communication avec l&amp;rsquo;OS hôte. Utilisé pour créer des environnements de test isolés.&lt;/li>
&lt;/ol>
&lt;h3 id="43-construction-de-réseaux-hyper-v-avancés-avec-powershell">4.3. Construction de réseaux Hyper-V avancés avec PowerShell
&lt;/h3>&lt;p>Dans les environnements de développement et de test, si vous souhaitez construire un réseau NAT personnalisé pour les VM, PowerShell permet un contrôle détaillé. Voici un exemple de script pour créer un commutateur virtuel interne, y configurer le NAT, et fournir un accès à internet aux VM.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 1. Création d&amp;#39;un commutateur virtuel interne&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$SwitchName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;HyperV-NatSwitch&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-VMSwitch&lt;/span> &lt;span class="n">-SwitchName&lt;/span> &lt;span class="nv">$SwitchName&lt;/span> &lt;span class="n">-SwitchType&lt;/span> &lt;span class="n">Internal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 2. Configuration d&amp;#39;une adresse IP pour la carte réseau virtuelle côté hôte (IP servant de passerelle)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$GatewayIP&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;192.168.100.1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$NetPrefix&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mf">24&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$InterfaceAlias&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;vEthernet (&lt;/span>&lt;span class="nv">$SwitchName&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-NetIPAddress&lt;/span> &lt;span class="n">-IPAddress&lt;/span> &lt;span class="nv">$GatewayIP&lt;/span> &lt;span class="n">-PrefixLength&lt;/span> &lt;span class="nv">$NetPrefix&lt;/span> &lt;span class="n">-InterfaceAlias&lt;/span> &lt;span class="nv">$InterfaceAlias&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 3. Configuration du réseau NAT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$NatName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;HyperV-NatNetwork&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$NatSubnet&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;192.168.100.0/24&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-NetNat&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$NatName&lt;/span> &lt;span class="n">-InternalIPInterfaceAddressPrefix&lt;/span> &lt;span class="nv">$NatSubnet&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Commande de vérification&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Get-NetNat&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Avec cette configuration, en attribuant manuellement une IP &lt;code>192.168.100.x&lt;/code> et la passerelle &lt;code>192.168.100.1&lt;/code> à l&amp;rsquo;invité Hyper-V spécifié, vous pouvez construire votre propre segment NAT capable de communiquer avec l&amp;rsquo;extérieur via l&amp;rsquo;hôte.&lt;/p>
&lt;hr>
&lt;h2 id="5-cas-dutilisation-et-guide-de-sélection-pratique">5. Cas d&amp;rsquo;utilisation et guide de sélection pratique
&lt;/h2>&lt;p>Sur la base des différences d&amp;rsquo;architecture et de performances discutées jusqu&amp;rsquo;à présent, nous définissons dans quelles situations chacune de ces technologies devrait être adoptée.&lt;/p>
&lt;h3 id="51-scénarios-où-wsl2-doit-être-sélectionné">5.1. Scénarios où WSL2 doit être sélectionné
&lt;/h3>&lt;p>WSL2 a été conçu spécifiquement pour &amp;ldquo;l&amp;rsquo;amélioration de la productivité des développeurs&amp;rdquo;. Il est idéal pour les utilisations suivantes :&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Développement web et cloud-native&lt;/strong> : Développement de conteneurs utilisant Docker Desktop (backend WSL2) ou Podman.&lt;/li>
&lt;li>&lt;strong>Utilisation d&amp;rsquo;outils exclusifs à Linux&lt;/strong> : Utilisation quotidienne de bash, grep, awk, sed ou des compilateurs GCC et Clang pour Linux.&lt;/li>
&lt;li>&lt;strong>Applications GUI (WSLg)&lt;/strong> : Lorsque vous souhaitez exécuter de manière transparente des applications X11/Wayland de Linux sur le bureau Windows.&lt;/li>
&lt;li>&lt;strong>Apprentissage automatique et développement d&amp;rsquo;IA&lt;/strong> : Apprentissage rapide de TensorFlow ou PyTorch utilisant la fonction de passthrough GPU (NVIDIA CUDA sur WSL).&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Attention&lt;/strong> : Vous pouvez rencontrer des restrictions si vous souhaitez personnaliser finement le noyau ou construire des services complexes qui dépendent fortement de systemd (actuellement, systemd est pris en charge mais désactivé par défaut ou restreint).&lt;/p>
&lt;h3 id="52-scénarios-où-hyper-v-doit-être-sélectionné">5.2. Scénarios où Hyper-V doit être sélectionné
&lt;/h3>&lt;p>Hyper-V a pour but &amp;ldquo;la virtualisation de l&amp;rsquo;infrastructure et une isolation complète&amp;rdquo;. Il est essentiel pour les utilisations suivantes :&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Exécution de VM Windows&lt;/strong> : Lors de l&amp;rsquo;exécution de différentes versions de Windows (Windows Server, anciens Windows 10, etc.) comme environnements de test.&lt;/li>
&lt;li>&lt;strong>Virtualisation imbriquée (Nested Virtualization)&lt;/strong> : Lorsque vous souhaitez exécuter une machine virtuelle (Hyper-V ou KVM) à l&amp;rsquo;intérieur d&amp;rsquo;une autre machine virtuelle. Indispensable pour les environnements de test des ingénieurs d&amp;rsquo;infrastructure.&lt;/li>
&lt;li>&lt;strong>Besoins réseau avancés&lt;/strong> : Lorsqu&amp;rsquo;il est nécessaire de contrôler strictement la configuration du réseau, comme pour les connexions par pont externes (participation au même LAN), le marquage VLAN ou l&amp;rsquo;attribution de plusieurs NIC.&lt;/li>
&lt;li>&lt;strong>Instantanés (Checkpoints)&lt;/strong> : Fonctionnalité permettant de sauvegarder l&amp;rsquo;état d&amp;rsquo;une VM à un moment donné et de revenir en arrière instantanément à tout moment. Extrêmement utile pour les tests destructifs de logiciels ou l&amp;rsquo;analyse de logiciels malveillants.&lt;/li>
&lt;li>&lt;strong>Allocation fixe des ressources&lt;/strong> : Lorsque vous souhaitez fixer strictement le nombre de cœurs CPU et la quantité de mémoire pour minimiser l&amp;rsquo;impact sur l&amp;rsquo;OS hôte.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="6-considérations-sur-le-débit-des-avec-un-modèle-mathématique-annexe">6. Considérations sur le débit d&amp;rsquo;E/S avec un modèle mathématique (Annexe)
&lt;/h2>&lt;p>En tant qu&amp;rsquo;ingénieur système, lorsqu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;identifier les limites des performances d&amp;rsquo;E/S des deux, il est important de comprendre théoriquement la relation entre le débit $S$ et la taille de bloc $B$.&lt;/p>
&lt;p>Le débit de transfert de données $S$ est la quantité de données transférées par unité de temps, modélisée comme suit :&lt;/p>
$$ S(B) = \frac{B}{L_{setup} + \frac{B}{R_{max}}} $$&lt;ul>
&lt;li>$B$ : Taille de bloc (Octets)&lt;/li>
&lt;li>$L_{setup}$ : Latence fixe due à la configuration de la requête d&amp;rsquo;E/S et au changement de contexte&lt;/li>
&lt;li>$R_{max}$ : Bande passante maximale du matériel lors de la copie ou du transfert d&amp;rsquo;appareils&lt;/li>
&lt;/ul>
&lt;p>Pour l&amp;rsquo;accès aux fichiers de WSL2 via le protocole 9P, ce $L_{setup}$ devient très important (en raison des communications via socket et de la sérialisation/désérialisation du protocole). Par conséquent, lorsque la taille de bloc $B$ est petite (lecture et écriture massives de petits fichiers de quelques Ko), l&amp;rsquo;impact de $L_{setup}$ dans le dénominateur devient dominant, et le débit $S$ chute considérablement.
À l&amp;rsquo;inverse, pour l&amp;rsquo;accès aux VHDX via le VMBus d&amp;rsquo;Hyper-V, $L_{setup}$ est optimisé à un niveau proche de l&amp;rsquo;interruption matérielle, de sorte qu&amp;rsquo;il peut maintenir des IOPS élevés même pour des petits blocs.&lt;/p>
&lt;p>Cette réalité mathématique est le fondement logique de la bonne pratique selon laquelle &amp;ldquo;il ne faut pas placer les fichiers de projet du côté Windows avec WSL2&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="7-conclusion--deux-technologies-de-virtualisation-qui-coexistent">7. Conclusion : Deux technologies de virtualisation qui coexistent
&lt;/h2>&lt;p>Ce n&amp;rsquo;est pas que l&amp;rsquo;un entre Hyper-V et WSL2 soit meilleur que l&amp;rsquo;autre, ce sont &lt;strong>&amp;ldquo;deux solutions avec des objectifs différents&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>WSL2&lt;/strong> est le &amp;ldquo;meilleur outil d&amp;rsquo;intégration&amp;rdquo; pour briser la coquille de l&amp;rsquo;OS Windows et apporter l&amp;rsquo;écosystème Linux de manière transparente et rapide aux utilisateurs de Windows. Il n&amp;rsquo;est pas exagéré de dire que c&amp;rsquo;est l&amp;rsquo;environnement CLI ultime pour les développeurs.&lt;/li>
&lt;li>&lt;strong>Hyper-V&lt;/strong> est un &amp;ldquo;hyperviseur authentique&amp;rdquo; qui apporte au bureau la forte isolation et les capacités de gestion cultivées dans les centres de données d&amp;rsquo;entreprise. Il n&amp;rsquo;y a pas mieux pour la construction de réseaux, les tests du système d&amp;rsquo;exploitation Windows et la simulation d&amp;rsquo;environnements d&amp;rsquo;infrastructure.&lt;/li>
&lt;/ul>
&lt;p>Dans les environnements Windows modernes, ces deux technologies ne sont pas en concurrence directe, mais coexistent magnifiquement sur la même plateforme de VM. En les utilisant de manière appropriée en fonction de l&amp;rsquo;usage, Windows deviendra la station de travail d&amp;rsquo;ingénierie la plus puissante et la plus flexible au monde.&lt;/p></description></item><item><title>Le guide ultime de configuration de l'environnement de développement pour WSL2 (Windows Subsystem for Linux)</title><link>http://kenji.blog/fr/p/wsl2-ultimate-development-setup-guide/</link><pubDate>Sat, 12 Sep 2026 23:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/wsl2-ultimate-development-setup-guide/</guid><description>&lt;img src="http://kenji.blog/p/wsl2-ultimate-development-setup-guide/img/eyecatch.jpg" alt="Featured image of post Le guide ultime de configuration de l'environnement de développement pour WSL2 (Windows Subsystem for Linux)" />&lt;p>WSL2 (Windows Subsystem for Linux 2), qui offre un environnement de développement Linux natif sur Windows, est devenu un outil indispensable dans le développement de logiciels moderne. Cependant, il y a un monde de différence en termes de performances et d&amp;rsquo;expérience de développement entre l&amp;rsquo;utiliser dans son état par défaut et le régler de manière appropriée en comprenant son architecture.&lt;/p>
&lt;p>Dans cet article, nous expliquerons de manière exhaustive, avec plus de 10 000 caractères, toutes les étapes pour construire l&amp;rsquo;« environnement de développement ultime » exigé par les ingénieurs professionnels, en commençant par l&amp;rsquo;explication de l&amp;rsquo;architecture fondamentale de WSL2, les paramètres pour maximiser les performances, la construction d&amp;rsquo;un environnement de terminal confortable, l&amp;rsquo;intégration transparente avec Docker et VS Code, et enfin les paramètres réseau avancés.&lt;/p>
&lt;hr>
&lt;h2 id="1-architecture-de-wsl2-et-évolution-par-rapport-à-wsl1">1. Architecture de WSL2 et évolution par rapport à WSL1
&lt;/h2>&lt;p>Afin de libérer tout le potentiel de WSL2, il est d&amp;rsquo;abord important de comprendre sa structure interne. L&amp;rsquo;approche pour exécuter des binaires Linux sur Windows est fondamentalement différente entre le premier WSL (WSL1) et WSL2.&lt;/p>
&lt;h3 id="wsl1--couche-de-traduction-des-appels-système">WSL1 : Couche de traduction des appels système
&lt;/h3>&lt;p>WSL1 a adopté un mécanisme qui traduisait les appels système Linux en API Windows NT en temps réel. Cela avait l&amp;rsquo;avantage d&amp;rsquo;une surcharge de ressources très faible, car aucune machine virtuelle (VM) n&amp;rsquo;était utilisée. Cependant, il était difficile d&amp;rsquo;émuler complètement les appels système complexes, tels que les opérations d&amp;rsquo;E/S du système de fichiers, ce qui entraînait des baisses de performances désespérantes, notamment dans les processus traitant un grand nombre de petits fichiers, comme &lt;code>npm install&lt;/code> de Node.js ou les opérations sur les dépôts Git.&lt;/p>
&lt;h3 id="wsl2--vm-utilitaire-légère-et-noyau-linux-complet">WSL2 : VM utilitaire légère et noyau Linux complet
&lt;/h3>&lt;p>Dans WSL2, l&amp;rsquo;architecture a été remaniée pour qu&amp;rsquo;un véritable noyau Linux, construit par Microsoft, s&amp;rsquo;exécute directement sur une &lt;strong>« VM utilitaire légère » qui utilise un sous-ensemble de l&amp;rsquo;architecture Hyper-V&lt;/strong>. Cela garantit une compatibilité à 100 % des appels système, et en utilisant un disque virtuel (VHDX) avec un système de fichiers natif Linux ext4, les performances d&amp;rsquo;E/S des fichiers ont été considérablement améliorées par rapport à WSL1.&lt;/p>
&lt;p>Le diagramme Mermaid suivant illustre la différence structurelle entre WSL1 et WSL2.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph &amp;#34;Environnement du système d&amp;#39;exploitation Windows&amp;#34;
A[&amp;#34;Noyau Windows NT&amp;#34;]
A --&amp;gt; F[&amp;#34;Système de fichiers NTFS (Lecteur C:)&amp;#34;]
end
subgraph &amp;#34;Architecture WSL2&amp;#34;
B[&amp;#34;Hyperviseur Hyper-V&amp;#34;]
B --&amp;gt; C[&amp;#34;VM utilitaire légère&amp;#34;]
C --&amp;gt; D[&amp;#34;Noyau Linux (Microsoft)&amp;#34;]
D --&amp;gt; E[&amp;#34;Espace utilisateur Ubuntu (glibc, bash, etc.)&amp;#34;]
D --&amp;gt; G[&amp;#34;Disque virtuel ext4 (.vhdx)&amp;#34;]
end
A -.-&amp;gt;|&amp;#34;Partage de fichiers réseau par le protocole Plan 9 (9P)&amp;#34;| D
style B fill:#f9f,stroke:#333,stroke-width:2px
style D fill:#bbf,stroke:#333,stroke-width:2px
&lt;/pre>
&lt;p>La leçon importante à tirer de cette structure est que &lt;strong>« l&amp;rsquo;accès aux fichiers côté Linux (dans le VHDX) est extrêmement rapide, mais l&amp;rsquo;accès aux fichiers côté Windows (&lt;code>/mnt/c/&lt;/code>) est très lent car il passe par le protocole 9P »&lt;/strong>. Le code source de vos projets doit toujours être placé dans le répertoire personnel côté WSL (&lt;code>~&lt;/code>).&lt;/p>
&lt;hr>
&lt;h2 id="2-analyse-mathématique-des-performances--pourquoi-wsl2-est-il-rapide-">2. Analyse mathématique des performances : Pourquoi WSL2 est-il rapide ?
&lt;/h2>&lt;p>Évaluons quantitativement l&amp;rsquo;amélioration des performances de WSL2 à l&amp;rsquo;aide d&amp;rsquo;un modèle mathématique. L&amp;rsquo;une des opérations les plus chronophages dans le développement de logiciels est le traitement impliquant des E/S pour un grand nombre de fichiers (ex. : installation de bibliothèques ou compilation).&lt;/p>
&lt;p>Le temps d&amp;rsquo;exécution global $T_{total}$ d&amp;rsquo;un traitement est exprimé par la somme du temps de calcul par le processeur $T_{compute}$ et du temps consacré aux E/S disque $T_{io}$.&lt;/p>
$$ T_{total} = T_{compute} + T_{io} $$&lt;p>Dans le cas de WSL1, une surcharge se produit lors de la conversion des opérations côté Linux en opérations NTFS, le temps d&amp;rsquo;E/S est donc modélisé comme suit. Ici, $n$ est le nombre d&amp;rsquo;opérations sur les fichiers, $t_{ntfs\_syscall}$ est le temps d&amp;rsquo;exécution de l&amp;rsquo;appel système côté Windows, et $t_{trans}$ est la surcharge de la couche de traduction.&lt;/p>
$$ T_{wsl1\_io} = \sum_{i=1}^{n} (t_{ntfs\_syscall_i} + t_{trans_i}) $$&lt;p>D&amp;rsquo;autre part, dans le cas de WSL2, le noyau émet directement des E/S vers le système de fichiers ext4, de sorte que la surcharge n&amp;rsquo;est qu&amp;rsquo;un très léger retard $t_{virt}$ dû à la virtualisation.&lt;/p>
$$ T_{wsl2\_io} = \sum_{i=1}^{n} (t_{ext4_i} + t_{virt_i}) $$&lt;p>Dans un système de fichiers classique, comme $t_{ext4} \ll t_{ntfs\_syscall} + t_{trans}$, lorsque $n$ est très grand (des dizaines à des centaines de milliers d&amp;rsquo;opérations sur les fichiers), la différence de temps d&amp;rsquo;E/S entre WSL1 et WSL2 augmente de manière exponentielle.&lt;/p>
&lt;p>De plus, si le taux de surcharge des calculs du processeur dans un environnement virtualisé est $\rho$, avec la dernière virtualisation assistée par matériel (Intel VT-x / AMD-V), il se situe autour de $\rho \approx 0.01 \sim 0.03$ (1 à 3 %). Par conséquent, même dans des tâches purement de calcul, des performances comparables à un environnement Linux natif de $97\% \sim 99\%$ sont atteintes.&lt;/p>
&lt;hr>
&lt;h2 id="3-installation-et-construction-des-bases">3. Installation et construction des bases
&lt;/h2>&lt;p>Sur Windows 10/11, l&amp;rsquo;installation de WSL2 est devenue très simple. Il suffit d&amp;rsquo;ouvrir PowerShell avec les privilèges d&amp;rsquo;administrateur et d&amp;rsquo;exécuter la commande suivante.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># WSL2 et Ubuntu sont installés par défaut&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Pour spécifier une distribution particulière&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Peut être vérifié avec wsl --list --online&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span> &lt;span class="n">-d&lt;/span> &lt;span class="n">Ubuntu&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">24.04&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Après l&amp;rsquo;installation et un redémarrage, il vous sera demandé de configurer un nom d&amp;rsquo;utilisateur et un mot de passe UNIX lors du premier lancement. Cet utilisateur est indépendant de l&amp;rsquo;utilisateur Windows et n&amp;rsquo;est valide qu&amp;rsquo;au sein de WSL.&lt;/p>
&lt;p>Si vous utilisez déjà WSL1, vous pouvez le convertir en WSL2 avec les commandes suivantes.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Convertir une distribution existante en WSL2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-version&lt;/span> &lt;span class="n">Ubuntu&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Définir WSL2 comme version par défaut pour les distributions ajoutées à l&amp;#39;avenir&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-default-version&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="4-les-secrets-du-contrôle-des-ressources--wslconfig-et-wslconf">4. Les secrets du contrôle des ressources : .wslconfig et wsl.conf
&lt;/h2>&lt;p>L&amp;rsquo;un des plus grands pièges de WSL2 est la « consommation illimitée de mémoire (gonflement du processus Vmmem) ». Comme WSL2 utilise le cache de page du noyau Linux, chaque opération d&amp;rsquo;E/S consomme de la mémoire de l&amp;rsquo;hôte (Windows) de manière infinie. Pour éviter cela, il est impératif de limiter les ressources via des fichiers de configuration.&lt;/p>
&lt;p>Les fichiers de configuration de WSL2 sont divisés en deux : &lt;strong>&lt;code>.wslconfig&lt;/code> qui affecte l&amp;rsquo;ensemble de Windows&lt;/strong> et &lt;strong>&lt;code>wsl.conf&lt;/code> qui affecte l&amp;rsquo;intérieur de chaque distribution&lt;/strong>.&lt;/p>
&lt;h3 id="41-wslconfig-côté-windows">4.1. .wslconfig (Côté Windows)
&lt;/h3>&lt;p>Créez un fichier dans le répertoire de profil utilisateur de Windows (&lt;code>C:\Users\&amp;lt;Nom_d_utilisateur&amp;gt;\.wslconfig&lt;/code>) pour contrôler l&amp;rsquo;allocation des ressources à la VM.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># C:\Users\&amp;lt;Nom_d_utilisateur&amp;gt;\.wslconfig&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[wsl2]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Quantité maximale de mémoire allouée à la VM. Il est recommandé d&amp;#39;utiliser environ 50 % à 75 % de la mémoire totale de l&amp;#39;hôte&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">memory&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">16GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Nombre de cœurs de processeur à utiliser (tous les cœurs sont utilisés si omis)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">processors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Taille du fichier d&amp;#39;échange (swap)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">swap&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Emplacement du fichier d&amp;#39;échange (si vous souhaitez économiser de l&amp;#39;espace sur le lecteur C)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># swapfile=D:\\wsl\\swap.vhdx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Activer le transfert localhost (pour accéder à WSL depuis Windows via localhost)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">localhostForwarding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Libérer automatiquement la mémoire (Windows 11 uniquement)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Libère dynamiquement le cache de page et empêche le gonflement de Vmmem&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoMemoryReclaim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">dropcache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[experimental]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Fonctionnalités réseau avancées disponibles dans Windows 11 22H2 et versions ultérieures&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Cela permet la prise en charge d&amp;#39;IPv6 et le partage de la même adresse IP entre WSL et Windows&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">networkingMode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">mirrored&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">dnsTunneling&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">firewall&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoProxy&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="42-wslconf-côté-linux">4.2. wsl.conf (Côté Linux)
&lt;/h3>&lt;p>Modifiez &lt;code>/etc/wsl.conf&lt;/code> à l&amp;rsquo;intérieur de WSL pour contrôler le comportement spécifique de la distribution.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># /etc/wsl.conf (Modifié à l&amp;#39;intérieur de WSL)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[network]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Désactiver la génération automatique de /etc/resolv.conf au démarrage de WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Utile si vous souhaitez configurer un DNS personnalisé (ex. : 8.8.8.8)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">generateResolvConf&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Définir un nom d&amp;#39;hôte personnalisé&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">hostname&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">WSL-DevNode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[automount]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Paramètres lors du montage de lecteurs Windows&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">enabled&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">options&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;metadata,uid=1000,gid=1000,umask=022&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Changer le point de montage du lecteur C de /mnt/c à /c (pour raccourcir le chemin)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">root&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[boot]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Activer systemd (WSL 0.67.6 et versions ultérieures)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Cela permet à snap et à divers démons (tels que Docker) de fonctionner nativement&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">systemd&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[user]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Utilisateur connecté par défaut&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">default&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">kenji&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Pour appliquer ces paramètres, vous devez exécuter &lt;code>wsl --shutdown&lt;/code> dans PowerShell pour arrêter complètement la VM WSL avant de redémarrer.&lt;/p>
&lt;hr>
&lt;h2 id="5-lenvironnement-de-terminal-ultime--zsh--powerlevel10k">5. L&amp;rsquo;environnement de terminal ultime : Zsh + Powerlevel10k
&lt;/h2>&lt;p>Rester avec le bash par défaut n&amp;rsquo;augmentera pas votre productivité. En combinant Zsh, qui se vante de puissantes capacités de complétion et de visibilité, avec le thème ultra-rapide « Powerlevel10k », nous allons construire l&amp;rsquo;invite de commande (prompt) la plus puissante.&lt;/p>
&lt;h3 id="51-installation-et-configuration-de-windows-terminal">5.1. Installation et configuration de Windows Terminal
&lt;/h3>&lt;p>Installez « Windows Terminal » à partir du Microsoft Store. Ouvrez la configuration JSON (&lt;code>settings.json&lt;/code>), définissez le profil par défaut sur WSL (Ubuntu) et changez la police pour une Nerd Font orientée développement (par ex., &lt;code>HackGen Console NF&lt;/code> ou &lt;code>MesloLGS NF&lt;/code>).&lt;/p>
&lt;h3 id="52-installation-de-zsh-et-oh-my-zsh">5.2. Installation de Zsh et Oh My Zsh
&lt;/h3>&lt;p>Exécutez les commandes suivantes dans le terminal WSL.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mise à jour des paquets et installation de Zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install -y zsh git curl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Exécuter le script d&amp;#39;installation de Oh My Zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sh -c &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="53-introduction-de-powerlevel10k-et-des-plugins">5.3. Introduction de Powerlevel10k et des plugins
&lt;/h3>&lt;p>Nous allons introduire des plugins pour améliorer encore Zsh (coloration syntaxique et auto-complétion) ainsi que le thème Powerlevel10k.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Powerlevel10k&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone --depth&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span> https://github.com/romkatv/powerlevel10k.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="nv">$HOME&lt;/span>&lt;span class="p">/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/themes/powerlevel10k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-autosuggestions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-autosuggestions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-syntax-highlighting&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-syntax-highlighting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Modifiez &lt;code>~/.zshrc&lt;/code> pour activer le thème et les plugins.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Changements dans ~/.zshrc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ZSH_THEME&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;powerlevel10k/powerlevel10k&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajouter au tableau des plugins&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">plugins&lt;/span>&lt;span class="o">=(&lt;/span>git zsh-autosuggestions zsh-syntax-highlighting&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Enregistrez et exécutez &lt;code>source ~/.zshrc&lt;/code>, l&amp;rsquo;assistant de configuration de Powerlevel10k (&lt;code>p10k configure&lt;/code>) se lancera. Suivez les instructions à l&amp;rsquo;écran pour personnaliser l&amp;rsquo;invite selon vos préférences (style de l&amp;rsquo;invite, présence d&amp;rsquo;icônes, informations à afficher, etc.). Le nom de la branche Git et son statut, la version de Node.js, le temps d&amp;rsquo;exécution des commandes, etc. seront affichés en temps réel, ce qui améliorera considérablement l&amp;rsquo;efficacité du développement.&lt;/p>
&lt;hr>
&lt;h2 id="6-intégration-transparente-de-vs-code-remote---wsl">6. Intégration transparente de VS Code Remote - WSL
&lt;/h2>&lt;p>Pour le développement dans WSL2, l&amp;rsquo;extension « Remote - WSL » est le mécanisme qui permet d&amp;rsquo;accéder de manière transparente aux fichiers dans WSL depuis l&amp;rsquo;IDE (Visual Studio Code) installé côté Windows.&lt;/p>
&lt;h3 id="explication-de-larchitecture">Explication de l&amp;rsquo;architecture
&lt;/h3>&lt;p>Le diagramme de séquence suivant montre comment VS Code communique avec WSL2.&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;Développeur&amp;#34;
participant V as &amp;#34;Interface utilisateur de VS Code (Windows)&amp;#34;
participant S as &amp;#34;Serveur VS Code (WSL2)&amp;#34;
participant F as &amp;#34;Système de fichiers ext4 (WSL2)&amp;#34;
U-&amp;gt;&amp;gt;V: &amp;#34;Tapez `code .` dans le terminal WSL&amp;#34;
V-&amp;gt;&amp;gt;S: &amp;#34;Établir une connexion RPC via Vsock&amp;#34;
Note over V,S: Communication via les sockets Hyper-V sans utiliser TCP/IP
S-&amp;gt;&amp;gt;F: &amp;#34;Lire les fichiers sources / Exécuter le Linter&amp;#34;
F--&amp;gt;&amp;gt;S: &amp;#34;Retourner les données et l&amp;#39;analyse&amp;#34;
S--&amp;gt;&amp;gt;V: &amp;#34;Diffuser les résultats du serveur de langage vers l&amp;#39;UI&amp;#34;
V--&amp;gt;&amp;gt;U: &amp;#34;Afficher la coloration syntaxique et les erreurs&amp;#34;
&lt;/pre>
&lt;p>Le VS Code côté Windows fonctionne comme un simple « client léger (UI) », et tous les traitements lourds tels que le Language Server, le débogueur et l&amp;rsquo;exécution du terminal sont gérés par le « VS Code Server » côté WSL. Cela vous permet de garder votre environnement propre uniquement du côté WSL, sans avoir à installer Node.js ou Python du côté Windows.&lt;/p>
&lt;h3 id="paramètres-essentiels-de-vs-code">Paramètres essentiels de VS Code
&lt;/h3>&lt;p>Installez &lt;strong>&amp;ldquo;WSL&amp;rdquo; (ms-vscode-remote.remote-wsl)&lt;/strong> depuis les « Extensions » de VS Code. Ensuite, allez simplement dans le répertoire de votre projet dans le terminal WSL et exécutez &lt;code>code .&lt;/code>, VS Code se lancera côté Windows avec ce répertoire ouvert.&lt;/p>
&lt;p>&lt;strong>Point important (problème des codes de fin de ligne) :&lt;/strong>
Les codes de fin de ligne diffèrent entre Windows et Linux (Windows utilise &lt;code>CRLF&lt;/code>, Linux utilise &lt;code>LF&lt;/code>). Lors d&amp;rsquo;un développement sur WSL, assurez-vous d&amp;rsquo;unifier le paramètre &lt;code>core.autocrlf&lt;/code> de Git et les paramètres de fichier par défaut de VS Code à &lt;code>LF&lt;/code>. Si vous négligez cela, vous rencontrerez des erreurs mystérieuses lors de l&amp;rsquo;exécution de scripts shell ou de conteneurs Docker.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Configuration du code de fin de ligne de Git côté WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global core.autocrlf input
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Ajoutez également ce qui suit dans le fichier &lt;code>settings.json&lt;/code> de VS Code (Paramètres distants).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;files.eol&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;\n&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;terminal.integrated.defaultProfile.linux&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zsh&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-optimisation-de-docker-desktop-et-de-lintégration-wsl2">7. Optimisation de Docker Desktop et de l&amp;rsquo;intégration WSL2
&lt;/h2>&lt;p>Pour utiliser Docker dans un environnement WSL2, il existe principalement deux approches.&lt;/p>
&lt;ol>
&lt;li>Installer &lt;strong>Docker Desktop pour Windows&lt;/strong> et activer la fonctionnalité d&amp;rsquo;intégration WSL2&lt;/li>
&lt;li>Installer &lt;strong>nativement le moteur Docker&lt;/strong> directement à l&amp;rsquo;intérieur de WSL2 (ex. : Ubuntu)&lt;/li>
&lt;/ol>
&lt;h3 id="approche-1--docker-desktop-recommandé">Approche 1 : Docker Desktop (Recommandé)
&lt;/h3>&lt;p>Dans la plupart des cas, cela est recommandé car la gestion via l&amp;rsquo;interface graphique et l&amp;rsquo;accès transparent aux conteneurs entre Windows/WSL sont faciles. Vérifiez les points suivants depuis les paramètres de Docker Desktop (Settings).&lt;/p>
&lt;ul>
&lt;li>Cochez &lt;code>General&lt;/code> -&amp;gt; &lt;code>Use the WSL 2 based engine&lt;/code>.&lt;/li>
&lt;li>Cochez &lt;code>Resources&lt;/code> -&amp;gt; &lt;code>WSL Integration&lt;/code> -&amp;gt; &lt;code>Enable integration with my default WSL distro&lt;/code> et activez la distribution à utiliser (Ubuntu) avec le bouton à bascule.&lt;/li>
&lt;/ul>
&lt;p>Cela vous permet d&amp;rsquo;exécuter la commande &lt;code>docker&lt;/code> directement depuis le terminal WSL2, et la communication avec le démon Docker s&amp;rsquo;effectue via des machines virtuelles légères dédiées (&lt;code>docker-desktop&lt;/code> et &lt;code>docker-desktop-data&lt;/code>) gérées par Docker Desktop.&lt;/p>
&lt;h3 id="approche-2--installation-directe-du-moteur-docker-natif">Approche 2 : Installation directe du moteur Docker natif
&lt;/h3>&lt;p>Si vous avez des contraintes de réseau d&amp;rsquo;entreprise (comme éviter la monétisation de Docker Desktop) ou si vous souhaitez réduire au maximum la surcharge de performances, installez Docker en tant que pur serveur Ubuntu après avoir activé &lt;code>systemd&lt;/code> dans &lt;code>/etc/wsl.conf&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Extrait des instructions officielles d&amp;#39;installation de Docker sur WSL2 Ubuntu avec systemd activé&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install ca-certificates curl gnupg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo install -m &lt;span class="m">0755&lt;/span> -d /etc/apt/keyrings
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class="p">|&lt;/span> sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod a+r /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajout du dépôt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="s2">&amp;#34;deb [arch=&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>dpkg --print-architecture&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>. /etc/os-release &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$VERSION_CODENAME&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; stable&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajouter l&amp;#39;utilisateur actuel au groupe docker (pour exécuter sans sudo)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo usermod -aG docker &lt;span class="nv">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Après le redémarrage, &lt;code>systemctl start docker&lt;/code> fonctionnera exactement comme dans un environnement Linux natif et offrira des performances élevées.&lt;/p>
&lt;hr>
&lt;h2 id="8-intégration-des-clés-ssh--authentification-transparente-entre-windows-et-wsl">8. Intégration des clés SSH : Authentification transparente entre Windows et WSL
&lt;/h2>&lt;p>Lors de la réalisation de clones SSH Git ou de la connexion SSH à des serveurs distants, gérer des clés SSH séparées côté Windows et côté WSL est très fastidieux. Pour allier sécurité et commodité, nous allons configurer un pont pour transférer l&amp;rsquo;agent SSH en cours d&amp;rsquo;exécution côté Windows (ou un gestionnaire de mots de passe comme 1Password) vers le côté WSL.&lt;/p>
&lt;p>Ici, nous expliquerons l&amp;rsquo;approche la plus sécurisée et moderne consistant à utiliser la &lt;strong>fonctionnalité d&amp;rsquo;agent SSH de 1Password&lt;/strong> ou &lt;strong>l&amp;rsquo;OpenSSH Authentication Agent de Windows&lt;/strong>, et à la transférer vers un socket de domaine UNIX de WSL2 en utilisant &lt;code>npiperelay&lt;/code> et &lt;code>socat&lt;/code>.&lt;/p>
&lt;h3 id="transfert-de-socket-ssh-agent">Transfert de socket ssh-agent
&lt;/h3>&lt;p>Habituellement, l&amp;rsquo;agent SSH, qui est fourni en tant que Named Pipe (tube nommé) sous Windows, doit être converti en un fichier socket côté WSL. Il est facile d&amp;rsquo;utiliser des fonctionnalités fournies par &lt;code>wsl-ssh-agent&lt;/code> ou 1Password.&lt;/p>
&lt;p>Depuis l&amp;rsquo;écran des paramètres de 1Password, activez « Developer » -&amp;gt; « Use the SSH agent » (Utiliser l&amp;rsquo;agent SSH).
Ensuite, ajoutez la configuration suivante dans le fichier &lt;code>~/.zshrc&lt;/code> ou &lt;code>~/.bashrc&lt;/code> côté WSL pour lier automatiquement le socket lors de la connexion.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajout dans ~/.zshrc (exemple lors de l&amp;#39;utilisation de 1Password SSH Agent)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">SSH_AUTH_SOCK&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nv">$HOME&lt;/span>/.ssh/agent.sock
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Transférer avec socat et npiperelay si le socket n&amp;#39;existe pas ou si le processus n&amp;#39;est pas lié au démarrage de WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ALREADY_RUNNING&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ps -aux &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> wc -l&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$ALREADY_RUNNING&lt;/span> -eq &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -S &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rm &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Démarrer socat en arrière-plan et connecter le Named Pipe côté Windows au socket UNIX côté WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">(&lt;/span>setsid socat UNIX-LISTEN:&lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>,fork EXEC:&lt;span class="s2">&amp;#34;npiperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span>,nofork &lt;span class="p">&amp;amp;&lt;/span>&lt;span class="o">)&lt;/span> &amp;gt;/dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>L&amp;rsquo;installation de &lt;code>npiperelay.exe&lt;/code> et l&amp;rsquo;ajout à la variable d&amp;rsquo;environnement PATH côté Windows sont nécessaires au préalable.&lt;/li>
&lt;/ul>
&lt;p>Une fois cette configuration terminée, lors de l&amp;rsquo;exécution de &lt;code>ssh-add -l&lt;/code> depuis le terminal WSL, la liste des clés publiques des clés SSH enregistrées dans 1Password ou côté Windows s&amp;rsquo;affichera. Cela vous permet de passer l&amp;rsquo;authentification en toute sécurité sans avoir à copier les fichiers de clé privée dans WSL.&lt;/p>
&lt;hr>
&lt;h2 id="9-maintenance--optimisation-compression-dun-vhdx-gonflé">9. Maintenance : Optimisation (compression) d&amp;rsquo;un VHDX gonflé
&lt;/h2>&lt;p>L&amp;rsquo;un des plus grands inconvénients de WSL2 est sa spécification selon laquelle « la taille du fichier du disque virtuel côté Windows (.vhdx) ne rétrécit pas automatiquement, même si vous supprimez des images Docker ou des fichiers ». Si vous continuez à développer pendant une longue période, le fichier ext4.vhdx va gonfler jusqu&amp;rsquo;à des dizaines ou des centaines de gigaoctets.&lt;/p>
&lt;p>Pour libérer de l&amp;rsquo;espace disque, vous devez optimiser (Compacter) régulièrement le VHDX depuis le côté Windows.&lt;/p>
&lt;ol>
&lt;li>Tout d&amp;rsquo;abord, arrêtez complètement WSL.
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-shutdown&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>Ouvrez PowerShell avec des privilèges d&amp;rsquo;administrateur et exécutez la commande &lt;code>diskpart&lt;/code> suivante, ou la commande &lt;code>Optimize-VHD&lt;/code> du module Hyper-V (cette dernière n&amp;rsquo;est disponible que si Hyper-V est activé).&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Si le module Hyper-V est disponible&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Optimize-VHD&lt;/span> &lt;span class="n">-Path&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$env:LOCALAPPDATA&lt;/span>&lt;span class="s2">\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span> &lt;span class="n">-Mode&lt;/span> &lt;span class="n">Full&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Si vous utilisez diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Entrez interactivement dans l&amp;#39;invite suivante&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="nb">select &lt;/span>&lt;span class="n">vdisk&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;C:\Users\&amp;lt;Nom_d_utilisateur&amp;gt;\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">attach&lt;/span> &lt;span class="n">vdisk&lt;/span> &lt;span class="n">readonly&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">compact&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">detach&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">exit&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>En effectuant cette opération régulièrement, vous pouvez récupérer la capacité du lecteur C inutilement consommée.&lt;/p>
&lt;hr>
&lt;h2 id="10-conclusion">10. Conclusion
&lt;/h2>&lt;p>WSL2 a complètement dépassé le cadre d&amp;rsquo;être un simple « Linux bonus fonctionnant sur Windows » et a évolué vers une puissante plateforme de développement qui n&amp;rsquo;est pas inférieure, et peut-être même supérieure, à macOS et aux machines Linux natives.&lt;/p>
&lt;p>En appliquant tous les paramètres expliqués cette fois-ci (optimisation des ressources avec &lt;code>.wslconfig&lt;/code>, amélioration du terminal avec Zsh + Powerlevel10k, accès transparent avec VS Code Remote, intégration SSH et maintenance VHDX), un « environnement de développement ultime » rapide, sécurisé et sans stress est achevé.&lt;/p>
&lt;p>La configuration de l&amp;rsquo;environnement demande un peu d&amp;rsquo;effort, mais une fois les paramètres fixés, il ne fait aucun doute que votre future productivité en ingénierie s&amp;rsquo;améliorera considérablement. N&amp;rsquo;hésitez pas à explorer des personnalisations supplémentaires sur la base de ce guide, en fonction de vos propres projets et préférences.&lt;/p></description></item></channel></rss>