Subsistem Windows 9x untuk Linux
(social.hails.org)- Proyek eksperimental yang menjalankan kernel Linux terbaru (6.19) secara kooperatif di dalam kernel Windows 9x, sehingga seluruh kemampuan kedua sistem operasi bisa dimanfaatkan secara bersamaan
- Berbeda dari WSL, proyek ini tidak menggunakan virtualisasi perangkat keras, sehingga bisa berjalan bahkan pada 486
- Fitur OS modern seperti paging, proteksi memori, dan penjadwalan preemptif dapat digunakan di lingkungan Windows 9x, serta mendukung menjalankan aplikasi berdampingan tanpa reboot
- Terdiri dari tiga komponen: kernel Linux yang telah dipatch, driver VxD, dan klien
wsl.com, dengan User-Mode Linux yang dimodifikasi agar memanggil API kernel Win9x - System call didispatch melalui handler General Protection Fault (GPF) alih-alih
int 0x80, karena keterbatasan tabel deskriptor interupsi Win9x yang pendek - "Ditulis dengan bangga tanpa AI (Proudly written without AI)", berlisensi GPL-3
WSL9x - codeberg.org/hails/wsl9x
Gambaran umum
- WSL9x adalah subsistem Linux untuk Windows 9x yang menjalankan kernel Linux terbaru (6.19 pada saat penulisan) secara kooperatif di dalam kernel Windows 9x
- Seluruh kemampuan kedua sistem operasi dapat dimanfaatkan sekaligus, termasuk paging, proteksi memori, dan penjadwalan preemptif
- Aplikasi dari kedua OS dapat dijalankan berdampingan tanpa reboot
- Ditulis langsung tanpa AI
Struktur teknis
- WSL9x terdiri dari tiga komponen
- Kernel Linux yang telah dipatch (
win9x-um-6.19branch) - Driver VxD
- Program klien
wsl.com
- Kernel Linux yang telah dipatch (
Driver VxD
- Menangani inisialisasi WSL9x, dengan entry point di
vxd/wsl9x.asm - Menyiapkan pemetaan awal kode kernel dan memuat
vmlinux.elfdari disk melalui interupsi DOS (vxd/loader.c,vxd/fs.asm) - Kernel dikompilasi dengan alamat basis tetap
0xd0000000 - Memulai thread baru di dalam System VM dan mengalokasikan stack 16 KiB untuk digunakan saat masuk ke Linux
- Setelah itu masuk ke kernel dan ke event loop yang menangani dispatch IRQ, kembali ke userspace, dan keadaan idle (
vxd/entry.c)
Penanganan system call dan page fault
- Driver menangani page fault dan system call, yaitu event userspace yang harus didispatch ke kernel
- System call diproses melalui handler General Protection Fault (GPF)
- Win9x tidak memiliki tabel deskriptor interupsi yang cukup panjang untuk memasang handler yang layak bagi interupsi system call Linux i386
int 0x80 - Handler GPF memeriksa instruksi yang menyebabkan fault; jika itu
int 0x80, pointer instruksi dimajukan seolah interupsi berhasil, lalu didispatch ke system call Linux (vxd/fault.c)
- Win9x tidak memiliki tabel deskriptor interupsi yang cukup panjang untuk memasang handler yang layak bagi interupsi system call Linux i386
Modifikasi kernel Linux
- Berbasis User-mode Linux, tetapi dimodifikasi agar memanggil API kernel Windows 9x alih-alih API POSIX
- Berjalan di ring 0 (mode supervisor/kernel), bukan mode pengguna (ring 3)
- Sebagian besar integrasi kernel Win9x, termasuk context switching, berada di sisi kernel Linux
- Lokasi kode utama:
linux/arch/um/os-Win95 - Entry point:
_startdimain.c, dengan file pentingprocess.c,mmu.c
- Lokasi kode utama:
Klien wsl.com
- Merupakan program DOS 16-bit yang diimplementasikan di
wsl/wsl.asm - Memungkinkan prompt MS-DOS digunakan sebagai jendela TTY tanpa implementasi TTY terpisah
- Saat dijalankan, program memanggil WSL9x V86 API (
vxd/v86_api.asm) untuk memperoleh konsol yang tidak terpakai, lalu memberi tahu agar output konsol tersebut didispatch kepadanya - Setelah itu masuk ke event loop yang menunggu IRQ dan mencoba membaca keyboard saat interupsi terjadi
- Juga berfungsi sebagai titik sinkronisasi untuk driver konsol (
vxd/console.c)- Saat output Linux siap, event dijadwalkan, lalu
int 0x29dijalankan dalam konteks MS-DOS VM untuk menampilkan karakter ke jendela DOS - Interupsi ini juga merupakan titik tempat driver ANSI untuk DOS seperti NNANSI mencegat output terminal guna mengimplementasikan kode escape ANSI
- Saat output Linux siap, event dijadwalkan, lalu
Persyaratan build dan eksekusi
- Memerlukan cross toolchain untuk target
i386-linux-musl(disarankan memakai musl-cross-make) - Memerlukan toolchain Open Watcom v2 untuk membangun komponen Windows
- Perlu membangun kernel Linux yang telah dipatch dari branch
win9x-um-6.19 - Setel variabel lingkungan
WATCOMdanLINUXdengan benar (lihat contoh di.envrc.example) - Memerlukan image hard disk
hdd.base.imgdengan Windows 9x yang sudah terpasang sebelumnya - Menjalankan
makeakan menghasilkanhdd.imgyang telah disiapkan dengan WSL9x - Dari prompt MS-DOS, jalankan
wsluntuk membuka pty; jika ingin memakai warna ANSI, disarankan memuat driver sepertinnansi.comterlebih dahulu
Lisensi
- GPL-3
2 komentar
Komentar Hacker News
http://www.colinux.org/
https://github.com/wishstudio/flinux
flinux pada dasarnya lebih dekat ke arsitektur WSL1, sementara CoLinux terasa lebih seperti WSL2 karena membawa kernel Linux berdampingan
Secara teknis, rasanya Cygwin lebih ortodoks. Alih-alih memaksa menyisipkan plumbing Linux eksternal, pendekatannya adalah menjalankan binary POSIX native di atas Windows, dan saya juga menyukai fakta bahwa itu selesai hanya dengan link DLL ringan tanpa menyentuh ring 0
Namun saat itu kenyamanan package manager CLI masih kurang, dan ketika benar-benar bekerja di Windows, saya cukup terpikat dengan CoLinux
Masalah utamanya yang saya ingat adalah DLL hell. Misalnya, kalau port OpenSSH untuk Windows membawa cygwin1.dll versinya sendiri, bentrok versi sering terjadi
Meski begitu, di masa ketika RAM kecil dan swapping berat, rendahnya overhead tetap berarti
Pada masa itu aplikasi native lebih dominan daripada Web 2.0 atau NodeJS, dan Java juga tidak punya reputasi bagus
Pada akhirnya, seperti biasa, rasanya seperti maju dua langkah lalu mundur satu langkah
Berlawanan dengan nuansa bahwa ia tidak lambat, kenyataannya lambat, kompatibilitasnya juga lebih rendah daripada cara lain, perlu recompile, dan sepanjang sebagian besar umurnya bukan alat yang dicintai luas
Di dalam cygwin1.dll terjadi banyak sekali sulap kompatibilitas, dan pada akhirnya menurut saya itu sama saja dengan menarik plumbing Linux eksternal ke dalam proses. Terutama kalau mengingat cara mereka mengimplementasikan fork() tanpa dukungan sistem
Cygwin sama sekali tidak berjalan di dalam isolasi Windows AppContainer. MSYS2 pun sampai sekarang memakai fondasi ini, jadi binary MSYS2 tidak bisa dijalankan di AppContainer
Karena itu, untuk sandboxing Claude Code kami harus menempuh jalan yang sepenuhnya berbeda. Claude Code menginginkan Git for Windows, dan Git for Windows mendistribusikan bash.exe dan lainnya yang dibangun dengan MSYS2
Sebaliknya, build Windows yang benar-benar native tidak punya hacking aneh semacam yang diminta cygwin1.dll, jadi build non-MSYS2 yang saya temukan berjalan baik di AppContainer
Karena bisa memakai pacman milik Arch Linux, mengelola binary POSIX native di Windows jadi cukup ramah bahkan tanpa VM Linux
Jika versi Cygwin yang sudah dibangun sebelumnya untuk pustaka C yang ingin dipakai tidak ada, Anda harus menjalankan seluruh pohon dependensi sendiri dengan configure dan make
Selain itu, seingat saya sekitar dua pertiga kemungkinan Anda harus memperbaiki sesuatu sendiri, karena POSIX-nya tidak sepenuhnya cocok
Namun untuk mendapatkan semantik yang benar, diperlukan segala macam jalan memutar dan hack; misalnya fork bukan copy-on-write
Saya memakai Cygwin dari sekitar 1999 sampai 2022, sempat juga memakai WSL2 sedikit, dan masih memakainya di laptop
Tapi untuk desktop, sejak tahun lalu saya sudah sepenuhnya pindah ke Linux
Dulu saat masih memakai Windows di era XP, saya pernah menjalankan Colinux, dan itu alat yang benar-benar luar biasa
Jauh lebih mudah menyiapkan stack LAMP di sisi Linux, dan dengan tetap mengedit memakai editor Windows saya bisa membangun lingkungan pengembangan lokal yang cukup bagus
Bahkan bisa bereksperimen menjalankan desktop Linux di atasnya dengan memasang server X11 untuk Windows
Saat melihat diri sendiri makin lama makin menumpuk lingkungan mirip Unix di atas Windows seperti itu, akhirnya saya pindah ke macOS
Di luar nilai hacking murni, kalau memikirkan kegunaan nyata, saya juga merasa mesin kelas 486 akan cepat menabrak batas memori
http://colinux.org/
Hanya saja, rasanya tidak banyak orang yang menyadari itu
Bagi saya ini tampak seperti pekerjaan yang nyaris mustahil
Tapi saya jadi penasaran bagaimana ini terlihat di mata orang yang memahami arsitekturnya
Jadi saya teringat lelucon tentang dua matematikawan yang bilang suatu teorema itu sepele, lalu baru setelah menjelaskan selama dua jam mereka mengakui bahwa itu memang sepele
Profesor pun bilang iya dan kami langsung lanjut ke bagian berikutnya
Yang justru sangat mengagumkan adalah bahwa penulisnya berhasil mengidentifikasi satu per satu daftar panjang detail setebal kitab yang memungkinkan semua ini
Karena itu, tiap program hanya bisa membaca sebagian memorinya sendiri, dan CPU juga hanya dipakai dalam waktu terbatas sebelum diberikan ke program berikutnya
Windows mulai memakai fungsi-fungsi seperti ini secara serius sejak Windows NT, dan XP juga berasal dari garis itu
Sebaliknya, sampai Windows 98, program nyaris bisa melakukan apa saja, dan fitur proteksi perangkat keras semacam itu praktis menganggur
Windows pada masa itu terasa lebih seperti sekumpulan pustaka fungsional untuk menampilkan UI dan berbicara dengan periferal ketimbang sebuah sistem operasi
CPU punya perangkat keras khusus untuk membatasi akses memori dan waktu pemrosesan, tetapi Windows 9x tidak memanfaatkannya sepenuhnya
Jadi saya rasa ada celah bagi subsistem Linux untuk Windows 9x ini untuk berpura-pura menjadi sistem operasinya sendiri, mengambil alih perangkat keras itu, lalu menjalankan sistem operasi modern
Menurut saya bagian tersulit dari pekerjaan seperti ini adalah memahami API driver Microsoft
Dokumentasi era 9x tidak cukup rinci dan juga tidak mudah diakses, dan sampai sekarang pun ini bukan wilayah yang menyenangkan
Jadi justru tampaknya ada cukup ruang untuk memindahkan sebagian fungsi level rendah Linux ke dalamnya
Di satu sisi ada pembahasan bahwa Show HN makin banyak sampai tiga kali lipat dan dipenuhi aplikasi dengan nuansa vibe coding yang mirip, sementara di sisi lain ada seseorang yang selama 6 tahun membongkar isi Win9x dan menjalankan kernel Linux modern di dalamnya
Dibandingkan thread yang dipenuhi aplikasi hasil prompt 20 menit, posting seperti ini terasa benar-benar membahagiakan
Rasanya cukup menyenangkan bisa melihat kalimat seperti itu
Alih-alih create me an owl app, sekarang umum meminta dibuatkan prompt komprehensif untuk membuat owl app, lalu menempelkannya ke sesi AI berikutnya
Karena ada juga produk bernama Zero AI, jadi bisa terbaca seperti itu
Ungkapannya jauh lebih jelas, dan proyeknya sendiri juga benar-benar menakjubkan
https://codeberg.org/hails/wsl9x
Mastodon masih mengharuskan menjalankan JavaScript hanya untuk membaca satu posting, jadi biasanya saya langsung mengabaikannya
https://github.com/mastodon/mastodon/issues/23153
https://github.com/mastodon/mastodon/issues/19953
Saya tahu potongan informasi seperti adanya VM Monitor dan adanya dukungan semacam ini, tapi rasanya penjelasan detailnya tersebar di mana-mana
Banyak orang merangkum Windows seolah hanya berjalan di atas DOS, tapi jelas itu tidak akurat
Tentu ini berbeda dari virtual machine dalam arti modern, tetapi di dalamnya ada struktur teknis yang cukup menarik dan kebanyakan materi tampaknya hanya membahasnya secara dangkal
Saya juga penasaran seberapa mirip proyek ini dengan BSD on Windows
Dan saya juga tahu Architecture of Windows 9x, tetapi bagi selera saya rasanya kurang dalam
https://winworldpc.com/product/windows-sdk-ddk/windows-95-ddk
Dokumentasinya sangat rinci dan juga punya banyak kode contoh, jadi bagus untuk digali langsung
Karena WSL berarti Linux on Windows, ini tampaknya dibaca sebagai W9xSL dalam arti Linux di atas Windows 9x
Saya tidak bisa langsung memberi dasar pastinya, tetapi saya ingat pernah membaca bahwa ini terkait masalah merek dagang
Katanya mereka awalnya ingin menyebutnya Linux Subsystem for Windows, tetapi pihak Linux foundation tidak mengizinkan proyek yang tidak diotorisasi memakai nama yang diawali Linux
Filsafat intinya adalah memiliki beberapa personality, lalu menerjemahkan system call dari tiap lingkungan ke panggilan kernel NT
Karena itu, WSL1 pada 2016 pada dasarnya bisa dianggap mengulangi trik yang sama untuk Linux
Sebaliknya, Windows 9x berasal dari garis DOS, jadi untuk menjalankan Linux di dalamnya mungkin dibutuhkan hack yang jauh lebih kotor dan secara mendasar berbeda
Mungkin itulah juga alasan tak seorang pun melakukannya saat itu
Jadi fakta bahwa ini benar-benar berjalan terasa menunjukkan betapa majunya arsitektur NT pada zamannya
Untuk kegunaan praktis, saya teringat lingkungan yang masih terikat ke Windows 98, seperti perangkat lunak medis atau industri lama
Namun jika pada 2026 Anda memegang 486, kemungkinan besar akan jauh lebih berguna menjalankan Linux native saja daripada menanamkan Linux ke dalam turunan DOS berusia 30 tahun
Fakta bahwa Windows 9x bisa menjalankan DOS saja sudah melibatkan cukup banyak sihir
Saya juga meninggalkan beberapa bacaan terkait
Wah, coLinux haha -_- nama yang menyenangkan untuk didengar. Haha. Tapi sekarang pun saya tidak pakai meski ada WSL, namun win95+linux ini cukup menggoda.