• एक प्रायोगिक प्रोजेक्ट जो Windows 9x kernel के अंदर आधुनिक Linux kernel (6.19) को cooperative तरीके से चलाता है, ताकि दोनों operating systems की पूरी क्षमताओं का एक साथ उपयोग किया जा सके
  • WSL के विपरीत, यह hardware virtualization का उपयोग नहीं करता, इसलिए 486 पर भी चल सकता है
  • paging, memory protection, preemptive scheduling जैसी आधुनिक OS सुविधाएँ Windows 9x वातावरण में उपलब्ध कराता है, और reboot के बिना applications को साथ-साथ चलाने देता है
  • यह patched Linux kernel, VxD driver, और wsl.com client इन तीन components से मिलकर बना है, और User-Mode Linux को Win9x kernel API calls के लिए अनुकूलित किया गया है
  • system calls को Win9x की छोटी interrupt descriptor table की सीमा के कारण int 0x80 के बजाय general protection fault (GPF) handler के माध्यम से dispatch किया जाता है
  • "Proudly written without AI", GPL-3 license

WSL9x - codeberg.org/hails/wsl9x

अवलोकन

  • WSL9x, Windows 9x kernel के भीतर आधुनिक Linux kernel (लिखे जाने के समय 6.19) को cooperative तरीके से चलाने वाला Windows 9x के लिए Linux subsystem है
  • paging, memory protection, preemptive scheduling जैसी दोनों operating systems की पूरी सुविधाओं का एक साथ उपयोग संभव बनाता है
  • reboot के बिना दोनों OS के applications को साथ-साथ चलाया जा सकता है
  • इसे AI के बिना सीधे लिखा गया है

तकनीकी संरचना

  • WSL9x तीन components से बना है
    • patched Linux kernel (win9x-um-6.19 branch)
    • VxD driver
    • wsl.com client program

VxD driver

  • यह WSL9x की initialization संभालता है, और इसका entry point vxd/wsl9x.asm है
  • यह kernel code की शुरुआती mapping सेट करता है और DOS interrupts के जरिए vmlinux.elf को disk से लोड करता है (vxd/loader.c, vxd/fs.asm)
  • kernel को fixed base address 0xd0000000 पर compile किया गया है
  • यह System VM के भीतर एक नया thread शुरू करता है और Linux entry के लिए 16 KiB stack आवंटित करता है
  • इसके बाद यह एक event loop में प्रवेश करता है जो kernel entry, IRQ dispatch, userspace में वापसी, और idle state को संभालता है (vxd/entry.c)

system call और page fault handling

  • driver उन userspace events को संभालता है जिन्हें kernel तक dispatch करना होता है: page faults और system calls
  • system calls को general protection fault (GPF) handler के जरिए संभाला जाता है
    • Win9x की interrupt descriptor table इतनी लंबी नहीं है कि वह Linux i386 system call interrupt int 0x80 के लिए सही handler स्थापित कर सके
    • GPF handler fault पैदा करने वाले instruction की जाँच करता है, और यदि वह int 0x80 हो तो instruction pointer को ऐसे आगे बढ़ाता है जैसे interrupt सफल रहा हो, फिर उसे Linux system call के रूप में dispatch करता है (vxd/fault.c)

Linux kernel में बदलाव

  • यह User-mode Linux पर आधारित है, लेकिन POSIX API के बजाय Windows 9x kernel API को call करने के लिए संशोधित किया गया है
  • यह user mode (ring 3) में नहीं, बल्कि ring 0 (supervisor/kernel mode) में चलता है
  • Win9x kernel integration का बड़ा हिस्सा, जिसमें context switching भी शामिल है, Linux kernel पक्ष में मौजूद है
    • मुख्य code location: linux/arch/um/os-Win95
    • entry point: main.c का _start, और मुख्य files process.c, mmu.c

wsl.com client

  • यह wsl/wsl.asm में implement किया गया 16-bit DOS program है
  • अलग TTY implementation के बिना MS-DOS prompt को TTY window की तरह उपयोग करने देता है
  • चलने पर यह WSL9x V86 API (vxd/v86_api.asm) को call करके एक unused console आवंटित कराता है, और सूचित करता है कि उस console का output इसी तक dispatch किया जाए
  • इसके बाद यह एक event loop में प्रवेश करता है, IRQ का इंतज़ार करता है और interrupt होने पर keyboard read की कोशिश करता है
  • यह console driver (vxd/console.c) के लिए synchronization point की भूमिका भी निभाता है
    • जब Linux output तैयार होता है, तो यह event schedule करता है और MS-DOS VM context में int 0x29 चलाकर DOS window में characters output करता है
    • यही वह interrupt है जहाँ NNANSI जैसे DOS ANSI drivers, ANSI escape codes लागू करने के लिए terminal output को intercept करते हैं

build और run आवश्यकताएँ

  • i386-linux-musl target के लिए cross toolchain आवश्यक है (musl-cross-make की सिफारिश)
  • Windows components के build के लिए Open Watcom v2 toolchain आवश्यक है
  • win9x-um-6.19 branch से patched Linux kernel build करना आवश्यक है
  • WATCOM और LINUX environment variables को सही तरह सेट करना होगा (उदाहरण के लिए .envrc.example देखें)
  • Windows 9x पहले से इंस्टॉल की गई hard disk image hdd.base.img आवश्यक है
  • make चलाने पर WSL9x तैयार की गई hdd.img बनती है
  • MS-DOS prompt में wsl चलाकर pty खोलें; ANSI colors के लिए nnansi.com जैसे driver को पहले से लोड करने की सिफारिश है

license

  • GPL-3

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.