
Состоялся выпуск открытого проекта WSL9x (без использования ИИ и под лицензией GPL-3) — подсистемы Windows 9x для Linux (Windows 9x Subsystem for Linux). С помощью подсистемы Windows 9x для Linux можно запускать приложения Windows и Linux параллельно, используя современное ядро Linux, работающее совместно с ядром Windows в ring 0. И в отличие от современных WSL, здесь не используется аппаратная виртуализация, поэтому WSL9x можно запустить даже на 486 процессоре.
Решение WSL9x использует современное ядро Linux (6.19 на текущий момент) совместно с ядром Windows 9x, позволяя пользователям одновременно использовать весь набор возможностей обеих операционных систем, включая файл подкачки, защиту памяти и вытесняющее планирование (pre‑emptive scheduling). «Запускайте все свои любимые приложения параллельно — перезагрузка не требуется!», — заявили в команде проекта.
Технические подробности решения:
-
WSL9x состоит из трёх компонентов: пропатченного ядра Linux (см. ветку win9x-um-6.19), драйвера VxD и клиентской программы wsl.com;
-
драйвер отвечает за инициализацию WSL9x (см. vxd/wsl9x.asm для точки входа драйвера). Он устанавливает начальные отображения для кода ядра и загружает vmlinux.elf с диска, используя прерывания DOS (см. vxd/loader.c и vxd/fs.asm). Ядро компилируется с фиксированным базовым адресом 0xd0000000;
-
затем драйвер запускает новый поток в виртуальной машине системы, выделяет стек размером 16 КБ для входа в Linux и переходит в цикл событий, который обрабатывает вход в ядро, обработку прерываний, возврат в пользовательское пространство и режим ожидания. См. vxd/entry.c для этого кода;
-
драйвер также отвечает за обработку событий пользовательского пространства, которые должны быть переданы ядру, в настоящее время это ошибки страничного доступа и системные вызовы. Системные вызовы обрабатываются через обработчик ошибок общей защиты (GPF), поскольку в Win9x отсутствует достаточно длинная таблица дескрипторов прерываний для установки надлежащего обработчика для прерывания int 0x80 — прерывания системного вызова Linux i386. Вместо этого обработчик GPF проверяет инструкцию, вызвавшую ошибку. Если это int 0x80, обработчик GPF перемещает указатель инструкции так, как если бы прерывание прошло успешно, и передаёт его в Linux как системный вызов. См. vxd/fault.c для получения этого кода;
-
ядро Linux работает в режиме user-mode Linux, но модифицировано для вызова API ядра Windows 9x вместо API POSIX и работает в ring 0 (режим супервизора/ядра), а не в ring 3 (пользовательский режим). Большая часть фактической интеграции ядра Win9x, включая переключение контекста, находится в ядре Linux. См. linux/arch/um/os-Win95 для получения основной информации об интеграции Win9x в код ядра. Точкой входа, вызываемой vxd/entry.c, является _start в main.c. Файлы process.c и mmu.c также важны;
-
последний компонент — это клиент wsl.com. Это небольшая 16-битная программа DOS, реализованная на wsl/wsl.asm, которая позволяет WSL9x использовать командную строку MS-DOS в качестве окон TTY, вместо того чтобы реализовывать что-то своё;
-
при запуске wsl.com он выполняет первоначальный вызов API WSL9x V86 (vxd/v86_api.asm), чтобы занять неиспользуемую консоль и уведомить WSL9x о необходимости отправки вывода с этой консоли. Затем он переходит в цикл обработки событий, ожидая прерывания и пытаясь считывать данные с клавиатуры при прерывании. Верхняя часть этого цикла обработки событий также служит точкой синхронизации для драйвера консоли (vxd/console.c) — когда вывод из Linux готов, он планирует событие и выполняет прерывание 0x29 в контексте виртуальной машины MS-DOS для вывода символов в окно DOS. Это прерывание также является местом, где драйвер ANSI для DOS, например NNANSI, может перехватывать вывод терминала для реализации управляющих кодов ANSI.
Ранее вышла пятая версия открытого проекта windows95 с исходным кодом полностью на JavaScript. «Это Windows 95, работающая в приложении Electron. Да, это полная версия. Извините», — пояснил разработчик решения.
Проект работает в Windows, а также на macOS и Linux, что подарит вам ностальгию или возможность обойти ограничения старой операционной системы независимо от вашей текущей платформы.

ссылка на оригинал статьи https://habr.com/ru/articles/1026702/