3D Movie Maker портирован на Linux

1000px.jpg

Разработчики проекта 3DMMEx добились запуска классического Microsoft 3D Movie Maker в Linux без Wine и виртуальной машины. О проделанной работе рассказал Бен Стоун, автор исходного порта 3DMMEx. По его словам, проект достиг важного рубежа: программу теперь можно собрать и запустить в Linux, что делает 3DMMEx первым известным ответвлением 3D Movie Maker, работающим за пределами Windows. Публикация о переносе датирована 9 мая 2026 года.

Microsoft 3D Movie Maker — детская программа 1995 года для создания простых трёхмерных мультфильмов: пользователь выбирал сцены, расставлял персонажей и объекты, задавал им действия, добавлял реплики, звук и музыку. Долгое время проект оставался закрытым историческим артефактом эпохи Windows 95, но в мае 2022 года Microsoft открыла исходный код 3D Movie Maker под лицензией MIT. Официальный репозиторий Microsoft доступен на GitHub; в описании прямо указано, что это исходный код оригинального проекта 1995 года, опубликованный как открытое ПО по лицензии MIT.

Открытие исходников стало отправной точкой для нескольких попыток оживить программу. Сначала появился проект 3DMMForever, занимавшийся модернизацией сборки и подготовкой к компиляции современными средствами. Позднее, когда работа над ним замедлилась, Бен Стоун создал ответвление 3DMMEx. Цель проекта — сохранить классический опыт работы с 3D Movie Maker, но добавить небольшие улучшения и сделать код переносимым на современные системы.

Перенос оказался не простой перекомпиляцией старого кода. Исходники 3D Movie Maker были написаны под старый диалект C++, Microsoft Visual C++, Win32 API и 32-разрядную модель памяти. Кроме того, во внутренних библиотеках использовались статические зависимости, встроенный x86-ассемблер, старые допущения о размере указателей и привязка к Windows-специфичным подсистемам.

Что пришлось сделать

  • Заменить Win32-слой на SDL. В 3D Movie Maker используется внутренний прикладной каркас Kauai, который изначально абстрагировал часть системных функций, но на практике всё равно опирался на Win32. В 3DMMEx реализация графического интерфейса была переведена на SDL2. Это позволило заменить оконную подсистему, обработку ввода и отрисовку, сохранив при этом старую архитектуру приложения.

  • Переписать отрисовку и ввод. Некоторые операции, которые в Win32 выполнялись одним вызовом, в SDL пришлось реализовывать вручную. Например, для работы со шрифтами в Windows использовались готовые функции перечисления и создания шрифтов, а в переносимой версии эту логику пришлось писать отдельно для платформ. Аналогично была заново реализована система клавиатурных сочетаний, поскольку старая Windows-реализация не могла быть напрямую использована в Linux.

  • Убрать встроенный ассемблер. В Kauai и связанных компонентах использовался вручную оптимизированный ассемблер для x86, в том числе в функциях копирования памяти, обработки изображений и сжатия данных. Для переносимости эти участки заменили на варианты на C/C++. По словам автора, это не только упростило сборку вне Windows, но в ряде случаев даже улучшило производительность за счёт современных реализаций memcpy и memmove в стандартной библиотеке C.

  • Разобраться со статическими библиотеками. У 3D Movie Maker были две важные внешние зависимости: BRender и AudioMan. BRender — трёхмерный движок Argonaut Software, использовавшийся для графики. Его исходный код также был открыт, но он тоже содержал много x86-ассемблера. Для 3DMMEx используется вариант, где ассемблерные части заменены переносимым кодом.

  • Заменить AudioMan для Linux. Библиотека AudioMan отвечала не только за воспроизведение звука, но и за импорт и запись звуков внутри приложения. Поскольку она была тесно связана с Windows-звуком и COM-интерфейсами, разработчики не стали переносить её напрямую. Для не-Windows-систем добавлен новый модуль воспроизведения и записи звука на основе miniaudio.

  • Добавить поддержку MIDI и видеовставок. Для Linux-порта были интегрированы FluidSynth для воспроизведения MIDI и GStreamer для проигрывания видеозаставок. Также пришлось решать типичные проблемы переноса старых Windows-программ в POSIX-среду: чувствительность имён файлов к регистру, обратные косые черты в путях, платформенные функции работы с файлами и другие мелочи, которые в сумме ломают запуск приложения.

  • Подготовить код к 64-разрядным системам. Значительная часть старого кода предполагала 32-разрядную среду. При переносе выявились места, где указатели приводились к 32-разрядным числам, а структуры, сохраняемые на диск, зависели от размера указателя. Чтобы не нарушить совместимость с файлами проектов 3D Movie Maker, в код были добавлены проверки размеров структур и отдельная логика сериализации.

  • Улучшить отладку и тестирование. Часть внутренних тестов Kauai была перенесена на Google Test, а в код добавили дополнительные проверки и журналы выполнения сценариев интерфейса. Это важно, потому что значительная часть логики 3D Movie Maker живёт не в обычном C++-коде, а в собственных сценариях приложения.

Сейчас в репозитории 3DMMEx заявлены поддержка Linux, графика и ввод через SDL2, сборка с Visual Studio 2022, Clang и GCC, 64-разрядные сборки для x64 и ARM64, замена встроенного ассемблера на переносимый C++, модульные тесты, улучшенная работа с мышью, новые клавиатурные сочетания и более качественный импорт звука. Для сборки в Linux нужны CMake, Ninja, GCC и библиотеки разработки SDL2, SDL2_ttf, GStreamer, GTK3, iconv и Fontconfig.

Пока Linux-версию необходимо собирать из исходников. Готовые бинарные сборки автор планирует подготовить позднее для популярных дистрибутивов. При этом сам порт уже функционален: по словам Бена Стоуна, все возможности 3DMMEx работают в SDL/Linux-версии, хотя остаются проблемы с обработкой мыши при перетаскивании актёров по сцене. Также среди возможных будущих направлений названы перенос на macOS и вариант через Emscripten для запуска в браузере.

Таким образом, открытие исходников Microsoft в 2022 году постепенно привело не просто к сохранению старой программы в архивном виде, а к полноценному переносу на современные платформы. 3D Movie Maker теперь можно рассматривать не только как музейный экспонат эпохи Windows 95, но и как пример того, как публикация кода под свободной лицензией позволяет спустя десятилетия вернуть к жизни давно заброшенное приложение.

>>> Источник

©  Linux.org.ru