En uafhængig entusiast, der ikke er tilknyttet Microsoft, har udviklet WSL9x (Windows 9x Subsystem for Linux) værktøjer, der gør det muligt at køre moderne Linux-kerneller inde i Windows 95/98/ME. Projektet giver mulighed for at køre Linux- og Windows 9x-applikationer side om side i ét system, ligesom WSL-laget muliggør kørsel af Linux-applikationer i de moderne versioner af Windows. Kun konsolbaserede Linux-programmer understøttes. Koden til WSL9x-komponenterne er skrevet i C og assembler og distribueres under GPLv3-licensen.
I modsætning til WSL2 anvender WSL9x ikke virtualisering, og Linux-kernen kører i ring 0 parallelt med Windows-kernen, hvilket gør det muligt at bruge WSL9x på systemer uden støtte til hardware-virtualisering, selv med CPU i486. Systemet anvender en modificeret Linux-kernel 6.19, der er bygget til at køre i UML (User-mode Linux) tilstand, beregnet til at køre kernen som en brugerproces. Adgang til POSIX API i UML-laget til transmissionslag er blevet erstattet med kald til Windows 9x-kernens API.
I Windows indlæses en VxD-driver, der er forberedt af projektet, som står for initialiseringen af WSL9x-subsystemet, indlæsning og placering af Linux-kernen i hukommelsen, forvaltning af afbrydelser, cyklisk overførsel af kontrol til Linux-kernen i en tilstand af delt multitasking og håndtering af Linux-kernel-henvendte hændelser fra brugerrummet, såsom udførelse af systemopkald og adgang til ikke-allokerede hukommelsessider (page faults). Da Windows 9x-kernen ikke understøtter en afbrydelsesvektortabel (IDT, Interrupt Descriptor Table), hvilket forhindrer installationen af en egen afbrydningsbehandler for 0x80, anvendes en GPF (General Protection Fault)-handler til systemopkald, som opsnapper undtagelser, der opstår ved udførelse af SYSCALL-instruktionen.
Brugerne tilbydes værktøjet wsl.com, som er udformet som en 16-bit DOS-applikation og gør det muligt at bruge MS-DOS kommandoprompten til at køre Linux-programmer. Værktøjet muliggør indtastning af hændelser og simulerer konsolfunktionalitet til visning af output med støtte for ANSI escape-koder.

Kilde: opennet.ru
