Представлен публике инициатива WSL9x — подсистема Windows 9x для Linux

3 мин
Представлен публике инициатива WSL9x — подсистема Windows 9x для Linux

Состоялся выпуск открытого проекта 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 он выполняет первоначальный вызов программный оболочку 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, что подарит вам ностальгию или возможность обойти ограничения старой операционной системы нев зависимости от вашей текущей платформы.

Читают сейчас

BMW подала заявку на патент системы управляемого дрифта

1 час назад

BMW подала заявку на патент системы управляемого дрифта

BMW подала патентную заявку, которая описывает передовые датчики для регулировки подвески автомобиля в режиме реального времени, чтобы облегчить начало дрифта и управление им. Ознакомиться далее

2 часа назад

2026-09-08: Telegram «прилёг» в Азии

Утром 8 сентября пользователи Telegram (как минимум) в Сингапуре столкнулись с массовым сбоем в работе мессенджера. О проблемах сообщили несколько тысяч человек. По данным сервиса Downdetector, первые

Выпуск открытой платформы мониторинга ошибок и производительности Gotcha 1.0

4 часа назад

Выпуск открытой платформы мониторинга ошибок и производительности Gotcha 1.0

В начале сентября 2026 года состоялся начальный мажорный версия открытой платформы мониторинга ошибок и производительности Gotcha. Это self-hosted подход в одном Go-бинарнике: трекинг ошибок, распреде

Tesla закрыла инициатива солнечной черепицы Solar Roof

9 часов назад

Tesla закрыла инициатива солнечной черепицы Solar Roof

Tesla закрыла продажи Solar Roof — крыши из стеклянной черепицы со встроенными солнечными панелями. С сайта пропали упоминания продукта и анкета для оформления заказа. Инициатива признали экономически

Разработчик заставил умные весы передавать информация в Home Assistant, минуя облачный сервис производителя

11 часов назад

Разработчик заставил умные весы передавать информация в Home Assistant, минуя облачный сервис производителя

Разработчик Дидак Сабатес (Dídac Sabatés) заставил умные весы Withings Body+ передавать данные напрямую в Home Assistant, минуя серверы производителя. Для этого ему потребовалась плата ESP32 и собстве