Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS —...
Звучит как безумный эксперимент? Возможно. Но у меня получилось, и я готов рассказать, как и зачем.
Предыстория: зачем это вообще нужно?
Вы же знаете, как бывает: хочешь поиграть в старые игры или запустить программу, написанную 20 лет назад, — а оно не работает. Эмуляторы есть, но они требуют настройки: монтировать диски, править конфиги, помнить команды... Для одного раза — ок, но если этим пользоваться постоянно — надоедает.
Я решил сделать эмулятор, который бы работал как современный сервис:
диск хранится в облаке (GitHub)
настройки применяются автоматически
интерфейс дружелюбный даже для тех, кто DOS видел только на картинках
а если забыл команду — всегда можно спросить у ИИ
Что внутри?
1. Эмулятор на js-dos
За основу я взял js-dos — эмулятор DOSBox, портированный в JavaScript на Emscripten. Это проверенная вещь, которая хорошо работает в браузере. Я не стал изобретать велосипед, а просто использовал готовый движок как ядро.
2. GitHub как файловая система
Вместо образа диска (как в классическом DOSBox) GitDOS использует реальный Git-репозиторий. Каждый файл на диске C: — это файл в репозитории.
Как это работает:
При монтировании система читает дерево репозитория через GitHub API
Файлы скачиваются и помещаются в виртуальную файловую систему эмулятора
При сохранении изменения коммитятся обратно в репозиторий
Почему это круто:
Полная история изменений (можно откатиться к любой версии)
Доступ с любого устройства
Бекапы автоматически
Можно расшарить диск через ссылку
3. ИИ-помощник Claude
Это самая необычная фишка. В DOS появилась команда AI, которая отправляет запрос в Claude API и выводит ответ прямо в терминал.
Что умеет ассистент:
Объяснять команды DOS и их параметры
Писать BAT-файлы и скрипты
Генерировать код на Turbo Pascal, C, Basic
Помогать устанавливать и настраивать программы
Автоматически выполнять команды (если включён авто-режим)
Как это выглядит изнутри:
text
AI <вопрос> → запрос к Claude API → ответ печатается через ECHO
При включённом авто-выполнении ассистент может сам запускать команды, перехватывать их вывод (через редирект в файл) и на основе этого принимать следующие решения.
4. Голосовое управление
Я добавил поддержку Web Speech API для распознавания и синтеза речи.
Команды голосом:
Просто сказать команду DOS (распознаётся и выполняется)
Задать вопрос ассистенту (ответ озвучивается)
Управлять записью экрана
Горячие клавиши:
ScrollLock → голосовая команда DOS
Pause/Break → голосовой вопрос ассистенту
ContextMenu → старт/стоп записи экрана
Это особенно удобно в полноэкранном режиме — например, когда играешь и не хочешь выходить из игры, чтобы что-то спросить у ИИ.
5. IPX-мультиплеер
js-dos поддерживает IPX-сеть через WebSocket-релей. Я добавил интерфейс для настройки: включаешь сеть, задаёшь комнату — и можно играть в Doom или Warcraft с другом через интернет, как в старые добрые времена.
6. GitDOS Store — каталог программ
Зачем искать игры по форумам, если можно установить одной командой?
text
INSTALL — список доступных программ
INSTALL <id> — установка
В каталоге есть разделы: программы, игры, драйверы. Установка автоматически правит AUTOEXEC.BAT и CONFIG.SYS — ничего лишнего.
Как я решал технические проблемы
Проблема 1: Лимиты GitHub API
У GitHub API есть лимит ~5000 запросов в час. Если читать всё через API, можно быстро упереться в потолок.
Решение: Содержимое файлов для публичных репозиториев читается через raw.githubusercontent.com (CDN), что не тратит лимит. Только листинг дерева, коммиты и запись идут через API. Плюс кэширование дерева на 20 секунд — чтобы несколько запросов подряд не тратили лимит понапрасну.
Проблема 2: Большие файлы
Веб-интерфейс GitHub режет загрузку на 25 МБ, но через API можно заливать файлы до 100 МБ.
Решение: Я реализовал writeBig — запись файлов через Git Data API (blob → tree → commit → ref). Для файлов больше 5 МБ этот режим включается автоматически. Для файлов >100 МБ — работа через GitHub Releases (но это пока вручную).
Проблема 3: Несколько дисков
js-dos умеет монтировать только один диск C:.
Решение: Дополнительные репозитории подключаются как папки внутри C:\DISKS\ (например C:\DISKS\D). Каждая папка синхронизируется со своим репозиторием. На уровне эмулятора это просто папки на C: — никаких дополнительных монтирований.
Проблема 4: Голосовое управление в полноэкранном режиме
Браузеры не дают запускать микрофон без явного клика пользователя. В полноэкранном режиме кликнуть сложно.
Решение: Горячие клавиши. Нажимаешь ScrollLock (непечатаемая клавиша, DOS её не использует) — стартует запись голоса. Один раз разрешил доступ к микрофону — потом работает через раз, но для повторных запусков это ок.
Безопасность
Вопрос, который мне задают чаще всего: "А безопасно ли это? Токены же в браузере видны".
Все токены (GitHub, Anthropic) хранятся только в localStorage браузера
В код или репозитории они не попадают
Запросы к API идут прямо из браузера (ключ виден в DevTools, но это для личного использования — вы сами управляете своими ключами)
Токен с правом repo даёт доступ только к репозиториям, которые вы сами указали
Я понимаю риски и предупреждаю об этом в интерфейсе. Для публичных репозиториев токен не нужен вообще.
Пример сценария использования
Допустим, вы хотите поиграть в старую игру с другом по сети:
Открываете GitDOS в браузере
Подключаете репозиторий (или используете публичный)
Включаете IPX-мультиплеер, создаёте комнату
Устанавливаете игру через INSTALL
Запускаете, выбираете сетевой режим
Друг подключается по коду комнаты — и вы играете
Или хотите написать программу на Pascal:
Пишете AI напиши программу, которая вычисляет факториал
Ассистент создаёт файл, компилирует, исправляет ошибки
Запускаете готовую программу
Всё это делается в одном терминале, без переключения окон.
Планы на будущее
Улучшить ИИ-ассистента: чтобы он лучше понимал контекст DOS и мог выполнять более сложные задачи
Расширить каталог игр и программ
Добавить поддержку большего количества языков программирования
Сделать embed-версию для встраивания на другие сайты (уже есть, но хочу улучшить)
Заключение
Я не претендую на революцию. Просто сделал инструмент, который сам хотел бы использовать. И если он пригодится кому-то ещё — я буду рад.
Проект открытый, код на GitHub. Если есть идеи, баги или вопросы — пишите, я открыт к диалогу.
GitDOS: https://sementsul.github.io/GitDOS/
Исходники: https://github.com/sementsul/GitDOS
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | ABC: Трамп рассматривает возможность отставки главы аппарата Белого дома | 0 | 0 | 13-11-2018 |
| 2 | The Drawings of Victor Hugo: The Intimacy of Genius | 0 | 0 | 20-09-2021 |
| 3 | Продажи новых легковых автомобилей в ЕC в январе выросли на 11%, до 760 тыс. - ассоциация | 0 | 0 | 21-02-2023 |
| 4 | Новокузнецк вошел в пятерку городов России, ставших лидерами по обновлению городского электротранспорта | 0 | 0 | 18-08-2022 |
| 5 | Разведка США: Белый дом пытался ограничить доступ к записи разговора Трампа с Зеленским | 0 | 0 | 26-09-2019 |
| 6 | Горловку ДНР готовят к мирной жизни | 0 | 0 | 15-02-2025 |
| 7 | Citroën C3: un utilitario con hechuras de coche grande | 2 | 6 | 28-05-2026 |
| 8 | Dancehall star Spice reveals secret way Shaggy changed her life and career | 0 | 0 | 20-02-2025 |
| 9 | Тетяна Тікун та Левко Цібеленко - переможці міжнародного турніру з гірськолижного спорту Cas Karakoram | 0 | 0 | 30-01-2019 |
| 10 | Великие Луки: Вечер 31 окт, Ср | 0 | 0 | 30-10-2018 |