<?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/de/tags/wsl2/</link><description>Recent content in WSL2 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 07:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/de/tags/wsl2/index.xml" rel="self" type="application/rss+xml"/><item><title>Hyper-V vs WSL2: Vergleich von Virtualisierungstechnologien auf Windows</title><link>http://kenji.blog/de/p/hyper-v-vs-wsl2-windows-virtualization/</link><pubDate>Sun, 13 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/de/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: Vergleich von Virtualisierungstechnologien auf Windows" />&lt;h2 id="1-einführung-die-evolution-der-virtualisierung-unter-windows">1. Einführung: Die Evolution der Virtualisierung unter Windows
&lt;/h2>&lt;p>Die Virtualisierungstechnologie auf der Windows-Plattform hat sich in den letzten Jahrzehnten dramatisch entwickelt. Früher waren Type-2-Hypervisoren von Drittanbietern (wie VMware Workstation und VirtualBox) der Mainstream, aber seit Microsoft &amp;ldquo;Hyper-V&amp;rdquo; in Windows Server 2008 eingeführt hat, sind Type-1-Hypervisoren auch in Desktop-Betriebssysteme wie Windows 10/11 integriert.&lt;/p>
&lt;p>In den letzten Jahren hat &amp;ldquo;WSL2 (Windows Subsystem for Linux 2)&amp;rdquo; bei Entwicklern die meiste Aufmerksamkeit erregt. Während WSL1 auf die Übersetzung von Systemaufrufen (Translation) angewiesen war, nutzt WSL2 eine &amp;ldquo;Lightweight Utility VM&amp;rdquo;, die Hyper-V-Technologie anwendet, um vollständige Linux-Kompatibilität und dramatische Leistungsverbesserungen zu erzielen.&lt;/p>
&lt;p>In diesem Artikel werden wir die Architektur, Leistung (CPU, Speicher, Festplatten-I/O), Netzwerkkonfiguration und optimale Anwendungsfälle dieser beiden leistungsstarken Virtualisierungstechnologien – der voll ausgestatteten &amp;ldquo;Hyper-V&amp;rdquo; und der auf Entwicklererfahrung fokussierten &amp;ldquo;WSL2&amp;rdquo; – mit tiefgreifenden technischen Details ausführlich vergleichen und erklären.&lt;/p>
&lt;hr>
&lt;h2 id="2-grundlegende-theorie-von-hypervisoren-und-architekturvergleich">2. Grundlegende Theorie von Hypervisoren und Architekturvergleich
&lt;/h2>&lt;p>Um die Virtualisierungstechnologie zu verstehen, ist die Typklassifizierung von Hypervisoren (Virtual Machine Monitors: VMM) unerlässlich.&lt;/p>
&lt;h3 id="21-unterschiede-zwischen-type-1--und-type-2-hypervisoren">2.1. Unterschiede zwischen Type-1- und Type-2-Hypervisoren
&lt;/h3>&lt;p>Ein Hypervisor ist eine Softwareschicht, die den Hardwarezugriff abstrahiert und es mehreren Betriebssystemen (Gastbetriebssystemen) ermöglicht, gleichzeitig auf einer einzigen physischen Maschine zu laufen.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Type 1 (Bare-Metal)&lt;/strong>: Läuft direkt auf der Hardware. Das Konzept eines Host-Betriebssystems existiert nicht (streng genommen kann es ein Management-Betriebssystem mit Privilegien geben), was einen extrem geringen Overhead aufweist und hohe Leistung sowie Sicherheit bietet. Beispiele: Hyper-V, VMware ESXi, Xen.&lt;/li>
&lt;li>&lt;strong>Type 2 (Hosted)&lt;/strong>: Läuft als Anwendung auf einem Host-Betriebssystem (wie Windows oder macOS). Alle Hardwarezugriffe laufen über das Host-Betriebssystem, was zu einem größeren Overhead führt. Beispiele: VMware Workstation, Oracle VirtualBox.&lt;/li>
&lt;/ul>
&lt;p>Windows Hyper-V ist ein reiner &lt;strong>Type-1-Hypervisor&lt;/strong>. Wenn Hyper-V aktiviert ist, läuft das Windows-Betriebssystem, mit dem der Benutzer normalerweise interagiert, tatsächlich innerhalb einer speziellen virtuellen Maschine, die als &amp;ldquo;Root-Partition (Root Partition)&amp;rdquo; bezeichnet wird.&lt;/p>
&lt;h3 id="22-architekturdetails-von-hyper-v">2.2. Architekturdetails von Hyper-V
&lt;/h3>&lt;p>Die Hyper-V-Architektur verwendet ein Microkernel-Design und basiert auf logischen Isolationseinheiten, die als Partitionen (Partitions) bezeichnet werden.&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;Hardware (CPU, RAM, Festplatte, NIC)&amp;#34;] --&amp;gt; B[&amp;#34;Windows Hypervisor (Ring -1)&amp;#34;]
B --&amp;gt; C[&amp;#34;Root-Partition (Windows OS)&amp;#34;]
B --&amp;gt; D[&amp;#34;Kind-Partition 1 (Windows VM)&amp;#34;]
B --&amp;gt; E[&amp;#34;Kind-Partition 2 (Linux VM)&amp;#34;]
C --&amp;gt; F[&amp;#34;VMBus (Virtual Machine Bus)&amp;#34;]
D --&amp;gt; F
E --&amp;gt; F
C --&amp;gt; G[&amp;#34;VID (Virtualization Infrastructure Driver)&amp;#34;]
C --&amp;gt; H[&amp;#34;VMWP.exe (Worker-Prozess)&amp;#34;]
&lt;/pre>
&lt;ul>
&lt;li>&lt;strong>Windows Hypervisor&lt;/strong>: Läuft im am höchsten privilegierten CPU-Status (Ring -1 oder VMX Root Mode) und ist nur für die Speicherzuweisung und CPU-Planung zuständig. Er enthält keine Gerätetreiber.&lt;/li>
&lt;li>&lt;strong>Root-Partition&lt;/strong>: Die Partition, in der das Host-Windows-Betriebssystem läuft. Sie verfügt über alle Gerätetreiber und steuert die Hardware direkt. Sie bietet auch Verwaltungsfunktionen für die Kind-Partitionen (wie WMI-Provider und VMWP.exe).&lt;/li>
&lt;li>&lt;strong>Kind-Partition (Child Partition)&lt;/strong>: Die Partition, in der das Gastbetriebssystem läuft. Ein direkter Zugriff auf die Hardware ist nicht gestattet; stattdessen sendet sie über einen logischen Memory-Sharing-Bus namens &amp;ldquo;VMBus&amp;rdquo; I/O-Anfragen (Synthetic I/O) an die Root-Partition.&lt;/li>
&lt;/ul>
&lt;h3 id="23-wie-wsl2-und-die-lightweight-utility-vm-funktionieren">2.3. Wie WSL2 und die Lightweight Utility VM funktionieren
&lt;/h3>&lt;p>WSL2 nutzt die gleiche zugrundeliegende Type-1-Hypervisor-Technologie wie Hyper-V, verwendet jedoch eine Unterfunktion namens &amp;ldquo;Virtual Machine Platform (VMP)&amp;rdquo;, die sich von einer voll funktionsfähigen Hyper-V-Maschine unterscheidet.&lt;/p>
&lt;p>Die in WSL2 verwendete &amp;ldquo;Lightweight Utility VM&amp;rdquo; eliminiert vollständig die Legacy-Hardware-Emulation (wie virtuelles BIOS oder virtuelles Motherboard), über die herkömmliche VMs verfügen.&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;Windows Host OS (User Space)&amp;#34;]
B[&amp;#34;NTFS-Dateisystem&amp;#34;]
C[&amp;#34;9P-Protokoll-Server (Plan 9)&amp;#34;]
D[&amp;#34;Lightweight Utility VM (Linux Kernel)&amp;#34;]
E[&amp;#34;ext4.vhdx (Virtuelle Festplatte)&amp;#34;]
F[&amp;#34;Linux User Space (WSL2-Distributionen)&amp;#34;]
A --&amp;gt; C
C --&amp;gt;| Betriebssystemübergreifende Dateifreigabe | D
D --&amp;gt; E
D --&amp;gt; F
&lt;/pre>
&lt;p>Die größten Merkmale von WSL2 sind seine &lt;strong>Startgeschwindigkeit&lt;/strong> und &lt;strong>nahtlose Integration mit dem Host-Betriebssystem&lt;/strong>. Der Linux-Kernel bootet in weniger als ein paar Sekunden und greift über das &lt;code>9P&lt;/code>-Netzwerkdateisystemprotokoll von Plan 9 auf das Dateisystem der Windows-Seite (NTFS) zu.&lt;/p>
&lt;hr>
&lt;h2 id="3-gründliche-leistungsanalyse-rechenressourcen-und-io">3. Gründliche Leistungsanalyse: Rechenressourcen und I/O
&lt;/h2>&lt;p>Die Leistung einer virtuellen Maschine drückt sich als die Summe des Overheads in CPU-, Speicher- und Festplatten-I/O-Komponenten aus.&lt;/p>
&lt;h3 id="31-cpu--und-kontextwechsel-overhead">3.1. CPU- und Kontextwechsel-Overhead
&lt;/h3>&lt;p>Sowohl Hyper-V als auch WSL2 verwenden hardwareunterstützte Virtualisierung (Intel VT-x / AMD-V). CPU-Befehle werden grundsätzlich mit nativer Geschwindigkeit ausgeführt, aber bei der Ausführung privilegierter Befehle oder der Verarbeitung von I/O tritt ein Interrupt namens &amp;ldquo;VM Exit&amp;rdquo; auf, und es erfolgt ein Kontextwechsel zum Hypervisor.&lt;/p>
&lt;p>Der CPU-Overhead $T_{overhead}$ zu dieser Zeit kann durch das folgende mathematische Modell ausgedrückt werden:&lt;/p>
$$ T_{overhead} = \sum_{i=1}^{N} (t_{vm\_exit} + t_{hypercall\_process} + t_{vm\_entry}) $$&lt;p>Wobei:&lt;/p>
&lt;ul>
&lt;li>$N$: Anzahl der VM Exits pro Zeiteinheit&lt;/li>
&lt;li>$t_{vm\_exit}$: Übergangszeit vom Gast zum Hypervisor&lt;/li>
&lt;li>$t_{hypercall\_process}$: Verarbeitungszeit für I/O oder Interrupts über den VMBus&lt;/li>
&lt;li>$t_{vm\_entry}$: Rückkehrzeit vom Hypervisor zum Gast&lt;/li>
&lt;/ul>
&lt;p>Da WSL2 keine Legacy-Emulation aufweist, ist $t_{hypercall\_process}$ extrem gering und optimiert. Daher bleibt bei reinen CPU-Berechnungen (wie z.B. Kernel-Kompilierung oder Inferenz von Machine-Learning-Modellen) die Leistungseinbuße im Vergleich zu einer Bare-Metal-Umgebung innerhalb weniger Prozent.&lt;/p>
&lt;h3 id="32-mechanismen-der-speicherzuweisung">3.2. Mechanismen der Speicherzuweisung
&lt;/h3>&lt;p>Es gibt einen klaren Unterschied in der Designphilosophie zwischen den beiden in Bezug auf Speicherverwaltungsmethoden.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Hyper-V (Dynamic Memory)&lt;/strong>: Die Root-Partition weist je nach Speicherbedarf der Gast-VM dynamisch Speicher zu und gibt ihn wieder frei. Allerdings wird Speicher, der als Page-Cache im Gast-Betriebssystem reserviert wurde, tendenziell nur dann freigegeben, wenn das System unter Druck steht.&lt;/li>
&lt;li>&lt;strong>WSL2 (Dynamische Speicherfreigabe)&lt;/strong>: WSL2 verfügt über einen eigenen Mechanismus zur regelmäßigen Rückgabe (Reclaim) von Speicher (einschließlich Cache), der innerhalb der Linux-VM nicht mehr benötigt wird, an den Windows-Host. In frühen Versionen von WSL2 gab es ein Problem, bei dem der Linux-Page-Cache den Windows-Speicher aufzehrte (Aufblähung des Vmmem-Prozesses), was jedoch mittlerweile durch Kernel-Patches behoben wurde.&lt;/li>
&lt;/ul>
&lt;h3 id="33-eigenschaften-von-festplatten-io-vhdx-vs-ext4vhdx">3.3. Eigenschaften von Festplatten-I/O (VHDX vs ext4.vhdx)
&lt;/h3>&lt;p>Festplatten-I/O ist der am häufigsten auftretende Flaschenhals in der Leistung virtueller Maschinen.&lt;/p>
&lt;p>Die I/O-Latenz $L_{total}$ wird wie folgt berechnet:&lt;/p>
$$ L_{total} = L_{guest\_fs} + L_{vmbus} + L_{host\_fs} + L_{physical\_disk} $$&lt;p>&lt;strong>Im Falle von Hyper-V&lt;/strong>:
Typische Hyper-V-Gäste verwenden virtuelle Festplatten im &lt;code>VHDX&lt;/code>-Format. I/O-Anfragen, die vom Dateisystem (ext4 oder NTFS) innerhalb des Gastbetriebssystems ausgegeben werden, durchlaufen den VMBus-Block-Device-Storage-Treiber (storvsc) und werden als Zugriff auf die VHDX-Datei auf dem NTFS-Dateisystem der Windows-Seite verarbeitet.&lt;/p>
&lt;p>&lt;strong>Im Falle von WSL2&lt;/strong>:
WSL2-Linux-Distributionen laufen auf einem nativen ext4-Dateisystem, das in einer dedizierten &lt;code>ext4.vhdx&lt;/code>-Datei erstellt wurde. Dateioperationen innerhalb von Linux (wie im &lt;code>~&lt;/code> Verzeichnis) bieten eine native Leistung, die der von Hyper-V oben entspricht.
Wenn Sie jedoch &lt;strong>von WSL2-Linux auf Dateien auf der Windows-Seite zugreifen (wie &lt;code>/mnt/c/&lt;/code>)&lt;/strong>, oder umgekehrt, ist der Prozess ganz anders. Dieses Cross-OS-Zugriffsverfahren nutzt das &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>Der Zugriff über dieses 9P-Protokoll weist einen hohen Overhead für Serialisierungsverarbeitung auf, und bei Anwendungen, die eine große Anzahl kleiner Dateien lesen und schreiben (z.B. &lt;code>npm install&lt;/code> oder Git-Operationen in einem Node.js-Projekt in einem Windows-Verzeichnis), verschlechtert sich die Leistung erheblich (manchmal mehr als die 10-fache Verzögerung).
Aus diesem Grund ist es &lt;strong>eine eiserne Regel bei der Verwendung von WSL2, Projektdateien immer im nativen Linux-Dateisystem (unter &lt;code>~/&lt;/code>) abzulegen&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="4-netzwerkstruktur-nat-default-switch-bridged">4. Netzwerkstruktur: NAT, Default Switch, Bridged
&lt;/h2>&lt;p>Die Flexibilität der Netzwerkfunktionen ist einer der Hauptunterschiede zwischen Hyper-V und WSL2.&lt;/p>
&lt;h3 id="41-netzwerk-von-wsl2-nat-basiert">4.1. Netzwerk von WSL2 (NAT-basiert)
&lt;/h3>&lt;p>Standardmäßig nutzt das WSL2-Netzwerk eine &amp;ldquo;NAT (Network Address Translation)&amp;quot;-Konfiguration unter Verwendung der Virtual Switch-Technologie von Hyper-V.
Der Linux-VM wird automatisch eine private IP-Adresse zugewiesen (z.B. &lt;code>172.20.x.x&lt;/code>), die sich vom Windows-Host unterscheidet. Ein Mechanismus ist integriert, der Dienste (Ports), die innerhalb von WSL2 gestartet wurden, vom Windows-Host als &lt;code>localhost&lt;/code> weiterleitet, sodass Entwickler Webserver usw. testen können, ohne sich der Netzwerkkonfiguration bewusst sein zu müssen.&lt;/p>
&lt;p>In den letzten Jahren wurde in einer Vorschauversion ein neuer Netzwerkmodus namens &amp;ldquo;Mirrored Mode&amp;rdquo; für WSL2 eingeführt. Dies verbessert die IPv6-Unterstützung und die VPN-Verbindungskompatibilität (kann in &lt;code>.wslconfig&lt;/code> konfiguriert werden).&lt;/p>
&lt;h3 id="42-hyper-v-virtual-switch">4.2. Hyper-V Virtual Switch
&lt;/h3>&lt;p>Hyper-V ermöglicht die Erstellung von fortgeschrittenen Netzwerken auf Enterprise-Niveau. Über den &amp;ldquo;Virtual Switch Manager&amp;rdquo; bietet es hauptsächlich drei Modi:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Extern (External)&lt;/strong>: Bindet die physische NIC der Hostmaschine an den Virtual Switch, sodass die Gast-VM direkt an das physische Netzwerk angeschlossen wird (Bridged Connection). Die VM bezieht eine IP aus dem gleichen Subnetz wie das physische Netzwerk vom DHCP-Server.&lt;/li>
&lt;li>&lt;strong>Intern (Internal)&lt;/strong>: Erlaubt nur die Kommunikation zwischen dem Host OS und der VM sowie zwischen VMs. Sie können nicht direkt nach außen kommunizieren.&lt;/li>
&lt;li>&lt;strong>Privat (Private)&lt;/strong>: Erlaubt nur die Kommunikation zwischen VMs und blockiert auch die Kommunikation mit dem Host OS. Wird verwendet, um isolierte Testumgebungen zu erstellen.&lt;/li>
&lt;/ol>
&lt;h3 id="43-fortgeschrittene-hyper-v-netzwerkkonfiguration-mit-powershell">4.3. Fortgeschrittene Hyper-V Netzwerkkonfiguration mit PowerShell
&lt;/h3>&lt;p>In Entwicklungs- oder Testumgebungen ermöglicht PowerShell eine detaillierte Kontrolle, wenn Sie ein benutzerdefiniertes NAT-Netzwerk für VMs erstellen möchten. Nachfolgend ein Skriptbeispiel, um einen internen Virtual Switch zu erstellen, NAT zu konfigurieren und VMs Internetzugang zu ermöglichen.&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. Erstellung eines internen Virtual Switch&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. IP-Adresse für die virtuelle Host-NIC festlegen (Gateway-IP)&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. Konfiguration des NAT-Netzwerks&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"># Befehl zur Überprüfung&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>Mit dieser Konfiguration können Sie ein eigenes NAT-Segment aufbauen, das über den Host mit der Außenwelt kommunizieren kann, indem Sie der angegebenen Hyper-V-Gastmaschine manuell eine &lt;code>192.168.100.x&lt;/code> IP und das Gateway &lt;code>192.168.100.1&lt;/code> zuweisen.&lt;/p>
&lt;hr>
&lt;h2 id="5-anwendungsfälle-und-praktischer-leitfaden-zur-auswahl">5. Anwendungsfälle und praktischer Leitfaden zur Auswahl
&lt;/h2>&lt;p>Basierend auf den bisherigen Architektur- und Leistungsunterschieden definieren wir, in welchen Situationen welche Technologie angewendet werden sollte.&lt;/p>
&lt;h3 id="51-szenarien-in-denen-wsl2-gewählt-werden-sollte">5.1. Szenarien, in denen WSL2 gewählt werden sollte
&lt;/h3>&lt;p>WSL2 ist speziell zur &amp;ldquo;Steigerung der Produktivität von Entwicklern&amp;rdquo; konzipiert. Es ist ideal für folgende Zwecke:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Webentwicklung und Cloud-native Entwicklung&lt;/strong>: Containerentwicklung mit Docker Desktop (WSL2-Backend) oder Podman.&lt;/li>
&lt;li>&lt;strong>Verwendung von dedizierten Linux-Tools&lt;/strong>: Bei der täglichen Verwendung von bash, grep, awk, sed oder GCC/Clang-Compilern für Linux.&lt;/li>
&lt;li>&lt;strong>GUI-Anwendungen (WSLg)&lt;/strong>: Wenn Sie Linux-X11/Wayland-Anwendungen nahtlos auf dem Windows-Desktop ausführen möchten.&lt;/li>
&lt;li>&lt;strong>Machine Learning und KI-Entwicklung&lt;/strong>: Schnelles Training mit TensorFlow oder PyTorch unter Verwendung von GPU-Passthrough-Funktionen (NVIDIA CUDA on WSL).&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Hinweis&lt;/strong>: Einschränkungen können auftreten, wenn Sie den Kernel stark anpassen möchten oder komplexe Dienste aufbauen, die stark von systemd abhängen (obwohl systemd derzeit unterstützt wird, ist es standardmäßig deaktiviert oder eingeschränkt).&lt;/p>
&lt;h3 id="52-szenarien-in-denen-hyper-v-gewählt-werden-sollte">5.2. Szenarien, in denen Hyper-V gewählt werden sollte
&lt;/h3>&lt;p>Hyper-V ist auf &amp;ldquo;Infrastrukturvirtualisierung und vollständige Isolation&amp;rdquo; ausgerichtet. Es ist unverzichtbar für folgende Zwecke:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Ausführung von Windows VMs&lt;/strong>: Zum Ausführen verschiedener Windows-Versionen (z.B. Windows Server oder ein älteres Windows 10) als Testumgebungen.&lt;/li>
&lt;li>&lt;strong>Nested Virtualization (verschachtelte Virtualisierung)&lt;/strong>: Wenn Sie eine virtuelle Maschine (Hyper-V oder KVM) innerhalb einer anderen virtuellen Maschine ausführen möchten. Unerlässlich für die Testumgebungen von Infrastruktur-Ingenieuren.&lt;/li>
&lt;li>&lt;strong>Fortgeschrittene Netzwerkanforderungen&lt;/strong>: Wenn Sie die Netzwerkkonfiguration strikt kontrollieren müssen, wie z.B. bei externen Bridged-Verbindungen (Teilnahme am selben LAN), VLAN-Tagging, Zuweisung mehrerer NICs, usw.&lt;/li>
&lt;li>&lt;strong>Snapshots (Checkpoints)&lt;/strong>: Eine Funktion, mit der Sie den Zustand einer VM zu einem bestimmten Zeitpunkt speichern und jederzeit sofort zurücksetzen können. Äußerst nützlich für destruktive Softwaretests oder Malware-Analysen.&lt;/li>
&lt;li>&lt;strong>Feste Ressourcenzuweisung&lt;/strong>: Wenn Sie die Anzahl der CPU-Kerne und die Speichermenge strikt fixieren möchten, um die Auswirkungen auf das Host OS zu minimieren.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="6-überlegungen-zum-io-durchsatz-anhand-mathematischer-modelle-anhang">6. Überlegungen zum I/O-Durchsatz anhand mathematischer Modelle (Anhang)
&lt;/h2>&lt;p>Als Systemingenieur ist es wichtig, die Beziehung zwischen Durchsatz $S$ und Blockgröße $B$ theoretisch zu verstehen, wenn man die Grenzen der I/O-Leistung beider Technologien bewertet.&lt;/p>
&lt;p>Der Datentransfer-Durchsatz $S$ ist die pro Zeiteinheit übertragene Datenmenge und wird wie folgt modelliert:&lt;/p>
$$ S(B) = \frac{B}{L_{setup} + \frac{B}{R_{max}}} $$&lt;ul>
&lt;li>$B$: Blockgröße (Bytes)&lt;/li>
&lt;li>$L_{setup}$: Feste Latenz im Zusammenhang mit der Einrichtung von I/O-Anfragen und dem Kontextwechsel&lt;/li>
&lt;li>$R_{max}$: Maximale Hardware-Bandbreite bei Kopien oder Geräteübertragungen&lt;/li>
&lt;/ul>
&lt;p>Beim Dateizugriff über das 9P-Protokoll von WSL2 wird dieser $L_{setup}$ sehr groß (aufgrund von Socket-Kommunikation und der Serialisierung/Deserialisierung von Protokollen). Wenn die Blockgröße $B$ gering ist (Lesen und Schreiben vieler kleiner Dateien von wenigen KB), wird daher der Einfluss von $L_{setup}$ im Nenner dominant, und der Durchsatz $S$ sinkt drastisch.
Im Gegensatz dazu wird beim VHDX-Zugriff über den VMBus von Hyper-V der $L_{setup}$ auf ein Niveau nahe einem Hardware-Interrupt optimiert, sodass hohe IOPS auch bei kleinen Blöcken aufrechterhalten werden können.&lt;/p>
&lt;p>Diese mathematische Realität ist die logische Grundlage für die Best Practice: &amp;ldquo;Projektdateien sollten unter WSL2 nicht auf der Windows-Seite abgelegt werden&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="7-zusammenfassung-zwei-koexistierende-virtualisierungstechnologien">7. Zusammenfassung: Zwei koexistierende Virtualisierungstechnologien
&lt;/h2>&lt;p>Hyper-V und WSL2 sind nicht so, dass das eine besser ist als das andere, sondern &lt;strong>&amp;ldquo;zwei Lösungen mit unterschiedlichen Zielen&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>WSL2&lt;/strong> ist das &amp;ldquo;beste Integrationstool&amp;rdquo;, um die Hülle des Windows-Betriebssystems zu durchbrechen und das Linux-Ökosystem Windows-Benutzern nahtlos und mit hoher Geschwindigkeit zur Verfügung zu stellen. Es ist keine Übertreibung zu sagen, dass dies die ultimative CLI-Umgebung für Entwickler ist.&lt;/li>
&lt;li>&lt;strong>Hyper-V&lt;/strong> ist ein &amp;ldquo;vollwertiger Hypervisor&amp;rdquo;, der die robuste Isolation und Verwaltungsfunktionen, die in Enterprise-Rechenzentren entwickelt wurden, auf den Desktop bringt. Beim Aufbau von Netzwerken, Testen von Windows-Betriebssystemen und Simulieren von Infrastrukturumgebungen ist er unübertroffen.&lt;/li>
&lt;/ul>
&lt;p>In der modernen Windows-Umgebung konkurrieren diese beiden Technologien nicht, sondern koexistieren harmonisch auf derselben VM-Plattform. Durch den richtigen Einsatz beider Technologien je nach Verwendungszweck wird Windows zur leistungsstärksten und flexibelsten Engineering-Workstation der Welt.&lt;/p></description></item><item><title>Der ultimative Leitfaden zur Einrichtung der Entwicklungsumgebung in WSL2 (Windows Subsystem for Linux)</title><link>http://kenji.blog/de/p/wsl2-ultimate-development-setup-guide/</link><pubDate>Sat, 12 Sep 2026 23:00:00 +0900</pubDate><guid>http://kenji.blog/de/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 Der ultimative Leitfaden zur Einrichtung der Entwicklungsumgebung in WSL2 (Windows Subsystem for Linux)" />&lt;p>„WSL2 (Windows Subsystem for Linux 2)“, das eine native Linux-Entwicklungsumgebung unter Windows bietet, ist zu einem unverzichtbaren Werkzeug in der modernen Softwareentwicklung geworden. Es gibt jedoch einen himmelweiten Unterschied in Leistung und Entwicklungserfahrung zwischen der weiteren Nutzung im Standardzustand und dem Verständnis der Architektur zur entsprechenden Optimierung.&lt;/p>
&lt;p>Dieser Artikel beginnt mit einer Erklärung der Architektur, die das Fundament von WSL2 bildet. Er behandelt ausführlich alle Schritte zum Aufbau der „ultimativen Entwicklungsumgebung“, die professionelle Ingenieure verlangen, einschließlich Konfigurationen zur Maximierung der Leistung, Aufbau einer komfortablen Terminalumgebung, nahtlose Integration mit Docker und VS Code sowie erweiterte Netzwerkeinstellungen, mit einem Umfang von über 10.000 Zeichen.&lt;/p>
&lt;hr>
&lt;h2 id="1-wsl2-architektur-und-die-evolution-von-wsl1">1. WSL2-Architektur und die Evolution von WSL1
&lt;/h2>&lt;p>Um das Potenzial von WSL2 voll auszuschöpfen, ist es wichtig, zuerst seine interne Struktur zu verstehen. Das erste WSL (WSL1) und WSL2 unterscheiden sich grundlegend in ihrem Ansatz, Linux-Binärdateien unter Windows auszuführen.&lt;/p>
&lt;h3 id="wsl1-systemcall-übersetzungsebene">WSL1: Systemcall-Übersetzungsebene
&lt;/h3>&lt;p>WSL1 verwendete einen Mechanismus zur Übersetzung von Linux-Systemaufrufen in Windows-NT-APIs in Echtzeit. Dies hatte den Vorteil eines sehr geringen Ressourcen-Overheads, da keine virtuelle Maschine (VM) verwendet wurde. Es war jedoch schwierig, komplexe Systemaufrufe wie Dateisystem-I/O-Operationen vollständig zu emulieren. Dies führte zu einer katastrophalen Leistungseinbuße, insbesondere bei der Verarbeitung einer großen Anzahl kleiner Dateien, wie z.B. &lt;code>npm install&lt;/code> von Node.js oder Git-Repository-Operationen.&lt;/p>
&lt;h3 id="wsl2-lightweight-utility-vm-und-vollständiger-linux-kernel">WSL2: Lightweight Utility VM und vollständiger Linux-Kernel
&lt;/h3>&lt;p>Bei WSL2 wurde die Architektur erneuert, und ein von Microsoft erstellter echter Linux-Kernel läuft jetzt direkt auf einer &lt;strong>„Lightweight Utility VM“, die eine Teilmenge der Hyper-V-Architektur nutzt&lt;/strong>. Dies garantiert 100%ige Kompatibilität von Systemaufrufen, und durch die Verwendung einer virtuellen Festplatte (VHDX) mit dem nativen Linux-Dateisystem ext4 hat sich die Datei-I/O-Leistung im Vergleich zu WSL1 dramatisch verbessert.&lt;/p>
&lt;p>Das folgende Mermaid-Diagramm zeigt die strukturellen Unterschiede zwischen WSL1 und WSL2.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph &amp;#34;Windows OS-Umgebung&amp;#34;
A[&amp;#34;Windows NT-Kernel&amp;#34;]
A --&amp;gt; F[&amp;#34;NTFS-Dateisystem (C:-Laufwerk)&amp;#34;]
end
subgraph &amp;#34;WSL2-Architektur&amp;#34;
B[&amp;#34;Hyper-V-Hypervisor&amp;#34;]
B --&amp;gt; C[&amp;#34;Lightweight Utility VM&amp;#34;]
C --&amp;gt; D[&amp;#34;Linux-Kernel (Microsoft)&amp;#34;]
D --&amp;gt; E[&amp;#34;Ubuntu User Space (glibc, bash usw.)&amp;#34;]
D --&amp;gt; G[&amp;#34;Virtuelle ext4-Festplatte (.vhdx)&amp;#34;]
end
A -.-&amp;gt;|&amp;#34;Plan 9 (9P) Protocol Network File Share&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>Die wichtigste Lektion aus dieser Struktur ist: &lt;strong>„Der Zugriff auf Dateien auf der Linux-Seite (innerhalb von VHDX) ist extrem schnell, aber der Zugriff auf Dateien auf der Windows-Seite (&lt;code>/mnt/c/&lt;/code>) ist sehr langsam, da er über das 9P-Protokoll erfolgt.“&lt;/strong> Der Quellcode für Ihre Projekte muss unter dem Home-Verzeichnis (&lt;code>~&lt;/code>) auf der WSL-Seite abgelegt werden.&lt;/p>
&lt;hr>
&lt;h2 id="2-mathematische-leistungsanalyse-warum-ist-wsl2-schnell">2. Mathematische Leistungsanalyse: Warum ist WSL2 schnell?
&lt;/h2>&lt;p>Lassen Sie uns die Leistungssteigerung von WSL2 mithilfe eines mathematischen Modells quantitativ bewerten. Eine der zeitaufwändigsten Operationen in der Softwareentwicklung ist die Verarbeitung, die mit einer großen Menge an Datei-I/O einhergeht (z.B. Bibliotheksinstallation und Build).&lt;/p>
&lt;p>Die Gesamtausführungszeit $T_{total}$ eines bestimmten Prozesses wird durch die Summe der CPU-Berechnungszeit $T_{compute}$ und der Festplatten-I/O-Zeit $T_{io}$ ausgedrückt.&lt;/p>
$$ T_{total} = T_{compute} + T_{io} $$&lt;p>Im Fall von WSL1, da ein Overhead für die Konvertierung von Operationen auf der Linux-Seite in NTFS-Operationen entsteht, wird die I/O-Zeit wie folgt modelliert. Hierbei ist $n$ die Anzahl der Dateioperationen, $t_{ntfs\_syscall}$ die Ausführungszeit des Systemaufrufs auf der Windows-Seite und $t_{trans}$ der Overhead der Übersetzungsebene.&lt;/p>
$$ T_{wsl1\_io} = \sum_{i=1}^{n} (t_{ntfs\_syscall_i} + t_{trans_i}) $$&lt;p>Im Fall von WSL2, da der Kernel direkt I/O an das ext4-Dateisystem ausgibt, besteht der Overhead nur aus der sehr geringen Verzögerung $t_{virt}$ durch die Virtualisierung.&lt;/p>
$$ T_{wsl2\_io} = \sum_{i=1}^{n} (t_{ext4_i} + t_{virt_i}) $$&lt;p>In allgemeinen Dateisystemen ist $t_{ext4} \ll t_{ntfs\_syscall} + t_{trans}$. Wenn also $n$ sehr groß ist (Zehntausende bis Hunderttausende von Dateioperationen durchführen), vergrößert sich der Unterschied in der I/O-Zeit zwischen WSL1 und WSL2 exponentiell.&lt;/p>
&lt;p>Wenn wir außerdem das Overhead-Verhältnis der CPU-Berechnung in einer virtualisierten Umgebung mit $\rho$ ansetzen, bleibt es bei der neuesten hardwareunterstützten Virtualisierung (Intel VT-x / AMD-V) bei etwa $\rho \approx 0.01 \sim 0.03$ (1-3%). Daher wird selbst bei reinen Rechenaufgaben eine Leistung von $97\% \sim 99\%$ erreicht, was der einer nativen Linux-Umgebung in nichts nachsteht.&lt;/p>
&lt;hr>
&lt;h2 id="3-installation-und-aufbau-der-grundlagen">3. Installation und Aufbau der Grundlagen
&lt;/h2>&lt;p>Unter Windows 10/11 ist die Installation von WSL2 sehr einfach geworden. Öffnen Sie einfach PowerShell mit Administratorrechten und führen Sie den folgenden Befehl aus.&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 und Ubuntu werden standardmäßig installiert&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"># Wenn Sie eine bestimmte Distribution angeben&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Kann mit wsl --list --online überprüft werden&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>Nach der Installation und einem Neustart werden Sie beim ersten Start aufgefordert, einen UNIX-Benutzernamen und ein Passwort festzulegen. Dieser Benutzer ist unabhängig von Ihrem Windows-Benutzer und nur innerhalb von WSL gültig.&lt;/p>
&lt;p>Wenn Sie bereits WSL1 verwenden, können Sie es mit den folgenden Befehlen in WSL2 konvertieren.&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"># Konvertieren Sie die vorhandene Distribution in 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"># Machen Sie WSL2 zur Standardversion für zukünftige Distributionen&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-das-geheimnis-der-ressourcenkontrolle-wslconfig-und-wslconf">4. Das Geheimnis der Ressourcenkontrolle: .wslconfig und wsl.conf
&lt;/h2>&lt;p>Eine der größten Fallen von WSL2 ist der „unbegrenzte Speicherverbrauch (Aufblähen des Vmmem-Prozesses)“. Da WSL2 den Page Cache des Linux-Kernels verwendet, verbraucht es bei jedem I/O unendlich viel Host-Speicher (Windows). Um dies zu verhindern, ist es zwingend erforderlich, Ressourcen über Konfigurationsdateien zu begrenzen.&lt;/p>
&lt;p>Es gibt zwei WSL2-Konfigurationsdateien: &lt;strong>&lt;code>.wslconfig&lt;/code>, die das gesamte Windows betrifft&lt;/strong>, und &lt;strong>&lt;code>wsl.conf&lt;/code>, die das Innere jeder Distribution betrifft&lt;/strong>.&lt;/p>
&lt;h3 id="41-wslconfig-windows-seite">4.1. .wslconfig (Windows-Seite)
&lt;/h3>&lt;p>Erstellen Sie eine Datei im Windows-Benutzerprofilverzeichnis (&lt;code>C:\Users\&amp;lt;Benutzername&amp;gt;\.wslconfig&lt;/code>), um die Ressourcenzuweisung an die VM zu steuern.&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;Benutzername&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"># Maximale Speichermenge, die der VM zugewiesen werden soll. Es werden etwa 50% bis 75% des gesamten Host-Speichers empfohlen&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"># Anzahl der zu verwendenden CPU-Kerne (alle Kerne werden verwendet, wenn weggelassen)&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"># Größe der Auslagerungsdatei&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"># Speicherort der Auslagerungsdatei (wenn Sie Speicherplatz auf dem Laufwerk C sparen möchten)&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"># Aktivieren Sie das Localhost-Forwarding (um auf WSL von der Windows-Seite über localhost zuzugreifen)&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"># Speicher automatisch freigeben (nur Windows 11)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Gibt den Page Cache dynamisch frei und verhindert ein Aufblähen von 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"># Erweiterte Netzwerkfunktionen für Windows 11 22H2 und neuer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Dies ermöglicht IPv6-Unterstützung und die gemeinsame Nutzung derselben IP-Adresse zwischen WSL und 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-linux-seite">4.2. wsl.conf (Linux-Seite)
&lt;/h3>&lt;p>Bearbeiten Sie &lt;code>/etc/wsl.conf&lt;/code> in WSL, um das distributionsspezifische Verhalten zu steuern.&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 (In WSL bearbeitet)&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"># Deaktivieren Sie die Generierung von /etc/resolv.conf, das beim Start von WSL automatisch generiert wird&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Nützlich, wenn Sie ein eigenes DNS einrichten möchten (z. B. 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"># Festlegen eines eigenen Hostnamens&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"># Einstellungen beim Mounten von Windows-Laufwerken&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"># Ändern Sie den Mount-Punkt des Laufwerks C von /mnt/c auf /c (verkürzt den Pfad)&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"># systemd aktivieren (WSL 0.67.6 und neuer)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Dadurch können snap und verschiedene Daemons (wie Docker) nativ ausgeführt werden&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"># Standardmäßig angemeldeter Benutzer&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>Um diese Einstellungen anzuwenden, müssen Sie &lt;code>wsl --shutdown&lt;/code> in PowerShell ausführen, um die WSL-VM vollständig zu stoppen, und sie dann neu starten.&lt;/p>
&lt;hr>
&lt;h2 id="5-die-ultimative-terminal-umgebung-zsh--powerlevel10k">5. Die ultimative Terminal-Umgebung: Zsh + Powerlevel10k
&lt;/h2>&lt;p>Mit der Standard-Bash allein steigt Ihre Produktivität nicht. Durch die Kombination von Zsh, das sich durch leistungsstarke Vervollständigung und Sichtbarkeit auszeichnet, mit dem ultraschnellen Thema „Powerlevel10k“, bauen wir die stärkste Eingabeaufforderung.&lt;/p>
&lt;h3 id="51-installation-und-konfiguration-von-windows-terminal">5.1. Installation und Konfiguration von Windows Terminal
&lt;/h3>&lt;p>Installieren Sie „Windows Terminal“ aus dem Microsoft Store. Öffnen Sie die JSON-Einstellungen (&lt;code>settings.json&lt;/code>), legen Sie das Standardprofil auf WSL (Ubuntu) fest und ändern Sie die Schriftart in einen Nerd Font für die Entwicklung (z.B. &lt;code>HackGen Console NF&lt;/code> oder &lt;code>MesloLGS NF&lt;/code>).&lt;/p>
&lt;h3 id="52-zsh-und-oh-my-zsh-installieren">5.2. Zsh und Oh My Zsh installieren
&lt;/h3>&lt;p>Führen Sie die folgenden Befehle im WSL-Terminal aus.&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"># Pakete aktualisieren und Zsh installieren&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"># Führen Sie das Installationsskript für Oh My Zsh aus&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-einführung-von-powerlevel10k-und-plugins">5.3. Einführung von Powerlevel10k und Plugins
&lt;/h3>&lt;p>Wir werden Plugins (Syntax-Hervorhebung und Eingabevervollständigung) und das Powerlevel10k-Thema einführen, um Zsh weiter zu verbessern.&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>Bearbeiten Sie &lt;code>~/.zshrc&lt;/code>, um das Thema und die Plugins zu aktivieren.&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"># Änderungen an ~/.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"># Zum Plugin-Array hinzufügen&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>Wenn Sie es speichern und &lt;code>source ~/.zshrc&lt;/code> ausführen, wird der Powerlevel10k-Konfigurationsassistent (&lt;code>p10k configure&lt;/code>) gestartet. Folgen Sie den Anweisungen auf dem Bildschirm, um Ihre bevorzugte Eingabeaufforderung (Eingabeaufforderungsstil, ob Symbole vorhanden sind, anzuzeigende Informationen usw.) anzupassen. Der Git-Zweigname und -Status, die Node.js-Version, die Ausführungszeit von Befehlen usw. werden in Echtzeit angezeigt, wodurch die Entwicklungseffizienz drastisch verbessert wird.&lt;/p>
&lt;hr>
&lt;h2 id="6-vs-code-remote---nahtlose-integration-mit-wsl">6. VS Code Remote - Nahtlose Integration mit WSL
&lt;/h2>&lt;p>Für die Entwicklung auf WSL2 gibt es eine „Remote - WSL“-Erweiterung, die Ihnen den nahtlosen Zugriff auf Dateien innerhalb von WSL von der auf der Windows-Seite installierten IDE (Visual Studio Code) ermöglicht.&lt;/p>
&lt;h3 id="erklärung-der-architektur">Erklärung der Architektur
&lt;/h3>&lt;p>Das folgende Sequenzdiagramm zeigt, wie VS Code mit WSL2 kommuniziert.&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;Entwickler&amp;#34;
participant V as &amp;#34;VS Code UI (Windows)&amp;#34;
participant S as &amp;#34;VS Code Server (WSL2)&amp;#34;
participant F as &amp;#34;ext4-Dateisystem (WSL2)&amp;#34;
U-&amp;gt;&amp;gt;V: &amp;#34;Geben Sie `code .` in WSL Terminal ein&amp;#34;
V-&amp;gt;&amp;gt;S: &amp;#34;Aufbau einer RPC-Verbindung über Vsock&amp;#34;
Note over V,S: Kommunikation über Hyper-V-Sockets ohne TCP/IP
S-&amp;gt;&amp;gt;F: &amp;#34;Quelldateien lesen / Linter ausführen&amp;#34;
F--&amp;gt;&amp;gt;S: &amp;#34;Daten &amp;amp; Analyse zurückgeben&amp;#34;
S--&amp;gt;&amp;gt;V: &amp;#34;Language Server-Ergebnisse an UI streamen&amp;#34;
V--&amp;gt;&amp;gt;U: &amp;#34;Syntax-Highlighting &amp;amp; Fehler anzeigen&amp;#34;
&lt;/pre>
&lt;p>Der VS Code auf der Windows-Seite fungiert als reiner „Thin Client (UI)“, und rechenintensive Aufgaben wie der Language Server, der Debugger und die Terminal-Ausführung werden alle vom „VS Code Server“ auf der WSL-Seite erledigt. Auf diese Weise können Sie die Umgebung auf der WSL-Seite sauber halten, ohne Node.js oder Python auf der Windows-Seite zu installieren.&lt;/p>
&lt;h3 id="wesentliche-vs-code-einstellungen">Wesentliche VS Code-Einstellungen
&lt;/h3>&lt;p>Installieren Sie &lt;strong>&amp;ldquo;WSL&amp;rdquo; (ms-vscode-remote.remote-wsl)&lt;/strong> aus den &amp;ldquo;Erweiterungen&amp;rdquo; von VS Code. Navigieren Sie dann im WSL-Terminal zum Projektverzeichnis und führen Sie einfach &lt;code>code .&lt;/code> aus, um den VS Code auf der Windows-Seite mit dem geöffneten Verzeichnis zu starten.&lt;/p>
&lt;p>&lt;strong>Wichtiger Hinweis (Problem mit dem Zeilenumbruchcode):&lt;/strong>
Windows und Linux haben unterschiedliche Zeilenumbruchcodes (Windows verwendet &lt;code>CRLF&lt;/code>, Linux verwendet &lt;code>LF&lt;/code>). Bei der Entwicklung in WSL stellen Sie bitte sicher, dass die Git-Einstellung &lt;code>core.autocrlf&lt;/code> und die Standarddateieinstellungen von VS Code auf &lt;code>LF&lt;/code> vereinheitlicht werden. Wenn Sie dies versäumen, werden Sie von mysteriösen Fehlern bei der Ausführung von Shell-Skripten oder Docker-Containern geplagt.&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"># Git-Zeilenumbruchcode-Einstellung auf der WSL-Seite&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>Fügen Sie der &lt;code>settings.json&lt;/code> (Remote-Einstellung) von VS Code auch Folgendes hinzu:&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-optimierung-von-docker-desktop-und-wsl2-integration">7. Optimierung von Docker Desktop und WSL2 Integration
&lt;/h2>&lt;p>Es gibt hauptsächlich zwei Ansätze zur Verwendung von Docker in einer WSL2-Umgebung.&lt;/p>
&lt;ol>
&lt;li>Installieren Sie &lt;strong>Docker Desktop für Windows&lt;/strong> und aktivieren Sie die WSL2-Integrationsfunktion&lt;/li>
&lt;li>Installieren Sie die &lt;strong>native Docker Engine&lt;/strong> direkt innerhalb von WSL2 (z. B. Ubuntu)&lt;/li>
&lt;/ol>
&lt;h3 id="ansatz-1-docker-desktop-empfohlen">Ansatz 1: Docker Desktop (Empfohlen)
&lt;/h3>&lt;p>Dies wird in den meisten Fällen empfohlen, da es ein einfaches Management mit einer GUI und einen transparenten Zugriff auf Container zwischen Windows und WSL ermöglicht. Überprüfen Sie Folgendes in den Einstellungen von Docker Desktop (Settings).&lt;/p>
&lt;ul>
&lt;li>Aktivieren Sie &lt;code>General&lt;/code> -&amp;gt; &lt;code>Use the WSL 2 based engine&lt;/code>.&lt;/li>
&lt;li>Aktivieren Sie &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> und aktivieren Sie die zu verwendende Distribution (Ubuntu) mit der Umschaltfläche.&lt;/li>
&lt;/ul>
&lt;p>Dies ermöglicht es Ihnen, den &lt;code>docker&lt;/code>-Befehl direkt aus dem WSL2-Terminal auszuführen, und die Kommunikation mit dem Docker-Daemon erfolgt über dedizierte Lightweight-VMs (&lt;code>docker-desktop&lt;/code> und &lt;code>docker-desktop-data&lt;/code>), die von Docker Desktop verwaltet werden.&lt;/p>
&lt;h3 id="ansatz-2-direkte-installation-der-nativen-docker-engine">Ansatz 2: Direkte Installation der nativen Docker Engine
&lt;/h3>&lt;p>Wenn Sie Unternehmensnetzwerkeinschränkungen haben (z. B. um die Kosten für Docker Desktop zu vermeiden) oder den Leistungs-Overhead so weit wie möglich reduzieren möchten, aktivieren Sie &lt;code>systemd&lt;/code> in &lt;code>/etc/wsl.conf&lt;/code> und installieren Sie Docker als reinen Ubuntu-Server.&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"># Auszug aus dem offiziellen Docker-Installationsverfahren auf WSL2 Ubuntu mit aktiviertem systemd&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"># Repository hinzufügen&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"># Fügen Sie den aktuellen Benutzer zur docker-Gruppe hinzu (um ohne sudo auszuführen)&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>Nach dem Neustart funktioniert &lt;code>systemctl start docker&lt;/code> genau wie in einer nativen Linux-Umgebung und bietet hohe Leistung.&lt;/p>
&lt;hr>
&lt;h2 id="8-integration-von-ssh-schlüsseln-nahtlose-authentifizierung-in-windows-und-wsl">8. Integration von SSH-Schlüsseln: Nahtlose Authentifizierung in Windows und WSL
&lt;/h2>&lt;p>Bei der Durchführung von SSH-Klonen in Git oder Verbindungen zu Remote-Servern über SSH ist es sehr mühsam, separate SSH-Schlüssel auf der Windows- und der WSL-Seite zu verwalten. Um Sicherheit und Komfort in Einklang zu bringen, richten wir eine Brücke vom auf der Windows-Seite laufenden SSH-Agenten (oder einem Passwort-Manager wie 1Password) zur WSL-Seite ein.&lt;/p>
&lt;p>Hier erklären wir die sicherste und modernste Methode, den &lt;strong>SSH-Agenten von 1Password&lt;/strong> oder den &lt;strong>OpenSSH Authentication Agent von Windows&lt;/strong> zu verwenden und ihn mithilfe von &lt;code>npiperelay&lt;/code> oder &lt;code>socat&lt;/code> an den UNIX-Domain-Socket von WSL2 weiterzuleiten.&lt;/p>
&lt;h3 id="ssh-agent-socket-weiterleitung">ssh-agent Socket-Weiterleitung
&lt;/h3>&lt;p>Normalerweise muss der als Named Pipe (benannte Pipe) in Windows bereitgestellte SSH-Agent in eine Socket-Datei auf der WSL-Seite konvertiert werden. Dies lässt sich mithilfe von &lt;code>wsl-ssh-agent&lt;/code> oder Funktionen von 1Password leicht erreichen.&lt;/p>
&lt;p>Aktivieren Sie im Einstellungsbildschirm von 1Password &amp;ldquo;Entwickler&amp;rdquo; -&amp;gt; &amp;ldquo;SSH-Agenten verwenden&amp;rdquo;.
Fügen Sie als Nächstes die folgenden Einstellungen zur &lt;code>~/.zshrc&lt;/code> oder &lt;code>~/.bashrc&lt;/code> auf der WSL-Seite hinzu, um den Socket bei der Anmeldung automatisch zu binden.&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"># Zu ~/.zshrc hinzufügen (Beispiel für die Verwendung des 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"># Wenn der Socket beim Start von WSL nicht existiert oder der Prozess nicht gebunden ist, mit socat und npiperelay weiterleiten&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"># Starten Sie socat im Hintergrund und verbinden Sie die Named Pipe auf der Windows-Seite mit dem UNIX-Socket auf der WSL-Seite&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;p>*Vorab müssen Sie &lt;code>npiperelay.exe&lt;/code> auf der Windows-Seite installieren und den Pfad konfigurieren.&lt;/p>
&lt;p>Nach Abschluss dieser Konfiguration wird bei Ausführung von &lt;code>ssh-add -l&lt;/code> aus dem WSL-Terminal eine Liste der öffentlichen Schlüssel von SSH-Schlüsseln angezeigt, die in 1Password oder auf der Windows-Seite registriert sind. Auf diese Weise können Sie sich sicher authentifizieren, ohne die private Schlüsseldatei nach WSL kopieren zu müssen.&lt;/p>
&lt;hr>
&lt;h2 id="9-wartung-optimierung-komprimierung-von-aufgeblähten-vhdx">9. Wartung: Optimierung (Komprimierung) von aufgeblähten VHDX
&lt;/h2>&lt;p>Einer der größten Nachteile von WSL2 ist die Tatsache, dass die Dateigröße der virtuellen Festplatte (.vhdx) auf der Windows-Seite nicht automatisch reduziert wird, selbst wenn Sie Docker-Images oder Dateien löschen. Wenn Sie lange Zeit weiterentwickeln, bläht sich die Datei ext4.vhdx auf Dutzende bis Hunderte von GB auf.&lt;/p>
&lt;p>Um Speicherplatz freizugeben, müssen Sie VHDX regelmäßig von der Windows-Seite aus optimieren (komprimieren).&lt;/p>
&lt;ol>
&lt;li>Schalten Sie zunächst WSL vollständig aus.
&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>Öffnen Sie PowerShell mit Administratorrechten und führen Sie den folgenden Befehl &lt;code>diskpart&lt;/code> oder den Befehl &lt;code>Optimize-VHD&lt;/code> des Hyper-V-Moduls aus (letzteres kann nur verwendet werden, wenn Hyper-V aktiviert ist).&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"># Wenn das Hyper-V-Modul verfügbar ist&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"># Wenn Sie diskpart verwenden&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"># Geben Sie interaktiv innerhalb des folgenden Prompts ein&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;Benutzername&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>Wenn Sie diesen Vorgang regelmäßig durchführen, können Sie die auf Laufwerk C verschwendete Kapazität zurückgewinnen.&lt;/p>
&lt;hr>
&lt;h2 id="10-fazit">10. Fazit
&lt;/h2>&lt;p>WSL2 hat den Rahmen eines bloßen „Zusatz-Linux, das unter Windows läuft“ komplett überschritten und sich zu einer leistungsstarken Entwicklungsplattform entwickelt, die einer MacOS- oder nativen Linux-Maschine in nichts nachsteht oder diese sogar übertrifft.&lt;/p>
&lt;p>Durch die Anwendung aller hier erläuterten Einstellungen (Ressourcenoptimierung durch &lt;code>.wslconfig&lt;/code>, Terminalerweiterung durch Zsh + Powerlevel10k, transparenter Zugriff durch VS Code Remote sowie SSH-Integration und VHDX-Wartung) wird eine stressfreie, schnelle und sichere „ultimative Entwicklungsumgebung“ vervollständigt.&lt;/p>
&lt;p>Der Aufbau der Umgebung erfordert zwar etwas Aufwand, aber wenn Sie die Einstellungen einmal festgelegt haben, wird sich Ihre zukünftige Engineering-Produktivität zweifellos dramatisch verbessern. Erkunden Sie gerne weitere Anpassungen basierend auf diesem Leitfaden, um sie an Ihre eigenen Projekte und Vorlieben anzupassen.&lt;/p></description></item></channel></rss>