
Prosjektutviklere 3DMMEx oppnådde lanseringen av klassikeren Microsoft 3D Movie Maker в Linux uten Wine eller en virtuell maskin. Ben Stone, forfatteren av 3DMMEx-kildeporten, snakket om arbeidet som er gjort. Ifølge ham har prosjektet nådd en viktig milepæl: programmet kan nå kompileres og kjøres i Linux, noe som gjør 3DMMEx til den første kjente forgreningen av 3D Movie Maker som opererer utenfor WindowsPublikasjonen om overføringen er datert 9 May 2026 år.
Microsoft 3D Movie Maker — et barneprogram fra 1995 for å lage enkle 3D-tegneserier: brukeren valgte scener, plasserte karakterer og objekter, tilordnet dem handlinger, la til dialog, lyd og musikk. I lang tid forble prosjektet en lukket historisk gjenstand fra tiden. Windows 95, men i I mai 2022 lanserte Microsoft 3D Movie Maker med åpen kildekode under MIT-lisensen.Offisielt Microsoft-lager tilgjengelig på github; beskrivelsen sier tydelig at dette er kildekoden til det opprinnelige prosjektet fra 1995, publisert som åpen kildekode-programvare under MIT-lisensen.
Å åpne kildekoden ble utgangspunktet for flere forsøk på å gjenopplive programmet. Først var det prosjektet 3DMMForever, som jobbet med å modernisere bygget og forberede det for kompilering med moderne verktøy. Senere, da arbeidet med det gikk tregere, laget Ben Stone en fork 3DMMExProsjektets mål er å bevare den klassiske 3D Movie Maker-opplevelsen, men legge til mindre forbedringer og gjøre koden portabel til moderne systemer.
Porteringen var ikke en enkel rekompilering av den gamle koden. Kildekoden til 3D Movie Maker ble skrevet for en gammel C++-dialekt, Microsoft Visual C++, Win32 API og 32-bits minnemodellen. Videre brukte de interne bibliotekene statiske avhengigheter, innebygd x86-assembler, gamle antagelser om pekerstørrelse og kobling til Windows-spesifikke delsystemer.
Hva måtte gjøres
Erstatt Win32-laget med SDL. 3D Movie Maker bruker et internt applikasjonsrammeverk Kauai, som i utgangspunktet abstraherte noen av systemfunksjonene, men i praksis fortsatt var avhengig av Win32. I 3DMMEx ble implementeringen av det grafiske grensesnittet overført til SDL2Dette tillot oss å erstatte vindusundersystemet, inndatabehandling og gjengivelse samtidig som vi bevarte den gamle applikasjonsarkitekturen.
Omskriv rendering og input. Noen operasjoner som ble utført i et enkelt kall i Win32 måtte implementeres manuelt i SDL. For eksempel, for å jobbe med fonter i Windows De eksisterende funksjonene for opplisting og oppretting av fonter ble brukt, men i den bærbare versjonen måtte denne logikken skrives separat for hver plattform. På samme måte ble hurtigtastsystemet implementert på nytt, siden det gamle Windows-implementeringen kunne ikke brukes direkte i Linux.
Fjern innebygd assembler. Kauai og tilhørende komponenter brukte en håndoptimalisert x86-assembler, inkludert funksjoner for minnekopiering, bildebehandling og datakomprimering. For portabilitet ble disse delene erstattet med C/C++-versjoner. Ifølge forfatteren forenklet dette ikke bare kompileringen utenfor Windows, men i noen tilfeller til og med forbedret ytelse på grunn av moderne implementeringer av memcpy og memmove i standard C-biblioteket.
Forstå statiske biblioteker. 3D Movie Maker hadde to viktige eksterne avhengigheter: Brander и AudioManBRender er en 3D-motor fra Argonaut Software som brukes til grafikk. Kildekoden var også åpen kildekode, men den inneholdt også en betydelig mengde x86-assembling. 3DMMEx bruker en variant der assembly-delene er erstattet med portabel kode.
Erstatt AudioMan for Linux. Bibliotek AudioMan var ikke bare ansvarlig for lydavspilling, men også for import og opptak av lyder i applikasjonen. Siden den var nært knyttet til Windows-lyd og COM-grensesnitt, portet ikke utviklerne det direkte. For ikke-Windows- en ny modul for avspilling og opptak av lyd basert på systemet er lagt til minilyd.
Legg til støtte for MIDI- og videoinnlegg. For Linux-portene ble integrert FluidSynth for MIDI-avspilling og GStreamer for å spille av videoskjermsparere. Vi måtte også løse typiske problemer med overføring av gamle. Windows-programmer i POSIX-miljøet: store og små bokstaver i filnavn, omvendte skråstreker i stier, plattformspesifikke filhåndteringsfunksjoner og andre småting som samlet sett forstyrrer oppstarten av applikasjoner.
Forbered kode for 64-bits systemer. Mye av den gamle koden antok et 32-bits miljø.Under porteringen oppdaget vi tilfeller der pekere ble omformet til 32-bits tall, og strukturer som ble lagret på disk var avhengig av pekerstørrelsen. For å opprettholde kompatibilitet med 3D Movie Maker-prosjektfiler ble strukturstørrelseskontroller og separat serialiseringslogikk lagt til i koden.
Forbedre feilsøking og testing. Noe av Kauais interne testing er flyttet til Google -test, og ytterligere kontroller og logging av utførelse av grensesnittskript ble lagt til i koden. Dette er viktig fordi en betydelig del av logikken i 3D Movie Maker ikke ligger i vanlig C++-kode, men i applikasjonens egne skript.
Nå i 3DMMEx-arkivet erklærte støtte Linux, grafikk og input via SDL2, bygging med Visual Studio 2022, Clang og GCC, 64-bits bygg for x64 og ARM64, erstatning av innebygd assembler med bærbar C++, enhetstester, forbedret musehåndtering, nye hurtigtaster og import av lyd av høyere kvalitet. For bygging i Linux Krever CMake, Ninja, GCC og utviklingsbibliotekene SDL2, SDL2_ttf, GStreamer, GTK3, iconv og Fontconfig.
Mens LinuxVersjonen må bygges fra kildekoden. Forfatteren planlegger å forberede bruksklare binærversjoner for populære distribusjoner senere. Selve porteringen er allerede funksjonell: ifølge Ben Stone fungerer alle 3DMMEx-funksjonene i SDL.Linux-versjoner, selv om det fortsatt er problemer med musehåndtering når man drar skuespillere rundt på scenen. En portering til macOS og et alternativ via Emscripten for å kjøre i en nettleser.
Dermed førte åpningen av Microsofts kildekode i 2022 gradvis ikke bare til bevaring av det gamle programmet i arkivert form, men også til en fullverdig portering til moderne plattformer. 3D Movie Maker kan nå sees på ikke bare som en museumsutstilling fra tiden. Windows 95, men også som et eksempel på hvordan publisering av kode under en fri lisens lar et lenge forlatt program bli brakt tilbake til livet flere tiår senere.
Kilde: linux.org.ru
