Операционная система os8088 загружается с первого сектора дискеты сразу в графический рабочий стол. Никакого DOS под ней и никакой командной строки внутри — 512-байтовый загрузочный сектор поднимает 40-килобайтное ядро, которое определяет установленный в машине видеоадаптер, переключает его в графический режим, заимствует у видеокарты собственный шрифт 8x8 и выводит строку меню.

Дальше — интерфейс, знакомый по Macintosh 1984 года: окна, которые перетаскиваются за заголовок с рамкой-резинкой, выпадающие меню, кнопки закрытия и сворачивания, иконки для каждого дисковода и док внизу экрана с одной плиткой на каждую запущенную программу. Программы загружаются со второй дискеты и работают как полноценные приложения, причём одновременно может быть запущено несколько.

Всё это помещается в 256 КБ оперативной памяти процессора Intel 8086 или 8088 — тех самых, что стояли в оригинальном IBM PC и PC/XT. Это хобби-проект, но уже достаточно завершённый, чтобы им можно было пользоваться, а исходный код — 112 792 строки на NASM, которые можно прочитать за один вечер.

Рабочий стол os8088: строка меню сверху, окно Note Pad с текстом, счётчик Clock, окно Bounce, Control Panel с выбором вытесняющего/кооперативного режима и Task Manager с графиком загрузки CPU
Пять программ одновременно на процессоре 1978 года: Note Pad, тикающие часы, прыгающий мяч, Control Panel и Task Manager, каждая — отдельный экземпляр со своей плиткой в доке. Task Manager показывает загрузку машины на 70% и 147 КБ занятой памяти.

По цифрам

Каждая цифра ниже взята непосредственно из сборки, а не по памяти.

Проверенные характеристики os8088
Размер ядра78 950 байтПланировщик, оконный менеджер, драйвер VGA, драйвер мыши, звуковой слой, файловый менеджер, загрузчик, Task Manager и Control Panel — всё вместе.
Загрузочный сектор512 байтТрансляция LBA в CHS и повторные попытки чтения дискеты через BIOS. Сборка завершится ошибкой, если получится что-то другое.
Занимаемый сегмент53 842 байтаКод плюс все буферы, к которым ядро обращается через DS. Должен помещаться в 64 КБ сегмент — сейчас запас составляет 11 694 байта. Стеки задач, дисковые буферы и все загруженные программы находятся за пределами сегмента и здесь не учтены.
Строк ассемблера112 792Реальный режим 8086, написан с использованием ИИ. Без C, без линковщика, без библиотеки времени выполнения.
ДисплейVGA, Hercules или CGAОпределяется при загрузке. VGA-режим 12h — 640x480 в 16 цветах, четыре 1-битные плоскости по 80 байт на строку; Hercules — 720x348, CGA — 640x200, оба монохромные и постраничные. На всех трёх рисование идёт прямо в кадровый буфер.
Двойная буферизацияопционально, по умолчанию выключенаВнеэкранная копия экрана занимает 153 600 байт — больше половины памяти машины, поэтому система с 256 КБ всегда рисует прямо на экран, как это делал Macintosh 1984 года. При 500 КБ и более Control Panel может включить буферизацию.
Задачи12 слотов, стек по 1536 байтКаждое окно Clock и Bounce — отдельная вытесняемая задача.
Частота переключения контекста18,2065 ГцШтатная частота таймера PC. На каждом тике обработчик сохраняет девять регистров, меняет указатель стека и возвращает управление в другую программу.
Загружаемые программыотдельный сегмент на каждуюПакеты загружаются со второй дискеты в собственные области обычной памяти — около 107 КБ арены на машине с 512 КБ, 233 КБ при 640 КБ — несколько программ могут быть резидентны одновременно, каждая освобождает память при закрытии.
Мышь1200 бод, 7N1Последовательная мышь Microsoft на COM1, три байта на отчёт, декодируется в обработчике прерывания, который же рисует курсор.
Целевое железоIBM PC/XT, 8088 на 4,77 МГц256 КБ ОЗУ, последовательная мышь и любая из карт VGA, Hercules или CGA. Перерисовка достаточно медленная, чтобы наблюдать за процессом.
Набор инструкцийтолько 8086, принудительноcpu 8086 плюс -w+error, поэтому что-либо новее приводит к ошибке сборки. Набор инструкций 1978 года, гарантированный механически.

Что она умеет

Четыре вещи, в которых система действительно хороша.

Два окна Clock со счётчиком времени и два окна Bounce с движущимися квадратами, всё анимируется одновременно
Ничего не обязано взаимодействовать между собой. Двое часов идут, а два мяча продолжают двигаться, пока набирается текст в другом окне. Прерывание таймера срабатывает 18,2 раза в секунду, сохраняет состояние выполнявшейся задачи, меняет указатель стека и передаёт управление следующей — около тридцати инструкций. Macintosh того периода на такое не был способен вовсе: System 1 запускала только одно приложение за раз, а когда в 1987 году появился MultiFinder, он был кооперативным.
Окно Note Pad остаётся на месте, пока по рабочему столу перетаскивается прямоугольный контур в один пиксель, затем окно перескакивает на позицию контура
Окно не двигается, пока кнопка мыши не отпущена. Однопиксельный контур в режиме XOR следует за курсором, и окно перескакивает на его позицию при отпускании кнопки — потому что перерисовывать целое окно на каждый отчёт мыши на частоте 4,77 МГц было немыслимо, точно так же, как и в 1984 году.
Файловый менеджер Disk показывает папку GAMES — MINES.O88, SOLITAIR.O88 и ARKANOID.O88, каждый со своей иконкой — поверх открыто окно Minesweeper с частично раскрытым полем 9 на 9 с цветными цифрами и красными флажками
Программы поступают со второй дискеты. Двойной клик по файлу в окне Disk загружает его в отдельный сегмент и запускает как полноценное приложение. Minesweeper занимает 1510 байт, включая иконку. Несколько пакетов — или несколько копий одного и того же — могут находиться в памяти одновременно.
Окно Task Manager показывает процент загрузки CPU, график истории на всю ширину окна, полосу ОЗУ с показателем 39К из 639К и список запущенных экземпляров с их состоянием и долей CPU
Система следит сама за собой. Живой индикатор загрузки CPU с прокручивающимся графиком истории, показатель ОЗУ и по строке на каждую запущенную программу. Приложения без собственной задачи получают тайминг своих оконных колбэков в точке диспетчеризации, и эти затраты записываются на их счёт, так что строки всё равно складываются в единый итог.

История, с которой она спорит

В феврале 1985 года компания Digital Research выпустила GEM 1.0 для IBM PC — рабочий стол в стиле Macintosh с перекрывающимися окнами и иконками, работающий на стандартном железе XT. Apple подала в суд. Мировое соглашение привело к GEM Desktop 2.0 в 1986 году, из которого убрали перекрывающиеся окна и иконки рабочего стола на PC — при этом версия для Atari ST, не подпадавшая под соглашение, сохранила и то, и другое.

Так что у PC ненадолго была подобная возможность, а затем она исчезла. Os8088 — это воссоздание примерно той же идеи с нуля, сорок лет спустя, на технике того же класса — плюс вытесняющая многозадачность, которой не было ни у GEM, ни у Macintosh того времени.

Чем она не является

  • Это не DOS, и она не запускает DOS-программы. Никакого DOS под капотом нет — система владеет машиной начиная с загрузочного сектора.
  • У неё нет защиты памяти. У 8086 её попросту нет — все программы делят один 64-килобайтный сегмент с ядром, что как раз и делает переключение контекста достаточно дешёвым, чтобы имело смысл его выполнять.
  • Нет файловых дескрипторов и позиционирования внутри файла. Дисковый API оперирует целыми файлами за раз — запись, чтение, удаление, переименование — это самое широкое подмножество операций, которое остаётся корректным без дискового кэша и при двенадцати вытесняемых задачах.
  • Нет сети.
  • Это хобби-проект, а не продукт. При этом он достаточно завершён, чтобы сесть и начать пользоваться — в этом весь смысл.

Работает на настоящем железе

Всё показанное выше снималось в эмуляторе. В августе 2026 года образы дисков записали на настоящие дискеты и загрузили на трёх машинах эпохи — IBM 5150 1981 года, Toshiba T1100 Plus и 286-й — и сфотографировали результат.

Монитор IBM 5151 с зелёным люминофором показывает рабочий стол os8088 с одновременно открытыми окнами Note Pad, About, Clock, Task Manager, Minesweeper и Disk
Шесть программ одновременно на IBM PC 1981 года. Настоящий 5150 с картой Hercules в режиме 720x348, загруженный с 360-килобайтной дискеты, со списком карт самой машины, набранным в Note Pad, загруженном с той же дискеты. Фотографии сделал Elendilon, который также сообщил, что на реальном железе система работает не медленнее, чем под эмуляцией.

Попробовать

Демонстрация в браузере загружает настоящий образ дискеты в эмулированном PC — те же самые байты, что записываются на реальный диск. Для самостоятельного запуска доступны 360-килобайтные образы для техники той эпохи и 86Box, а также 1,44-мегабайтные образы для QEMU.