
Projekti arendajad 3DMMEx õnnestus käivitada klassikaline Microsoft 3D Movie Maker Linuxis ilma Wine'i ja virtuaalmasinata. Töödest rääkis Ben Stone, 3DMMEx originaalporti autor. Tema sõnul on projekt saavutanud olulise verstapost: programmi on nüüd võimalik kokku panna ja Linuxis käivitada, muutes 3DMMEx esimeseks tuntud kõrvalharuks 3D Movie Maker'ist, mis töötab väljaspool Windowsi. Postitus üleviimise kohta on dateeritud 9. mai 2026.
Microsoft 3D Movie Maker — 1995. aasta lastetarkvara, millega loodi lihtsaid kolmemõõtmelisi jooniseid: kasutaja valis stseene, paigaldas tegelasi ja objekte, määras neile tegevusi ning lisas dialooge, heli ja muusikat. Pikka aega oli projekt suletud ajalooline artefakt Windows 95 ajast, kuid mai 2022. aastal avas Microsoft 3D Movie Maker'i lähtekoodi MIT litsentsi all. Microsofti ametlik repostiiv on saadaval GitHubis; kirjelduses on selgelt öeldud, et see on 1995. aasta algse projekti lähtekood, avaldatud avatud tarkvara MIT litsentsi all.
Lähtekoodi avamine sai mitmete katsete algusprogrammi ellu äratamiseks. Esiteks ilmus projekt 3DMMForever, mis tegeles kaasaegsete vahendite abil versiooniuuenduse ja kompileerimise ettevalmistamisega. Hiljem, kui töö tema kallal aeglustus, lõi Ben Stone haru 3DMMEx. Projekti eesmärk on säilitada klassikaline 3D Movie Maker'iga töötamise kogemus, kuid lisada väikseid täiustusi ja muuta kood kaasaegsetele süsteemidele ülekantavaks.
Ülekanne osutus keeruliseks, mitte lihtsalt vana koodi uuesti kompileerimiseks. 3D Movie Maker'i lähtekood oli kirjutatud vana C++ dialekti, Microsoft Visual C++, Win32 API ja 32-bitise mälu mudeli järgi. Lisaks kasutati sisemistes raamatukogudes staatilisi sõltuvusi, sissekodeeritud x86 assemblerinstruktsioone, vanu eeldusi kursorite suuruse kohta ning sidet Windows-iga seotud alam süsteemidega.
Mida tuli teha
Asendada Win32 kiht SDL-iga. 3D Movie Maker'is kasutatakse sisemist rakendusraami Kauai, mis algselt abstrahheeris osa süsteemifunktsioonidest, kuid praktikas toetus ikkagi Win32-le. 3DMMEx'is on kasutajaliidese teostus viidud üle SDL2. See võimaldas asendada akna alamsüsteemi, sisendi töötlemise ja joonistamise, säilitades samal ajal vana rakenduse arhitektuuri.
Ümber kirjutada joonistus ja sisend. Mõned Win32-s toimunud operatsioonid tuli SDL-is käsitsi ellu viia. Näiteks Windowsis kasutati fontide haldamiseks valmis loendi ja loomise funktsioone, kuid ülekantavas versioonis tuli see loogika iga platvormi jaoks eraldi kirjutada. Samuti oli klaviatuurikombinatsioonide süsteem uuesti läbi kirjutatud, kuna vana Windowsi teostust ei saanud otse Linuxis kasutada.
Eemaldada sisseehitatud assembler. Kauai ja seotud komponentides kasutati x86 jaoks käsitsi optimeeritud assemblerit, sealhulgas mälukopeerimise, pilditöötluse ja andmete tihendamise funktsioonides. Ühisosa jaoks asendati need osad C/C++ versioonidega. Autori sõnul lihtsustas see mitte ainult Windowsist väljas ehitamist, vaid mõnel juhul isegi parandas sooritusvõimet, tänu kaasaegsetele memcpy ja memmove teostustele C standardteegis.
Selgitada välja staatilised teegid. 3D Movie Maker'il oli kaks olulist välist sõltuvust: BRender ja AudioMan. BRender — Argonaut Software'i kolmemõõtmeline mootor, mida kasutati graafika jaoks. Selle lähtekood avati, kuid see sisaldas samuti palju x86-assembleri koodi. 3DMMEx'is kasutatakse versiooni, kus assembleri osad on asendatud ülekantava koodiga.
Asenda AudioMan Linuxile. Raamatukogu AudioMan vastutas mitte ainult heli taasesitamise, vaid ka helide importimise ja salvestamise eest rakenduses. Kuna see oli tihedalt seotud Windowsi heliga ja COM-liidestega, ei otsustanud arendajad seda otse üle kanda. Mitte-Windows-süsteemide jaoks lisati uus heli taasesitamise ja salvestamise moodul, mis põhineb miniaudio.
Lisa MIDI ja videoklipi tugi. Linuxi portimise jaoks integreeriti FluidSynth MIDI taasesitamiseks ja GStreamer videoklipi esitamiseks. Samuti tuli lahendada tüüpilised probleemid vanade Windowsi programmide üleviimisel POSIX-keskkonda: failinimede suurustundlikkus, tagurpidi kaldkriipsud teedes, platvormipõhised failide töötlemise funktsioonid ja muud pisiasjad, mis kokkuvõttes takistavad rakenduse käivitamist.
Valmista kood ette 64-bitiste süsteemide jaoks. Oluline osa vanast koodist eeldas 32-bitist keskkonda.. Üleviimiseks leiti kohti, kus viidatud muutujad olid 32-bitised, samas kui kettale salvestatavad struktuurid sõltusid viidatud suurusest. Kompaktsete 3D Movie Maker projektifailidega ühilduvuse säilitamiseks lisati koodile struktuuride suuruste kontrollid ja eraldi serialiseerimise loogika.
Parandada tõrkeotsingut ja testimist. Osa Kauai sisetestest on kantud Google Test, ja koodile on lisatud täiendavad kontrollid ja logid kasutajaliidese skriptide täitmise kohta. See on oluline, sest suur osa 3D Movie Maker loogikast elab mitte tavas C++ koodis, vaid rakenduse enda skriptides.
Praegu 3DMMEx hoidlas on välja kuulutatud Linuxi tugi, graafika ja sisend läbi SDL2, Visual Studio 2022, Clang ja GCC kokkupanek, 64-bitised versioonid x64 ja ARM64 jaoks, sisseehitatud assembleri asendamine ülekantava C++-ga, moodulitestid, parem hiiretoimingute tugi, uued klaviatuuri otseteed ja kvaliteetsem heli imporditav. Linuxis kogumiseks on vajalikud CMake, Ninja, GCC ja SDL2, SDL2_ttf, GStreamer, GTK3, iconv ja Fontconfig arendusraamatukogud.
Praegu tuleb Linuxi versioon koostada lähtekoodist. Valmis binarvvormingud plaanib autor hiljem välja töödelda populaarsetele distributsioonidele. Samas on port juba funktsionaalne: Beni Stone'i sõnul töötavad kõik 3DMMExi funktsioonid SDL/Linux versioonis, kuigi hiirega näitlejate lohistamisel on endiselt probleeme. Samuti on tulevikusuundadena välja toodud üleviimine macOS-ile ja variant Emscripteni kaudu brauseris käitamiseks.
Seega viis Microsofti lähtekoodide avamine 2022. aastal järk-järgult mitte ainult vana programmi säilitamiseni arhiivivormis, vaid ka täieliku üleviimise kaasaegsetele platvormidele. 3D Movie Makerit saab nüüd käsitleda mitte ainult kui Windows 95 ajastu muuseumieksponaat, vaid ka kui näidet sellest, kuidas vabakoodiga koodi avaldamine võimaldab pärast aastakümneid elustada ammu unustatud rakenduse.
Allikas: linux.org.ru
