Vývojáři projektu 3DMMEx dosáhl uvedení klasiky na trh Microsoft 3D Movie Maker в Linux bez Wine nebo virtuálního stroje. Ben Stone, autor zdrojového portu 3DMMEx, hovořil o odvedené práci. Podle něj projekt dosáhl důležitého milníku: program lze nyní kompilovat a spustit v Linux, čímž se 3DMMEx stala první známou verzí 3D Movie Makeru, která funguje mimo WindowsPublikace o převodu je datována 9 května 2026 rok.
Microsoft 3D Movie Maker — dětský program z roku 1995 pro tvorbu jednoduchých 3D kreslených filmů: uživatel vybíral scény, umisťoval postavy a objekty, přiřazoval jim akce, přidával dialogy, zvuk a hudbu. Projekt dlouho zůstával uzavřeným historickým artefaktem dané epochy. Windows 95, ale v V květnu 2022 společnost Microsoft zpřístupnila 3D Movie Maker s otevřeným zdrojovým kódem pod licencí MIT.Oficiální repozitář Microsoftu k dispozici na githubu; popis jasně uvádí, že se jedná o zdrojový kód původního projektu z roku 1995, publikovaného jako open source software pod licencí MIT.
Otevření zdrojového kódu se stalo výchozím bodem pro několik pokusů o oživení programu. Nejprve tu byl projekt 3DMMMNavždy, který pracoval na modernizaci sestavení a jeho přípravě pro kompilaci s moderními nástroji. Později, když se práce na něm zpomalila, Ben Stone vytvořil fork 3DMMExCílem projektu je zachovat klasický zážitek z 3D Movie Makeru, ale přidat drobná vylepšení a zajistit přenositelnost kódu na moderní systémy.
Port nebyl pouhou rekompilací starého kódu. Zdrojový kód 3D Movie Makeru byl napsán pro starý dialekt C++, Microsoft Visual C++, Win32 API a 32bitový paměťový model. Interní knihovny navíc používaly statické závislosti, inline assembler x86, staré předpoklady o velikosti ukazatele a linkování na... Windows-specifické subsystémy.
Co se muselo udělat
-
Nahraďte vrstvu Win32 vrstvou SDL. 3D Movie Maker používá interní aplikační framework Kauai, který zpočátku abstrahoval některé systémové funkce, ale v praxi se stále spoléhal na Win32. V 3DMMEx byla implementace grafického rozhraní převedena do SDL2To nám umožnilo nahradit okenní subsystém, zpracování vstupu a vykreslování a zároveň zachovat starou architekturu aplikace.
-
Přepište vykreslování a vstup. Některé operace, které se ve Win32 prováděly v jednom volání, musely být v SDL implementovány ručně. Například pro práci s fonty v Windows Byly použity stávající funkce pro výčet a tvorbu písem, ale v přenositelné verzi musela být tato logika napsána samostatně pro každou platformu. Podobně byl znovu implementován systém klávesových zkratek, protože staré Windows-implementaci nebylo možné přímo použít v Linux.
-
Odebrat inline assembler. Kauai a s ním spojené komponenty používaly ručně optimalizovaný assembler x86, včetně funkcí pro kopírování paměti, zpracování obrazu a kompresi dat. Pro přenositelnost byly tyto sekce nahrazeny verzemi v C/C++. Podle autora to nejen zjednodušilo kompilaci mimo Windows, ale v některých případech dokonce i zlepšený výkon díky moderním implementacím memcpy a memmove ve standardní knihovně C.
-
Pochopte statické knihovny. 3D Movie Maker měl dvě důležité externí závislosti: Brander и AudioManBRender je 3D engine od společnosti Argonaut Software používaný pro grafiku. Jeho zdrojový kód byl také open source, ale obsahoval také značné množství x86 assembly. 3DMMEx používá variantu, kde jsou části assembly nahrazeny přenositelným kódem.
-
Nahraďte AudioMana za Linux. knihovna AudioMan byl zodpovědný nejen za přehrávání zvuku, ale také za import a nahrávání zvuků v aplikaci. Protože byl úzce spjat s Windows-zvuková a COM rozhraní, vývojáři jej přímo neportovali. Pro ne-Windows- přidán nový modul pro přehrávání a nahrávání zvuku založený na systému miniaudio.
-
Přidána podpora pro MIDI a video inserty. pro Linux-porty byly integrovány FluidSynth pro přehrávání MIDI a GStreamer pro přehrávání spořičů obrazovky. Také jsme museli řešit typické problémy s přenosem starých. Windows-programy v prostředí POSIX: rozlišování velkých a malých písmen v názvech souborů, zpětná lomítka v cestách, funkce pro práci se soubory specifické pro danou platformu a další drobnosti, které kolektivně narušují spouštění aplikací.
-
Připravte kód pro 64bitové systémy. Velká část starého kódu předpokládala 32bitové prostředí.Během portování jsme objevili případy, kdy byly ukazatele přetypovány na 32bitová čísla a struktury ukládané na disk závisely na velikosti ukazatele. Pro zachování kompatibility se soubory projektu 3D Movie Maker byly do kódu přidány kontroly velikosti struktur a samostatná logika serializace.
-
Vylepšete ladění a testování. Některé interní testy Kauai byly přesunuty do Test Googlea do kódu byly přidány další kontroly a protokolování provádění skriptů rozhraní. To je důležité, protože významná část logiky programu 3D Movie Maker se nenachází v běžném kódu C++, ale ve vlastních skriptech aplikace.
Nyní v repozitáři 3DMMEx deklarovaná podpora Linux, grafika a vstup přes SDL2, sestavování s Visual Studiem 2022, Clang a GCC, 64bitové sestavení pro x64 a ARM64, nahrazení inline assembleru přenositelným C++, jednotkové testy, vylepšená manipulace s myší, nové klávesové zkratky a import zvuku ve vyšší kvalitě. Pro sestavování v Linux Vyžaduje CMake, Ninja, GCC a vývojářské knihovny SDL2, SDL2_ttf, GStreamer, GTK3, iconv a Fontconfig.
Zatímco LinuxVerze musí být sestavena ze zdrojového kódu. Autor plánuje později připravit hotové binární sestavení pro populární distribuce. Samotný port je již funkční: podle Bena Stonea všechny funkce 3DMMEx fungují v SDL.Linux-verzí, ačkoliv přetrvávají problémy s ovládáním myši při přetahování herců po jevišti. Jako možný budoucí směr se také zmiňuje port pro macOS a možnost spuštění v prohlížeči přes Emscripten.
Zpřístupnění zdrojového kódu Microsoftu v roce 2022 tak postupně vedlo nejen k zachování starého programu v archivované podobě, ale k plnohodnotnému portu na moderní platformy. 3D Movie Maker lze nyní vnímat nejen jako muzejní exponát dané éry. Windows 95, ale také jako příklad toho, jak publikování kódu pod svobodnou licencí umožňuje oživit dlouho opuštěnou aplikaci po desetiletích.
Zdroj: linux.org.ru
