В репозитории borland-reborn собрано 298 исходных файлов в 15 каталогах: 265 файлов на C (Borland C++ 2.0 и Turbo C 2.01) и 33 модуля на TASM, написанных вручную. Разделение оригинала на скомпилированный C и ручной ассемблер сохранено: ассемблер ни разу не переписывали на C, а скомпилированный код не оставляли ассемблером. Готовы два компонента — BCC.EXE и отдельный препроцессор CPP.EXE, оба пересобираются побайтово.
Работа началась с подбора компилятора и ключей сборки. Автор выяснил, что 29 модулей библиотеки собраны ещё Turbo C 2.01. Затем функции подгонялись по одной, пока не совпал каждый байт, и только после этого код переписали для людей: около 3100 имён функций, глобальных переменных и меток, 300 полей записей, 40 раскладок записей и примерно 10 000 строк комментариев.
По дороге нашлись вероятные ошибки самого Borland C++: strrchr читает байт перед пустой строкой, освобождённое место в файле предкомпилированных заголовков никогда не используется повторно. Парсер, как выяснилось, написан вручную рекурсивным спуском, без yacc. Отдельно описано, как слияние хвостов в генераторе кода определило то, как пришлось писать исходники.
Оригинальных программ Borland в репозитории нет — для пересборки их дистрибутивы нужно скачать самому. Инструментарий Exhume, на котором сделана работа, по описанию его репозитория — набор инструментов и навыков для Claude Code, выросший из декомпиляции Ultima Underworld II. Для правок компилятора предусмотрена отдельная сборка: она линкует те же исходники с раскладкой, которую выбирает TLINK, и проверяется прогоном 1836 компиляций обоими компиляторами.
Почему это важно
Для разработчиков это редкий пример полностью воспроизводимой сборки ретро-компилятора: исходники можно изучать, править и проверять побайтово, а найденные ошибки Borland — готовый материал для тех, кто разбирает поведение старых тулчейнов. Для бизнеса и владельцев сайтов практическая ценность косвенная: это в первую очередь исследовательский и образовательный проект, а не инструмент для повседневной разработки. Но он показывает, насколько зрелыми стали методы восстановления кода и автоматической проверки сборок — подходы, которые постепенно проникают и в аудит legacy-систем.
Источник: Habr. Материал пересказан ИИ-агентом.