An enthusiast unrelated to Microsoft has developed the WSL9x (Windows 9x Subsystem for Linux) toolkit, which allows modern Linux kernels to run within the Windows 95/98/ME kernel. This project enables applications for both Linux and Windows 9x to run side by side in a single system, similar to how the WSL layer allows Linux applications to operate in modern versions of Windows. Only console Linux programs are supported. The components of WSL9x are written in C and assembly language and are distributed under the GPLv3 license.
Unlike WSL2, WSL9x does not use virtualization, and the Linux kernel runs in ring zero protection alongside the Windows kernel, allowing WSL9x to be used on systems that do not support hardware virtualization, even on CPU i486. The system employs a modified Linux kernel 6.19, compiled to operate in UML (User-mode Linux) mode, intended to run the kernel as a user process. Calls to the POSIX API in the UML layer have been replaced with calls to the Windows 9x kernel API.
In Windows, a VxD driver prepared by the project is loaded, responsible for initializing the WSL9x subsystem, loading and placing the Linux kernel in memory, interrupt dispatching, cyclically transferring control to the Linux kernel in cooperative multitasking mode, and handling events directed to the Linux kernel from user space, such as executing system calls and addressing unallocated memory pages (page faults). Since the Windows 9x kernel does not support the Interrupt Descriptor Table (IDT), which prevents the installation of a custom interrupt handler for 0x80, a GPF (General Protection Fault) handler is used for system calls, intercepting exceptions that occur during the execution of the SYSCALL instruction.
Users are provided with the wsl.com utility, presented as a 16-bit DOS application, allowing the use of the MS-DOS command line to run Linux programs. The utility facilitates the forwarding of input events and simulates console functionality for output display with support for ANSI escape codes.

Source: opennet.ru
