<?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/id/tags/wsl2/</link><description>Recent content in WSL2 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>id</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 07:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/id/tags/wsl2/index.xml" rel="self" type="application/rss+xml"/><item><title>Hyper-V vs WSL2: Membandingkan Teknologi Virtualisasi di Windows</title><link>http://kenji.blog/id/p/hyper-v-vs-wsl2-windows-virtualization/</link><pubDate>Sun, 13 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/id/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: Membandingkan Teknologi Virtualisasi di Windows" />&lt;h2 id="1-pendahuluan-evolusi-virtualisasi-di-windows">1. Pendahuluan: Evolusi Virtualisasi di Windows
&lt;/h2>&lt;p>Teknologi virtualisasi pada platform Windows telah mengalami evolusi dramatis dalam beberapa dekade terakhir. Dulu, hypervisor Type 2 dari pihak ketiga (seperti VMware Workstation atau VirtualBox) menjadi arus utama. Namun, sejak Microsoft memperkenalkan &amp;ldquo;Hyper-V&amp;rdquo; di Windows Server 2008, hypervisor Type 1 mulai terintegrasi ke dalam OS desktop seperti Windows 10/11.&lt;/p>
&lt;p>Dalam beberapa tahun terakhir, yang paling menarik perhatian para pengembang adalah &amp;ldquo;WSL2 (Windows Subsystem for Linux 2)&amp;rdquo;. Sementara WSL1 bergantung pada penerjemahan system call (translasi), WSL2 mengadopsi &amp;ldquo;Lightweight Utility VM&amp;rdquo; yang menerapkan teknologi Hyper-V, memberikan kompatibilitas Linux sepenuhnya serta peningkatan performa yang signifikan.&lt;/p>
&lt;p>Artikel ini akan membandingkan dan menjelaskan secara mendetail dua teknologi virtualisasi kuat ini — &amp;ldquo;Hyper-V&amp;rdquo; yang berfitur lengkap dan &amp;ldquo;WSL2&amp;rdquo; yang difokuskan pada pengalaman pengembang — dari sisi arsitektur, performa (CPU, memori, I/O disk), konfigurasi jaringan, serta use case optimal beserta rincian teknis yang mendalam.&lt;/p>
&lt;hr>
&lt;h2 id="2-teori-dasar-hypervisor-dan-perbandingan-arsitektur">2. Teori Dasar Hypervisor dan Perbandingan Arsitektur
&lt;/h2>&lt;p>Untuk memahami teknologi virtualisasi, mengklasifikasikan tipe hypervisor (Virtual Machine Monitor: VMM) adalah hal yang penting.&lt;/p>
&lt;h3 id="21-perbedaan-antara-hypervisor-type-1-dan-type-2">2.1. Perbedaan antara Hypervisor Type 1 dan Type 2
&lt;/h3>&lt;p>Hypervisor adalah lapisan perangkat lunak yang mengabstraksi akses perangkat keras dan memungkinkan banyak OS (Guest OS) berjalan secara bersamaan di satu mesin fisik.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Type 1 (Bare-metal)&lt;/strong>: Berjalan langsung di atas perangkat keras. Tidak ada konsep Host OS (walaupun secara teknis mungkin ada sistem operasi manajemen yang memiliki hak istimewa), overhead-nya sangat rendah, dan menawarkan performa serta keamanan yang tinggi. Contoh: Hyper-V, VMware ESXi, Xen.&lt;/li>
&lt;li>&lt;strong>Type 2 (Hosted)&lt;/strong>: Berjalan sebagai aplikasi di atas Host OS (seperti Windows atau macOS). Karena semua akses perangkat keras harus melalui Host OS, overhead-nya menjadi lebih besar. Contoh: VMware Workstation, Oracle VirtualBox.&lt;/li>
&lt;/ul>
&lt;p>Hyper-V di Windows adalah &lt;strong>hypervisor Type 1&lt;/strong> murni. Faktanya, ketika Anda mengaktifkan Hyper-V, OS Windows yang biasa Anda gunakan juga berjalan di dalam mesin virtual khusus yang disebut &amp;ldquo;Partisi Root&amp;rdquo; (Root Partition).&lt;/p>
&lt;h3 id="22-detail-arsitektur-hyper-v">2.2. Detail Arsitektur Hyper-V
&lt;/h3>&lt;p>Arsitektur Hyper-V menggunakan desain mikro-kernel dan didasarkan pada unit pemisahan logis yang disebut Partisi (Partition).&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;Perangkat Keras (CPU, RAM, Disk, NIC)&amp;#34;] --&amp;gt; B[&amp;#34;Windows Hypervisor (Ring -1)&amp;#34;]
B --&amp;gt; C[&amp;#34;Partisi Root (OS Windows)&amp;#34;]
B --&amp;gt; D[&amp;#34;Partisi Anak 1 (VM Windows)&amp;#34;]
B --&amp;gt; E[&amp;#34;Partisi Anak 2 (VM Linux)&amp;#34;]
C --&amp;gt; F[&amp;#34;VMBus (Bus Mesin Virtual)&amp;#34;]
D --&amp;gt; F
E --&amp;gt; F
C --&amp;gt; G[&amp;#34;VID (Driver Infrastruktur Virtualisasi)&amp;#34;]
C --&amp;gt; H[&amp;#34;VMWP.exe (Proses Pekerja)&amp;#34;]
&lt;/pre>
&lt;ul>
&lt;li>&lt;strong>Windows Hypervisor&lt;/strong>: Berjalan pada tingkat hak istimewa (privilege) CPU yang paling tinggi (Ring -1 atau VMX Root Mode), dan hanya menangani alokasi memori serta penjadwalan CPU. Tidak termasuk driver perangkat.&lt;/li>
&lt;li>&lt;strong>Partisi Root&lt;/strong>: Partisi tempat berjalannya Host OS Windows. Memiliki semua driver perangkat dan mengontrol perangkat keras secara langsung. Partisi ini juga menyediakan fungsionalitas manajemen untuk partisi anak (seperti WMI provider dan VMWP.exe).&lt;/li>
&lt;li>&lt;strong>Partisi Anak&lt;/strong>: Partisi tempat berjalannya Guest OS. Tidak memiliki akses langsung ke perangkat keras, dan mengirim permintaan I/O (Synthetic I/O) ke Partisi Root melalui bus memori bersama logis yang disebut &amp;ldquo;VMBus&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;h3 id="23-wsl2-dan-mekanisme-lightweight-utility-vm">2.3. WSL2 dan Mekanisme Lightweight Utility VM
&lt;/h3>&lt;p>WSL2 menggunakan teknologi dasar hypervisor Type 1 yang sama dengan Hyper-V, tetapi memanfaatkan fitur subset yang disebut &amp;ldquo;Platform Mesin Virtual&amp;rdquo; (Virtual Machine Platform: VMP), yang berbeda dari mesin virtual Hyper-V berfitur lengkap.&lt;/p>
&lt;p>&amp;ldquo;Lightweight Utility VM&amp;rdquo; yang digunakan di WSL2 sepenuhnya menghilangkan emulasi perangkat keras warisan (seperti BIOS virtual atau motherboard virtual) yang dimiliki oleh VM tradisional.&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;OS Host Windows (User Space)&amp;#34;]
B[&amp;#34;Sistem Berkas NTFS&amp;#34;]
C[&amp;#34;Server Protokol 9P (Plan 9)&amp;#34;]
D[&amp;#34;Lightweight Utility VM (Kernel Linux)&amp;#34;]
E[&amp;#34;ext4.vhdx (Disk Virtual)&amp;#34;]
F[&amp;#34;User Space Linux (Distribusi WSL2)&amp;#34;]
A --&amp;gt; C
C --&amp;gt;| Berbagi Berkas Lintas OS | D
D --&amp;gt; E
D --&amp;gt; F
&lt;/pre>
&lt;p>Karakteristik terbesar dari WSL2 adalah &lt;strong>kecepatan proses booting&lt;/strong> dan &lt;strong>integrasinya yang mulus dengan Host OS&lt;/strong>. Kernel Linux melakukan booting dalam waktu kurang dari beberapa detik, dan sistem berkas di sisi Windows (NTFS) diakses melalui protokol sistem berkas jaringan &lt;code>9P&lt;/code> dari Plan 9.&lt;/p>
&lt;hr>
&lt;h2 id="3-analisis-performa-mendalam-sumber-daya-komputasi-dan-io">3. Analisis Performa Mendalam: Sumber Daya Komputasi dan I/O
&lt;/h2>&lt;p>Performa mesin virtual direpresentasikan sebagai jumlah total overhead dari tiap komponen CPU, memori, dan I/O disk.&lt;/p>
&lt;h3 id="31-cpu-dan-overhead-context-switch">3.1. CPU dan Overhead Context Switch
&lt;/h3>&lt;p>Hyper-V maupun WSL2 menggunakan virtualisasi berbasis perangkat keras (Intel VT-x / AMD-V). Instruksi CPU pada dasarnya dieksekusi dengan kecepatan native, namun ketika instruksi dengan hak istimewa (privilege instructions) atau pemrosesan I/O dijalankan, terjadilah interupsi yang disebut &amp;ldquo;VM Exit&amp;rdquo;, yang menyebabkan context switch ke hypervisor.&lt;/p>
&lt;p>Overhead CPU $T_{overhead}$ pada saat tersebut dapat direpresentasikan dalam model matematika berikut:&lt;/p>
$$ T_{overhead} = \sum_{i=1}^{N} (t_{vm\_exit} + t_{hypercall\_process} + t_{vm\_entry}) $$&lt;p>Di mana:&lt;/p>
&lt;ul>
&lt;li>$N$: Jumlah terjadinya VM Exit per satuan waktu&lt;/li>
&lt;li>$t_{vm\_exit}$: Waktu transisi dari guest ke hypervisor&lt;/li>
&lt;li>$t_{hypercall\_process}$: Waktu pemrosesan I/O atau interupsi melalui VMBus&lt;/li>
&lt;li>$t_{vm\_entry}$: Waktu pemulihan (return) dari hypervisor ke guest&lt;/li>
&lt;/ul>
&lt;p>Pada WSL2, karena tidak ada emulasi legacy (warisan), $t_{hypercall\_process}$ dioptimalkan menjadi sangat kecil. Oleh karena itu, dalam komputasi murni CPU (misalnya proses kompilasi kernel atau inferensi model machine learning), penurunan performa hanya berada dalam kisaran beberapa persen jika dibandingkan dengan lingkungan bare-metal.&lt;/p>
&lt;h3 id="32-mekanisme-alokasi-memori">3.2. Mekanisme Alokasi Memori
&lt;/h3>&lt;p>Dalam hal manajemen memori, terdapat perbedaan konsep desain yang jelas di antara keduanya.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Hyper-V (Dynamic Memory)&lt;/strong>: Partisi Root akan mengalokasikan dan menarik kembali (reclaim) memori secara dinamis berdasarkan kebutuhan memori dari VM Guest. Namun, memori yang telah dialokasikan sebagai page cache di dalam Guest OS cenderung sulit untuk dibebaskan kecuali sistem sedang kekurangan memori.&lt;/li>
&lt;li>&lt;strong>WSL2 (Pengembalian Memori Dinamis)&lt;/strong>: WSL2 memiliki mekanisme unik yang secara teratur mengembalikan (reclaim) memori yang tidak lagi dibutuhkan (termasuk cache) di dalam VM Linux ke host Windows. Pada versi awal WSL2, ada masalah di mana page cache Linux menghabiskan memori Windows (pembengkakan proses Vmmem), tetapi saat ini masalah tersebut telah diperbaiki melalui patch kernel.&lt;/li>
&lt;/ul>
&lt;h3 id="33-karakteristik-io-disk-vhdx-vs-ext4vhdx">3.3. Karakteristik I/O Disk (VHDX vs ext4.vhdx)
&lt;/h3>&lt;p>Hal yang paling sering menjadi bottleneck pada performa mesin virtual adalah I/O disk.&lt;/p>
&lt;p>Latensi I/O $L_{total}$ dihitung sebagai berikut:&lt;/p>
$$ L_{total} = L_{guest\_fs} + L_{vmbus} + L_{host\_fs} + L_{physical\_disk} $$&lt;p>&lt;strong>Dalam kasus Hyper-V&lt;/strong>:
Guest Hyper-V pada umumnya menggunakan disk virtual dengan format &lt;code>VHDX&lt;/code>. Permintaan I/O yang dikeluarkan dari sistem berkas di dalam Guest OS (ext4 atau NTFS) melewati blok driver perangkat penyimpanan VMBus (storvsc), dan diproses sebagai akses ke berkas VHDX di atas NTFS pada sisi Windows.&lt;/p>
&lt;p>&lt;strong>Dalam kasus WSL2&lt;/strong>:
Distribusi Linux di WSL2 berjalan pada sistem berkas native ext4 yang dibangun di dalam berkas &lt;code>ext4.vhdx&lt;/code> khusus. Operasi berkas di dalam Linux (seperti pada direktori &lt;code>~&lt;/code>) memberikan performa native yang setara dengan Hyper-V di atas.
Namun, &lt;strong>ketika mengakses berkas di sisi Windows (seperti &lt;code>/mnt/c/&lt;/code>) dari Linux di WSL2&lt;/strong>, atau sebaliknya, prosesnya akan jauh berbeda. Akses lintas OS ini menggunakan &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>Akses yang melewati protokol 9P ini memiliki overhead proses serialisasi yang besar, sehingga pada penggunaan yang melibatkan banyak operasi baca/tulis berkas berukuran kecil (contoh: menjalankan &lt;code>npm install&lt;/code> atau operasi Git pada proyek Node.js yang berada di direktori Windows), performanya akan menurun secara drastis (bahkan bisa mengakibatkan penundaan/delay lebih dari 10 kali lipat).
Oleh karena itu, &lt;strong>aturan utamanya ketika menggunakan WSL2 adalah selalu menempatkan berkas proyek di sistem berkas native Linux (di bawah &lt;code>~/&lt;/code>)&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="4-struktur-jaringan-nat-default-switch-bridged">4. Struktur Jaringan: NAT, Default Switch, Bridged
&lt;/h2>&lt;p>Fleksibilitas fitur jaringan merupakan salah satu perbedaan besar antara Hyper-V dan WSL2.&lt;/p>
&lt;h3 id="41-jaringan-wsl2-berbasis-nat">4.1. Jaringan WSL2 (Berbasis NAT)
&lt;/h3>&lt;p>Secara default, jaringan WSL2 dikonfigurasi menggunakan &amp;ldquo;NAT (Network Address Translation)&amp;rdquo; yang memanfaatkan teknologi virtual switch dari Hyper-V.
VM Linux secara otomatis diberikan alamat IP privat yang berbeda dari host Windows (contoh: &lt;code>172.20.x.x&lt;/code>). Telah ada mekanisme bawaan di mana host Windows akan mem-forward permintaan &lt;code>localhost&lt;/code> ke layanan (port) yang berjalan di dalam WSL2, sehingga pengembang bisa menguji coba server web tanpa harus memikirkan tentang jaringan.&lt;/p>
&lt;p>Baru-baru ini, WSL2 memperkenalkan mode jaringan baru bernama &amp;ldquo;Mirrored Mode&amp;rdquo; dalam versi pratinjaunya. Mode ini berupaya meningkatkan dukungan untuk IPv6 dan kompatibilitas koneksi VPN (dapat dikonfigurasi melalui &lt;code>.wslconfig&lt;/code>).&lt;/p>
&lt;h3 id="42-virtual-switch-hyper-v-virtual-switch">4.2. Virtual Switch Hyper-V (Virtual Switch)
&lt;/h3>&lt;p>Hyper-V mampu membangun jaringan tingkat enterprise yang canggih. Melalui &amp;ldquo;Virtual Switch Manager&amp;rdquo;, utamanya disediakan 3 mode:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Eksternal (External)&lt;/strong>: Mengikat (bind) NIC fisik dari mesin host ke virtual switch, dan memungkinkan VM Guest untuk berpartisipasi langsung di jaringan fisik (koneksi bridge). VM akan mendapatkan IP dari server DHCP di subnet yang sama dengan jaringan fisik.&lt;/li>
&lt;li>&lt;strong>Internal (Internal)&lt;/strong>: Hanya mengizinkan komunikasi antara Host OS dan VM, serta antar VM. Tidak dapat keluar secara langsung ke jaringan eksternal.&lt;/li>
&lt;li>&lt;strong>Privat (Private)&lt;/strong>: Hanya mengizinkan komunikasi antar VM, dan memblokir komunikasi dengan Host OS. Digunakan untuk membangun lingkungan pengujian (sandbox) yang terisolasi.&lt;/li>
&lt;/ol>
&lt;h3 id="43-konfigurasi-jaringan-hyper-v-tingkat-lanjut-menggunakan-powershell">4.3. Konfigurasi Jaringan Hyper-V Tingkat Lanjut Menggunakan PowerShell
&lt;/h3>&lt;p>Di dalam lingkungan pengembangan atau pengujian, jika Anda ingin membangun jaringan NAT yang dikustomisasi khusus untuk VM, Anda dapat menggunakan PowerShell untuk kontrol yang lebih rinci. Berikut adalah contoh skrip untuk membuat switch virtual internal, mengkonfigurasi NAT di dalamnya, serta menyediakan akses internet bagi 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. Membuat Virtual Switch Internal&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. Mengatur Alamat IP pada NIC virtual di sisi host (IP yang menjadi Gateway)&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. Konfigurasi jaringan 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"># Perintah untuk pengecekan&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>Dengan konfigurasi ini, dengan mengatur IP secara manual (misalnya &lt;code>192.168.100.x&lt;/code>) dan gateway &lt;code>192.168.100.1&lt;/code> pada Guest Hyper-V yang ditentukan, Anda dapat membangun segmen NAT Anda sendiri yang mampu berkomunikasi dengan jaringan luar melalui host.&lt;/p>
&lt;hr>
&lt;h2 id="5-use-case-dan-panduan-praktis-pemilihan">5. Use Case dan Panduan Praktis Pemilihan
&lt;/h2>&lt;p>Mempertimbangkan perbedaan arsitektur dan performa sejauh ini, mari kita tentukan dalam situasi seperti apa salah satu teknologi ini harus digunakan.&lt;/p>
&lt;h3 id="51-skenario-di-mana-anda-harus-memilih-wsl2">5.1. Skenario di Mana Anda Harus Memilih WSL2
&lt;/h3>&lt;p>WSL2 dirancang khusus untuk &amp;ldquo;meningkatkan produktivitas pengembang&amp;rdquo;. WSL2 paling ideal untuk penggunaan berikut:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Pengembangan Web dan Cloud-Native&lt;/strong>: Pengembangan kontainer menggunakan Docker Desktop (backend WSL2) atau Podman.&lt;/li>
&lt;li>&lt;strong>Penggunaan Perangkat/Alat Khusus Linux&lt;/strong>: Jika Anda sehari-hari menggunakan bash, grep, awk, sed, atau kompilator GCC dan Clang yang dikhususkan untuk Linux.&lt;/li>
&lt;li>&lt;strong>Aplikasi GUI (WSLg)&lt;/strong>: Jika Anda ingin menjalankan aplikasi X11/Wayland Linux secara mulus di atas desktop Windows.&lt;/li>
&lt;li>&lt;strong>Pengembangan Machine Learning dan AI&lt;/strong>: Pembelajaran (training) TensorFlow atau PyTorch yang cepat dengan memanfaatkan fitur GPU Passthrough (NVIDIA CUDA di WSL).&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Catatan&lt;/strong>: Jika Anda ingin mengkustomisasi kernel secara rinci atau membangun layanan kompleks yang sangat bergantung pada systemd (saat ini systemd telah didukung, namun dinonaktifkan secara default atau masih memiliki batasan), Anda mungkin akan menemui beberapa hambatan.&lt;/p>
&lt;h3 id="52-skenario-di-mana-anda-harus-memilih-hyper-v">5.2. Skenario di Mana Anda Harus Memilih Hyper-V
&lt;/h3>&lt;p>Hyper-V ditujukan untuk &amp;ldquo;virtualisasi infrastruktur dan isolasi total&amp;rdquo;. Teknologi ini mutlak diperlukan pada penggunaan berikut:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Menjalankan VM Windows&lt;/strong>: Jika Anda ingin menjalankan berbagai versi Windows (seperti Windows Server atau Windows 10 versi lama) sebagai lingkungan pengujian.&lt;/li>
&lt;li>&lt;strong>Nested Virtualization (Virtualisasi Bersarang)&lt;/strong>: Jika Anda ingin menjalankan mesin virtual lagi di dalam mesin virtual (seperti Hyper-V atau KVM). Ini sangat penting untuk lingkungan pengujian bagi engineer infrastruktur.&lt;/li>
&lt;li>&lt;strong>Kebutuhan Jaringan Tingkat Lanjut&lt;/strong>: Jika Anda perlu mengontrol konfigurasi jaringan secara ketat, seperti koneksi bridge eksternal (bergabung dengan LAN yang sama), VLAN tagging, atau alokasi multiple NIC.&lt;/li>
&lt;li>&lt;strong>Snapshot (Checkpoint)&lt;/strong>: Fitur untuk menyimpan kondisi VM pada titik waktu tertentu dan dapat me-rollback seketika kapan saja. Sangat berguna untuk pengujian perangkat lunak yang merusak (destructive testing) atau analisis malware.&lt;/li>
&lt;li>&lt;strong>Alokasi Sumber Daya yang Tetap (Fixed)&lt;/strong>: Jika Anda ingin menetapkan (fix) jumlah core CPU dan kapasitas memori secara ketat untuk meminimalkan dampaknya terhadap Host OS.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="6-pertimbangan-throughput-io-menggunakan-model-matematis-lampiran">6. Pertimbangan Throughput I/O Menggunakan Model Matematis (Lampiran)
&lt;/h2>&lt;p>Sebagai system engineer, ketika ingin mengetahui batas performa I/O dari kedua teknologi, penting untuk memahami hubungan teoritis antara throughput $S$ dan block size $B$.&lt;/p>
&lt;p>Throughput transfer data $S$ adalah jumlah data yang ditransfer per satuan waktu, dan dapat dimodelkan sebagai berikut:&lt;/p>
$$ S(B) = \frac{B}{L_{setup} + \frac{B}{R_{max}}} $$&lt;ul>
&lt;li>$B$: Block size (Byte)&lt;/li>
&lt;li>$L_{setup}$: Latensi tetap yang terkait dengan pengaturan permintaan I/O dan context switch&lt;/li>
&lt;li>$R_{max}$: Bandwidth perangkat keras maksimum dalam penyalinan atau transfer perangkat&lt;/li>
&lt;/ul>
&lt;p>Pada akses berkas yang melalui protokol 9P WSL2, nilai $L_{setup}$ ini menjadi sangat besar (karena komunikasi socket serta serialisasi/deserialisasi protokol). Oleh karena itu, jika block size $B$ bernilai kecil (membaca/menulis banyak file kecil berukuran sekitar beberapa KB), pengaruh dari $L_{setup}$ pada penyebut (denominator) menjadi sangat dominan, yang secara drastis akan menurunkan throughput $S$.
Sebaliknya, pada akses VHDX yang melewati VMBus di Hyper-V, karena $L_{setup}$ dioptimalkan hingga ke level yang hampir sama dengan interupsi perangkat keras, IOPS yang tinggi tetap dapat dipertahankan meskipun dengan blok berskala kecil.&lt;/p>
&lt;p>Realitas matematis inilah yang menjadi dasar logika dari praktik terbaik (best practice): &amp;ldquo;Di WSL2, Anda tidak boleh meletakkan berkas proyek di sisi Windows&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="7-kesimpulan-dua-teknologi-virtualisasi-yang-hidup-berdampingan">7. Kesimpulan: Dua Teknologi Virtualisasi yang Hidup Berdampingan
&lt;/h2>&lt;p>Hyper-V dan WSL2 bukanlah masalah tentang salah satunya lebih unggul dibanding yang lain, melainkan &lt;strong>&amp;ldquo;dua solusi dengan tujuan yang berbeda&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>WSL2&lt;/strong> adalah &amp;ldquo;alat integrasi terbaik&amp;rdquo; untuk mendobrak cangkang OS Windows dan membawa ekosistem Linux secara mulus dan cepat ke tangan pengguna Windows. Tidak berlebihan jika dikatakan bahwa ini adalah lingkungan CLI pamungkas untuk para pengembang.&lt;/li>
&lt;li>&lt;strong>Hyper-V&lt;/strong> adalah &amp;ldquo;hypervisor sejati&amp;rdquo; yang membawa kemampuan manajemen dan isolasi yang kuat ke dalam desktop, sebagaimana yang telah dikembangkan di pusat data enterprise (enterprise data center). Tidak ada yang menandinginya dalam hal membangun jaringan, pengujian OS Windows, maupun simulasi lingkungan infrastruktur.&lt;/li>
&lt;/ul>
&lt;p>Dalam lingkungan Windows modern, kedua teknologi ini tidak bersaing secara langsung, melainkan hidup berdampingan secara indah di atas platform VM yang sama. Dengan menggunakan masing-masing teknologi pada tempat yang tepat sesuai kebutuhan, Windows akan menjadi engineering workstation yang paling tangguh dan fleksibel di dunia.&lt;/p></description></item><item><title>Panduan Pengaturan Lingkungan Pengembangan Ultimate untuk WSL2 (Windows Subsystem for Linux)</title><link>http://kenji.blog/id/p/wsl2-ultimate-development-setup-guide/</link><pubDate>Sat, 12 Sep 2026 23:00:00 +0900</pubDate><guid>http://kenji.blog/id/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 Panduan Pengaturan Lingkungan Pengembangan Ultimate untuk WSL2 (Windows Subsystem for Linux)" />&lt;p>&amp;ldquo;WSL2 (Windows Subsystem for Linux 2)&amp;rdquo;, yang menyediakan lingkungan pengembangan native Linux di Windows, telah menjadi alat yang sangat penting dalam pengembangan perangkat lunak modern. Namun, ada perbedaan besar dalam kinerja dan pengalaman pengembangan antara menggunakannya dalam status default dan memahaminya serta menyesuaikan arsitekturnya dengan tepat.&lt;/p>
&lt;p>Artikel ini membahas segala hal mulai dari penjelasan arsitektur yang menjadi inti dari WSL2, hingga pengaturan untuk memaksimalkan kinerja, membangun lingkungan terminal yang nyaman, integrasi mulus dengan Docker dan VS Code, dan pengaturan jaringan lanjutan. Kami akan menjelaskan secara menyeluruh semua langkah untuk membangun &amp;ldquo;Lingkungan Pengembangan Ultimate&amp;rdquo; yang dibutuhkan oleh insinyur profesional dalam volume lebih dari 10.000 karakter.&lt;/p>
&lt;hr>
&lt;h2 id="1-arsitektur-wsl2-dan-evolusi-dari-wsl1">1. Arsitektur WSL2 dan Evolusi dari WSL1
&lt;/h2>&lt;p>Untuk sepenuhnya memaksimalkan potensi WSL2, penting untuk memahami terlebih dahulu struktur internalnya. Pendekatan untuk menjalankan binari Linux di Windows sangat berbeda antara WSL generasi pertama (WSL1) dan WSL2.&lt;/p>
&lt;h3 id="wsl1-lapisan-konversi-panggilan-sistem">WSL1: Lapisan Konversi Panggilan Sistem
&lt;/h3>&lt;p>WSL1 mengadopsi mekanisme untuk mengonversi (menerjemahkan) panggilan sistem Linux ke API NT Windows secara real time. Ini memiliki keuntungan berupa overhead sumber daya yang sangat kecil karena tidak menggunakan mesin virtual (VM). Namun, sulit untuk sepenuhnya meniru panggilan sistem yang kompleks seperti operasi I/O sistem file, dan menyebabkan penurunan kinerja yang drastis, terutama pada proses yang menangani sejumlah besar file kecil, seperti &lt;code>npm install&lt;/code> pada Node.js atau operasi repositori Git.&lt;/p>
&lt;h3 id="wsl2-vm-utilitas-ringan-dan-kernel-linux-penuh">WSL2: VM Utilitas Ringan dan Kernel Linux Penuh
&lt;/h3>&lt;p>Pada WSL2, arsitekturnya telah diperbarui, dan kernel Linux asli yang dibangun oleh Microsoft berjalan secara langsung di atas &lt;strong>&amp;ldquo;VM Utilitas Ringan&amp;rdquo; yang menggunakan subset dari arsitektur Hyper-V&lt;/strong>. Ini menjamin kompatibilitas 100% untuk panggilan sistem dan secara dramatis meningkatkan kinerja I/O file dibandingkan dengan WSL1 dengan menggunakan disk virtual (VHDX) yang memanfaatkan sistem file ext4 native Linux.&lt;/p>
&lt;p>Diagram Mermaid di bawah ini menunjukkan perbedaan struktural antara WSL1 dan WSL2.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph &amp;#34;Lingkungan OS Windows&amp;#34;
A[&amp;#34;Kernel NT Windows&amp;#34;]
A --&amp;gt; F[&amp;#34;Sistem File NTFS (Drive C:)&amp;#34;]
end
subgraph &amp;#34;Arsitektur WSL2&amp;#34;
B[&amp;#34;Hypervisor Hyper-V&amp;#34;]
B --&amp;gt; C[&amp;#34;VM Utilitas Ringan&amp;#34;]
C --&amp;gt; D[&amp;#34;Kernel Linux (Microsoft)&amp;#34;]
D --&amp;gt; E[&amp;#34;Ruang Pengguna Ubuntu (glibc, bash, dll.)&amp;#34;]
D --&amp;gt; G[&amp;#34;Disk Virtual ext4 (.vhdx)&amp;#34;]
end
A -.-&amp;gt;|&amp;#34;Berbagi File Jaringan Protokol 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>Pelajaran penting yang dapat diambil dari struktur ini adalah &lt;strong>&amp;ldquo;Akses ke file di sisi Linux (di dalam VHDX) sangat cepat, namun akses ke file di sisi Windows (&lt;code>/mnt/c/&lt;/code>) sangat lambat karena harus melalui protokol 9P&amp;rdquo;&lt;/strong>. Kode sumber proyek harus selalu ditempatkan di bawah direktori home (&lt;code>~&lt;/code>) pada sisi WSL.&lt;/p>
&lt;hr>
&lt;h2 id="2-analisis-matematika-kinerja-mengapa-wsl2-cepat">2. Analisis Matematika Kinerja: Mengapa WSL2 Cepat?
&lt;/h2>&lt;p>Mari kita evaluasi peningkatan kinerja WSL2 secara kuantitatif menggunakan model matematika. Salah satu operasi yang paling memakan waktu dalam pengembangan perangkat lunak adalah proses yang melibatkan sejumlah besar I/O file (misalnya, menginstal pustaka atau mem-build).&lt;/p>
&lt;p>Total waktu eksekusi $T_{total}$ untuk suatu proses dinyatakan sebagai jumlah waktu komputasi oleh CPU $T_{compute}$ dan waktu yang dibutuhkan untuk disk I/O $T_{io}$.&lt;/p>
$$ T_{total} = T_{compute} + T_{io} $$&lt;p>Dalam kasus WSL1, karena ada overhead untuk mengonversi operasi sisi Linux ke operasi NTFS, waktu I/O dimodelkan sebagai berikut. Di sini, $n$ adalah jumlah operasi file, $t_{ntfs\_syscall}$ adalah waktu eksekusi panggilan sistem sisi Windows, dan $t_{trans}$ adalah overhead dari lapisan konversi.&lt;/p>
$$ T_{wsl1\_io} = \sum_{i=1}^{n} (t_{ntfs\_syscall_i} + t_{trans_i}) $$&lt;p>Di sisi lain, pada kasus WSL2, karena kernel mengeluarkan I/O secara langsung ke sistem file ext4, overheadnya hanya berupa penundaan yang sangat kecil $t_{virt}$ akibat virtualisasi.&lt;/p>
$$ T_{wsl2\_io} = \sum_{i=1}^{n} (t_{ext4_i} + t_{virt_i}) $$&lt;p>Pada sistem file umum, karena $t_{ext4} \ll t_{ntfs\_syscall} + t_{trans}$, jika $n$ sangat besar (melakukan puluhan hingga ratusan ribu operasi file), perbedaan waktu I/O antara WSL1 dan WSL2 akan melebar secara eksponensial.&lt;/p>
&lt;p>Selain itu, jika rasio overhead komputasi CPU di lingkungan virtualisasi adalah $\rho$, dengan virtualisasi berbantuan perangkat keras terbaru (Intel VT-x / AMD-V), rasio tersebut akan berada pada kisaran $\rho \approx 0.01 \sim 0.03$ (1 hingga 3%). Oleh karena itu, bahkan pada tugas komputasi murni, ia akan memberikan kinerja sebesar $97\% \sim 99\%$ yang sebanding dengan lingkungan native Linux.&lt;/p>
&lt;hr>
&lt;h2 id="3-instalasi-dan-pembangunan-fondasi">3. Instalasi dan Pembangunan Fondasi
&lt;/h2>&lt;p>Pada Windows 10/11, instalasi WSL2 telah menjadi sangat sederhana. Cukup buka PowerShell dengan hak administrator dan jalankan perintah berikut.&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 dan Ubuntu akan diinstal secara default&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"># Jika Anda ingin menentukan distribusi tertentu&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Dapat diperiksa dengan 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>Setelah penginstalan dan melalui proses restart, Anda akan diminta untuk mengatur nama pengguna dan kata sandi UNIX saat pertama kali dijalankan. Pengguna ini terpisah dari pengguna Windows dan hanya valid di dalam WSL.&lt;/p>
&lt;p>Jika Anda sudah menggunakan WSL1, konversikan ke WSL2 dengan perintah berikut.&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"># Mengonversi distribusi yang ada ke 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"># Menjadikan WSL2 sebagai versi default untuk distribusi yang akan ditambahkan di masa mendatang&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-rahasia-kontrol-sumber-daya-wslconfig-dan-wslconf">4. Rahasia Kontrol Sumber Daya: .wslconfig dan wsl.conf
&lt;/h2>&lt;p>Salah satu jebakan terbesar di WSL2 adalah &amp;ldquo;konsumsi memori tak terbatas (pembengkakan proses Vmmem)&amp;rdquo;. Karena WSL2 menggunakan cache halaman dari kernel Linux, setiap kali I/O dilakukan, ia akan memakan memori host (Windows) tanpa batas. Untuk mencegah hal ini, perlu dilakukan pembatasan sumber daya melalui file konfigurasi.&lt;/p>
&lt;p>File konfigurasi WSL2 dibagi menjadi dua: &lt;strong>&lt;code>.wslconfig&lt;/code> yang memengaruhi Windows secara keseluruhan&lt;/strong>, dan &lt;strong>&lt;code>wsl.conf&lt;/code> yang memengaruhi internal setiap distribusi&lt;/strong>.&lt;/p>
&lt;h3 id="41-wslconfig-sisi-windows">4.1. .wslconfig (Sisi Windows)
&lt;/h3>&lt;p>Buat file di direktori profil pengguna Windows (&lt;code>C:\Users\&amp;lt;Nama Pengguna&amp;gt;\.wslconfig&lt;/code>) untuk mengontrol alokasi sumber daya ke 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;Nama Pengguna&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"># Jumlah memori maksimum yang dialokasikan untuk VM. Disarankan sekitar 50% hingga 75% dari total memori host&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"># Jumlah core CPU yang digunakan (Jika dihilangkan, semua core akan digunakan)&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"># Ukuran file 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"># Lokasi penyimpanan file swap (Jika ingin menghemat ruang di drive 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"># Aktifkan penerusan localhost (Untuk mengakses WSL melalui localhost dari sisi Windows)&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"># Secara otomatis melepaskan memori (Hanya Windows 11)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Secara dinamis melepaskan cache halaman untuk mencegah pembengkakan 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"># Fitur jaringan lanjutan tersedia pada Windows 11 22H2 dan lebih baru&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Hal ini memungkinkan dukungan IPv6 dan berbagi alamat IP yang sama antara WSL dan 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-sisi-linux">4.2. wsl.conf (Sisi Linux)
&lt;/h3>&lt;p>Edit &lt;code>/etc/wsl.conf&lt;/code> di dalam WSL untuk mengontrol perilaku khusus distribusi.&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 (Diedit di dalam 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"># Nonaktifkan pembuatan /etc/resolv.conf yang dibuat secara otomatis saat WSL dijalankan&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Berguna jika Anda ingin mengatur DNS kustom (misalnya: 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"># Atur nama host kustom&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"># Pengaturan saat memasang drive 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"># Ubah titik pemasangan (mount point) drive C dari /mnt/c ke /c (untuk mempersingkat jalur)&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"># Aktifkan systemd (WSL 0.67.6 atau lebih baru)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ini memungkinkan snap dan berbagai daemon (seperti Docker) untuk berjalan secara native&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"># Pengguna default untuk login&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>Untuk menerapkan pengaturan ini, Anda perlu menjalankan &lt;code>wsl --shutdown&lt;/code> di PowerShell untuk menghentikan sepenuhnya VM WSL sebelum menghidupkannya kembali.&lt;/p>
&lt;hr>
&lt;h2 id="5-lingkungan-terminal-ultimate-zsh--powerlevel10k">5. Lingkungan Terminal Ultimate: Zsh + Powerlevel10k
&lt;/h2>&lt;p>Produktivitas tidak akan meningkat jika Anda tetap menggunakan bash bawaan. Kami akan membangun prompt terkuat dengan menggabungkan Zsh, yang menawarkan fitur pelengkapan otomatis dan visibilitas yang kuat, dengan tema super cepat &amp;ldquo;Powerlevel10k&amp;rdquo;.&lt;/p>
&lt;h3 id="51-pengenalan-dan-pengaturan-windows-terminal">5.1. Pengenalan dan Pengaturan Windows Terminal
&lt;/h3>&lt;p>Instal &amp;ldquo;Windows Terminal&amp;rdquo; dari Microsoft Store. Buka pengaturan JSON (&lt;code>settings.json&lt;/code>), tetapkan profil default ke WSL (Ubuntu), dan ubah font menjadi Nerd Font untuk pengembangan (misalnya: &lt;code>HackGen Console NF&lt;/code> atau &lt;code>MesloLGS NF&lt;/code>).&lt;/p>
&lt;h3 id="52-menginstal-zsh-dan-oh-my-zsh">5.2. Menginstal Zsh dan Oh My Zsh
&lt;/h3>&lt;p>Jalankan perintah berikut di 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"># Memperbarui paket dan menginstal 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"># Menjalankan skrip instalasi 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-menginstal-powerlevel10k-dan-plugin">5.3. Menginstal Powerlevel10k dan Plugin
&lt;/h3>&lt;p>Kami akan memperkenalkan plugin (penyorotan sintaksis dan pelengkapan otomatis input) untuk lebih meningkatkan Zsh, serta tema 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>Edit &lt;code>~/.zshrc&lt;/code> untuk mengaktifkan tema dan plugin.&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"># Perubahan pada ~/.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"># Tambahkan ke array plugin&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>Simpan dan jalankan &lt;code>source ~/.zshrc&lt;/code>, panduan konfigurasi Powerlevel10k (&lt;code>p10k configure&lt;/code>) akan dimulai. Ikuti petunjuk di layar untuk menyesuaikan prompt Anda sendiri (gaya prompt, ada/tidaknya ikon, informasi yang ditampilkan, dll.). Nama cabang dan status Git, versi Node.js, waktu eksekusi perintah, dll. akan ditampilkan secara real-time, sehingga secara dramatis meningkatkan efisiensi pengembangan Anda.&lt;/p>
&lt;hr>
&lt;h2 id="6-vs-code-remote---integrasi-mulus-dengan-wsl">6. VS Code Remote - Integrasi Mulus dengan WSL
&lt;/h2>&lt;p>Dalam pengembangan menggunakan WSL2, ekstensi &amp;ldquo;Remote - WSL&amp;rdquo; adalah mekanisme yang memungkinkan akses mulus ke file di dalam WSL dari IDE (Visual Studio Code) yang diinstal pada sisi Windows.&lt;/p>
&lt;h3 id="penjelasan-arsitektur">Penjelasan Arsitektur
&lt;/h3>&lt;p>Diagram urutan di bawah ini menunjukkan bagaimana VS Code berkomunikasi dengan WSL2.&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;Pengembang&amp;#34;
participant V as &amp;#34;UI VS Code (Windows)&amp;#34;
participant S as &amp;#34;Server VS Code (WSL2)&amp;#34;
participant F as &amp;#34;Sistem File ext4 (WSL2)&amp;#34;
U-&amp;gt;&amp;gt;V: &amp;#34;Ketik `code .` di Terminal WSL&amp;#34;
V-&amp;gt;&amp;gt;S: &amp;#34;Membangun Koneksi RPC melalui Vsock&amp;#34;
Note over V,S: Berkomunikasi menggunakan Hyper-V socket alih-alih TCP/IP
S-&amp;gt;&amp;gt;F: &amp;#34;Membaca File Sumber / Menjalankan Linter&amp;#34;
F--&amp;gt;&amp;gt;S: &amp;#34;Mengembalikan Data &amp;amp; Analisis&amp;#34;
S--&amp;gt;&amp;gt;V: &amp;#34;Mengalirkan hasil Language Server ke UI&amp;#34;
V--&amp;gt;&amp;gt;U: &amp;#34;Menampilkan penyorotan sintaksis &amp;amp; kesalahan&amp;#34;
&lt;/pre>
&lt;p>VS Code di sisi Windows hanya berfungsi sebagai &amp;ldquo;klien tipis (UI)&amp;rdquo;, dan semua tugas berat seperti Language Server, debugger, dan eksekusi terminal diproses oleh &amp;ldquo;VS Code Server&amp;rdquo; di sisi WSL. Hal ini memungkinkan lingkungan yang bersih hanya di sisi WSL tanpa perlu menginstal Node.js atau Python di sisi Windows.&lt;/p>
&lt;h3 id="pengaturan-vs-code-yang-wajib">Pengaturan VS Code yang Wajib
&lt;/h3>&lt;p>Instal &lt;strong>&amp;ldquo;WSL&amp;rdquo; (ms-vscode-remote.remote-wsl)&lt;/strong> dari &amp;ldquo;Extensions&amp;rdquo; di VS Code. Setelah itu, cukup pindah ke direktori proyek di terminal WSL dan jalankan &lt;code>code .&lt;/code>, dan VS Code di sisi Windows akan diluncurkan dengan direktori tersebut terbuka.&lt;/p>
&lt;p>&lt;strong>Poin Penting (Masalah Kode Baris Baru):&lt;/strong>
Kode baris baru berbeda antara Windows dan Linux (Windows menggunakan &lt;code>CRLF&lt;/code>, Linux menggunakan &lt;code>LF&lt;/code>). Saat mengembangkan di WSL, pastikan untuk mengatur pengaturan &lt;code>core.autocrlf&lt;/code> Git dan pengaturan default file VS Code ke &lt;code>LF&lt;/code>. Jika Anda mengabaikan hal ini, Anda akan diganggu oleh kesalahan misterius saat menjalankan skrip shell atau kontainer 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"># Pengaturan kode baris baru Git di sisi 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>Tambahkan juga hal berikut ini ke &lt;code>settings.json&lt;/code> (pengaturan remote) di VS 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;/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-optimasi-docker-desktop-dan-integrasi-wsl2">7. Optimasi Docker Desktop dan Integrasi WSL2
&lt;/h2>&lt;p>Ada dua pendekatan utama untuk menggunakan Docker di lingkungan WSL2.&lt;/p>
&lt;ol>
&lt;li>Menginstal &lt;strong>Docker Desktop for Windows&lt;/strong> dan mengaktifkan fitur integrasi WSL2.&lt;/li>
&lt;li>Menginstal langsung &lt;strong>Docker Engine Native&lt;/strong> di dalam WSL2 (seperti Ubuntu).&lt;/li>
&lt;/ol>
&lt;h3 id="pendekatan-1-docker-desktop-direkomendasikan">Pendekatan 1: Docker Desktop (Direkomendasikan)
&lt;/h3>&lt;p>Ini sering kali direkomendasikan karena mudah dikelola dengan GUI dan akses transparan ke kontainer antara Windows dan WSL. Periksa hal-hal berikut dari Pengaturan (Settings) Docker Desktop.&lt;/p>
&lt;ul>
&lt;li>Centang &lt;code>General&lt;/code> -&amp;gt; &lt;code>Use the WSL 2 based engine&lt;/code>.&lt;/li>
&lt;li>Centang &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> dan nyalakan tombol geser untuk distribusi (Ubuntu) yang Anda gunakan.&lt;/li>
&lt;/ul>
&lt;p>Ini memungkinkan Anda menjalankan perintah &lt;code>docker&lt;/code> langsung dari terminal WSL2, dan komunikasi dengan daemon Docker akan dialihkan melalui VM ringan khusus (&lt;code>docker-desktop&lt;/code> dan &lt;code>docker-desktop-data&lt;/code>) yang dikelola oleh Docker Desktop.&lt;/p>
&lt;h3 id="pendekatan-2-pengenalan-langsung-docker-engine-native">Pendekatan 2: Pengenalan Langsung Docker Engine Native
&lt;/h3>&lt;p>Jika Anda memiliki batasan jaringan perusahaan (seperti menghindari versi berbayar Docker Desktop) atau ingin mengurangi overhead kinerja hingga batas ekstrem, aktifkan &lt;code>systemd&lt;/code> di &lt;code>/etc/wsl.conf&lt;/code> lalu instal Docker sebagai server Ubuntu murni.&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"># Kutipan dari prosedur instalasi resmi Docker di WSL2 Ubuntu dengan systemd diaktifkan&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"># Menambahkan repositori&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"># Menambahkan pengguna saat ini ke grup docker (untuk menjalankan tanpa 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>Setelah restart, &lt;code>systemctl start docker&lt;/code> akan berfungsi persis seperti di lingkungan Linux native dan menawarkan kinerja yang tinggi.&lt;/p>
&lt;hr>
&lt;h2 id="8-integrasi-kunci-ssh-otentikasi-mulus-di-windows-dan-wsl">8. Integrasi Kunci SSH: Otentikasi Mulus di Windows dan WSL
&lt;/h2>&lt;p>Saat melakukan kloning SSH dari Git atau koneksi SSH ke server jarak jauh, mengelola kunci SSH secara terpisah di sisi Windows dan sisi WSL sangatlah merepotkan. Untuk menyeimbangkan antara keamanan dan kenyamanan, kami akan mengonfigurasi jembatan untuk menghubungkan agen SSH (atau manajer kata sandi seperti 1Password) yang berjalan di Windows ke sisi WSL.&lt;/p>
&lt;p>Di sini, kita akan membahas pendekatan yang paling aman dan modern, yaitu menggunakan &lt;strong>fitur agen SSH 1Password&lt;/strong> atau &lt;strong>OpenSSH Authentication Agent dari Windows&lt;/strong> dan meneruskannya ke soket domain UNIX WSL2 menggunakan &lt;code>npiperelay&lt;/code> atau &lt;code>socat&lt;/code>.&lt;/p>
&lt;h3 id="penerusan-soket-ssh-agent">Penerusan Soket ssh-agent
&lt;/h3>&lt;p>Biasanya, agen SSH yang disediakan sebagai Named Pipe (pipa bernama) di Windows perlu dikonversi ke file soket di sisi WSL. Anda dapat menggunakan &lt;code>wsl-ssh-agent&lt;/code> atau fitur yang disediakan oleh 1Password untuk membuatnya lebih mudah.&lt;/p>
&lt;p>Di layar pengaturan 1Password, aktifkan &amp;ldquo;Developer&amp;rdquo; -&amp;gt; &amp;ldquo;Gunakan Agen SSH&amp;rdquo;.
Selanjutnya, tambahkan pengaturan berikut ke &lt;code>~/.zshrc&lt;/code> atau &lt;code>~/.bashrc&lt;/code> di sisi WSL untuk mengikat soket secara otomatis saat login.&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"># Menambahkan ke ~/.zshrc (Contoh jika menggunakan Agen SSH 1Password)&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"># Jika soket tidak ada atau proses tidak terikat saat WSL dijalankan, teruskan menggunakan socat dan npiperelay&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"># Memulai socat di latar belakang dan menghubungkan Named Pipe di sisi Windows ke soket UNIX di sisi 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;p>*Anda harus menginstal &lt;code>npiperelay.exe&lt;/code> dan menambahkannya ke path di sisi Windows terlebih dahulu.&lt;/p>
&lt;p>Setelah pengaturan ini selesai, ketika Anda menjalankan &lt;code>ssh-add -l&lt;/code> dari terminal WSL, daftar kunci publik dari kunci SSH yang terdaftar di 1Password atau di sisi Windows akan ditampilkan. Dengan demikian, Anda dapat lolos otentikasi dengan aman tanpa harus menyalin file kunci privat ke dalam WSL.&lt;/p>
&lt;hr>
&lt;h2 id="9-pemeliharaan-optimasi-kompaksi-vhdx-yang-membengkak">9. Pemeliharaan: Optimasi (Kompaksi) VHDX yang Membengkak
&lt;/h2>&lt;p>Salah satu kelemahan terbesar WSL2 adalah bahwa &amp;ldquo;ukuran file dari disk virtual di sisi Windows (.vhdx) tidak menyusut secara otomatis bahkan jika Anda menghapus image Docker atau menghapus file&amp;rdquo;. Jika Anda terus mengembangkan untuk jangka waktu yang lama, file ext4.vhdx dapat membengkak hingga puluhan atau ratusan GB.&lt;/p>
&lt;p>Untuk mengosongkan ruang disk, Anda perlu mengoptimalkan (Compact) VHDX dari sisi Windows secara berkala.&lt;/p>
&lt;ol>
&lt;li>Pertama, matikan WSL sepenuhnya.
&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>Buka PowerShell dengan hak administrator, dan jalankan perintah &lt;code>diskpart&lt;/code> di bawah ini, atau perintah &lt;code>Optimize-VHD&lt;/code> dari modul Hyper-V (yang terakhir hanya dapat digunakan jika Hyper-V diaktifkan).&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"># Jika modul Hyper-V tersedia&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"># Jika menggunakan 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"># Masukkan secara interaktif dalam prompt di bawah ini&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;Nama Pengguna&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>Dengan melakukan operasi ini secara berkala, Anda bisa memulihkan ruang kosong di drive C yang terbuang percuma.&lt;/p>
&lt;hr>
&lt;h2 id="10-penutup">10. Penutup
&lt;/h2>&lt;p>WSL2 telah sepenuhnya melampaui batasan sebagai &amp;ldquo;sekadar bonus Linux yang berjalan di Windows&amp;rdquo;, dan telah berevolusi menjadi platform pengembangan yang kuat yang tidak kalah, atau bahkan lebih baik dari mesin macOS atau mesin Linux native.&lt;/p>
&lt;p>Dengan menerapkan semua pengaturan yang dijelaskan dalam artikel ini (optimasi sumber daya dengan &lt;code>.wslconfig&lt;/code>, peningkatan terminal dengan Zsh + Powerlevel10k, akses transparan dengan VS Code Remote, serta integrasi SSH dan pemeliharaan VHDX), Anda akan dapat melengkapi &amp;ldquo;Lingkungan Pengembangan Ultimate&amp;rdquo; yang bebas stres, cepat, dan aman.&lt;/p>
&lt;p>Meskipun membutuhkan sedikit upaya untuk menyiapkan lingkungan tersebut, begitu Anda menetapkan pengaturannya, produktivitas rekayasa perangkat lunak Anda akan meningkat secara dramatis di masa mendatang. Kami harap Anda mengeksplorasi penyesuaian lebih lanjut berdasarkan panduan ini sesuai dengan proyek dan preferensi Anda.&lt;/p></description></item></channel></rss>