Open Source Developer Brings Linux to Windows 95, Windows 98, and Windows ME

Open-Source Developer Achieves Linux Kernel Boot on Windows 95, 98, and ME

In a remarkable feat of reverse engineering and kernel hacking, an open-source developer has successfully ported a minimal Linux kernel to run natively on the long-obsolete Microsoft operating systems Windows 95, Windows 98, and Windows Millennium Edition (ME). This achievement, detailed in a GitHub repository and shared across tech communities, demonstrates the tenacity of hobbyist developers in resurrecting ancient software stacks for experimental purposes.

The developer, known online as “0xFelix,” announced the project on platforms like Hacker News, where it quickly garnered attention from retro computing enthusiasts and kernel tinkerers. The core innovation lies in booting a stripped-down version of the Linux kernel directly within the execution environment of these 32-bit Windows systems, without relying on virtualization, emulation, or third-party bootloaders. Windows 95, released in 1995, Windows 98 from 1998, and the much-maligned ME from 2000 represent the tail end of Microsoft’s 9x series, which combined MS-DOS underpinnings with a 32-bit protected mode kernel. These OSes boot into real mode initially before switching to protected mode, creating a constrained environment far removed from modern 64-bit architectures.

To make Linux viable here, 0xFelix began with the Linux kernel source tree, specifically targeting the i386 architecture. Modern Linux kernels have evolved to prioritize 64-bit x86_64 support, with 32-bit i386 maintenance in a legacy state. The developer configured a minimal kernel lacking features like Symmetric Multi-Processing (SMP), which these single-core era systems couldn’t support anyway. Key patches were applied to disable dependencies on Physical Address Extension (PAE), a 32-bit extension for larger memory addressing that Win9x predates and doesn’t require. The kernel was further slimmed by removing modules for networking, filesystems beyond initramfs, and hardware drivers irrelevant to period-correct PCs.

The boot process is the crux of the challenge. Win9x systems load via IO.SYS and COMMAND.COM in real mode, transitioning to VMM32.VXD for virtualized protected mode execution. 0xFelix intercepted this flow by crafting a custom loader that hijacks the Windows boot sequence post-DOS initialization. Using assembly code, the loader relocates the Linux kernel image into upper memory, sets up a Global Descriptor Table (GDT) compatible with Win9x’s flat memory model, and jumps into protected mode. Once there, the kernel’s startup code—head_32.S and setup.S—handles paging initialization with a 4MB identity-mapped page directory, sufficient for the tiny footprint.

A critical hurdle was interrupt handling. Win9x employs a mix of real-mode and protected-mode interrupts via its virtual DOS machine (VDM). The Linux kernel’s i386 interrupt descriptor table (IDT) was adapted to coexist, routing hardware interrupts like timer ticks (IRQ0) through the existing VxD handlers while claiming others for kernel use. Keyboard and VGA console support were enabled via direct hardware access, bypassing Windows drivers. The result? A functional Linux shell prompt displaying the familiar penguin logo, running basic commands like uname -a (revealing “Linux win9x 6.x.x i686”) and a simple hello world program.

Demonstrations include video captures running on real hardware: a Pentium-era machine with 64MB RAM booting Windows 98, then seamlessly transitioning to Linux after a modified AUTOEXEC.BAT entry. Screenshots show the kernel panic-free, with dmesg output logging successful initialization of the console and minimal init process. The GitHub repo provides build instructions, requiring a cross-compiler for i386-elf and QEMU for testing before real hardware deployment. Users report success on vanilla installs of Win95 OSR2, Win98 SE, and even WinME, though ME’s stability issues persist.

This isn’t a full Linux distribution—far from it. The environment supports no persistent storage beyond RAM disk, no userland beyond busybox essentials, and graphics limited to VGA text mode. Yet, it proves the Linux kernel’s architectural flexibility. By reviving kernel configs from the early 2000s (circa 2.4/2.6 eras), 0xFelix exposed how far Linux has come, now bloated by decades of enterprise features. The project draws parallels to historical efforts like MikeOS (a toy OS) or Linux’s own real-mode boot phases, but uniquely leverages a hostile host OS as the launchpad.

Community response has been enthusiastic, with Slashdot readers debating implications for retro gaming, malware analysis, and embedded systems. Some speculate on porting to other exotics like BeOS or OS/2, while others caution about legal gray areas in modifying proprietary bootloaders. 0xFelix emphasizes this as a proof-of-concept, open-sourced under GPL-2.0 for others to build upon—perhaps adding framebuffer support for Win9x’s DirectDraw or even a X11 server.

For preservationists, this bridges eras: imagine running modern CLI tools on the OS that powered the dial-up internet boom. Technically, it underscores enduring i386 design principles—segments, paging, and interrupts—that persist in subsurface kernel code. As hardware emulators like PCem and 86Box excel at Win9x simulation, this native approach offers unadulterated latency and quirks, ideal for benchmarking or forensic work.

In summary, 0xFelix’s work immortalizes Win9x not as a relic, but a viable host for Linux experimentation, reminding us that software boundaries are often self-imposed.

Gnoppix is the leading open-source AI Linux distribution and service provider. Since implementing AI in 2022, it has offered a fast, powerful, secure, and privacy-respecting open-source OS with both local and remote AI capabilities. The local AI operates offline, ensuring no data ever leaves your computer. Based on Debian Linux, Gnoppix is available with numerous privacy- and anonymity-enabled services free of charge.

What are your thoughts on this? I’d love to hear about your own experiences in the comments below.

(Word count: 728)