Ein unabhängig von Microsoft agierender Enthusiast hat das WSL9x (Windows 9x Subsystem für Linux) entwickelt, das die Ausführung moderner Linux-Kernel innerhalb des Windows 95/98/ME-Kernels ermöglicht. Dieses Projekt erlaubt es, Linux- und Windows 9x-Anwendungen nebeneinander auf demselben System auszuführen, ähnlich wie die WSL-Schicht es mit Linux-Anwendungen in modernen Windows-Versionen ermöglicht. Es werden nur Konsolen-Linux-Programme unterstützt. Der Code der WSL9x-Komponenten ist in C und Assembler geschrieben und steht unter der GPLv3-Lizenz.
Im Gegensatz zu WSL2 wird in WSL9x keine Virtualisierung eingesetzt, und der Linux-Kernel läuft im Ring 0 parallel zum Windows-Kernel, was es ermöglicht, WSL9x auch auf Systemen ohne Unterstützung für hardwaregestützte Virtualisierung, selbst mit CPU i486, zu verwenden. Im System kommt ein modifizierter Linux-Kernel 6.19 zum Einsatz, der für den Betrieb im UML (User-mode Linux)-Modus kompiliert wurde und darauf ausgelegt ist, den Kernel als Benutzerprozess auszuführen. Der Zugriff auf die POSIX-API in der UML-Übersetzungsschicht wurde durch einen Aufruf der Windows 9x-Kernel-API ersetzt.
In Windows wird ein VxD-Treiber geladen, der für die Initialisierung des WSL9x-Subsystems verantwortlich ist, das Laden und Platzieren des Linux-Kernels im Speicher, die Interrupt-Dispatching, die zyklische Übergabe der Kontrolle an den Linux-Kernel im kooperativen Multitasking-Modus und die Verarbeitung an den Linux-Kernel adressierter Ereignisse aus dem Benutzerspeicher, wie das Ausführen von Systemaufrufen und den Zugriff auf nicht zugeordnete Speicherseiten (Seitenfehler). Da der Windows 9x-Kernel keine Interrupt Descriptor Table (IDT) unterstützt, was die Einrichtung eines eigenen Interrupt-Handlers für 0x80 für Systemaufrufe verhindert, wird der GPF-Handler (General Protection Fault) verwendet, um Ausnahmen abzufangen, die bei der Ausführung der SYSCALL-Anweisung auftreten.
Benutzern steht das Dienstprogramm wsl.com zur Verfügung, das als 16-Bit-DOS-Anwendung gestaltet ist und es ermöglicht, die MS-DOS-Eingabeaufforderung zum Ausführen von Linux-Programmen zu verwenden. Das Dienstprogramm sorgt für die Übertragung von Eingabeereignissen und simuliert die Funktionalität einer Konsole zur Anzeige der Ausgaben mit Unterstützung für ANSI Escape-Codes.

Quelle: opennet.ru
