Linux के लिए Windows 9x सबसिस्टम
(social.hails.org)- एक प्रायोगिक प्रोजेक्ट जो 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.19branch) - VxD driver
- wsl.com client program
- patched Linux kernel (
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)
- Win9x की interrupt descriptor table इतनी लंबी नहीं है कि वह Linux i386 system call interrupt
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, और मुख्य filesprocess.c,mmu.c
- मुख्य code location:
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 करते हैं
- जब Linux output तैयार होता है, तो यह event schedule करता है और MS-DOS VM context में
build और run आवश्यकताएँ
i386-linux-musltarget के लिए cross toolchain आवश्यक है (musl-cross-make की सिफारिश)- Windows components के build के लिए Open Watcom v2 toolchain आवश्यक है
win9x-um-6.19branch से patched Linux kernel build करना आवश्यक हैWATCOMऔरLINUXenvironment 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
अभी कोई टिप्पणी नहीं है.