Un entusiasta no relacionado con Microsoft ha implementado la herramienta WSL9x (Subsistema Windows 9x para Linux), que permite ejecutar núcleos modernos de Linux dentro del núcleo de Windows 95/98/ME. Este proyecto permite ejecutar aplicaciones para Linux y Windows 9x en una misma máquina, similar a cómo la capa WSL permite trabajar con aplicaciones de Linux en las versiones modernas de Windows. Solo se admite la ejecución de programas Linux en consola. El código de los componentes de WSL9x está escrito en C y ensamblador y se distribuye bajo la licencia GPLv3.
A diferencia de WSL2, WSL9x no utiliza virtualización y el núcleo de Linux se ejecuta en modo anillo cero en paralelo con el núcleo de Windows, lo que permite usar WSL9x en sistemas sin soporte para virtualización de hardware, incluso con CPU i486. La sistema utiliza un núcleo de Linux 6.19 modificado, compilado para funcionar en modo UML (User-mode Linux), diseñado para ejecutar el núcleo como un proceso del usuario. Las llamadas a la API POSIX en la capa UML se reemplazan por llamadas a la API del núcleo de Windows 9x.
En Windows, se carga un controlador VxD preparado por el proyecto, encargado de la inicialización del subsistema WSL9x, la carga y colocación del núcleo de Linux en memoria, la gestión de interrupciones, la transmisión cíclica de control al núcleo de Linux en modo de multitarea cooperativa y el manejo de eventos dirigidos al núcleo de Linux desde el espacio de usuario, como la ejecución de llamadas al sistema y el manejo de fallos de página (page faults). Dado que el núcleo de Windows 9x no soporta la tabla de vectores de interrupciones (IDT, Interrupt Descriptor Table), lo que impide establecer un controlador propio para la interrupción 0x80, se usa un controlador GPF (General Protection Fault) para las llamadas al sistema, que captura las excepciones que ocurren al ejecutar la instrucción SYSCALL.
Se ofrece a los usuarios la utilidad wsl.com, presentada como una aplicación DOS de 16 bits, que permite utilizar la línea de comandos MS-DOS para ejecutar programas de Linux. La utilidad asegura la transferencia de eventos de entrada y simula la funcionalidad de la consola para mostrar la salida con soporte para códigos de escape ANSI.

Fuente: opennet.ru
