
Sviluppatori del progetto 3DMMEx hanno raggiunto l'avvio del classico Microsoft 3D Movie Maker su Linux senza Wine e macchine virtuali. Ben Stone, autore del port originale di 3DMMEx, ha parlato del lavoro svolto. Secondo lui, il progetto ha raggiunto un traguardo importante: il programma può ora essere compilato e avviato su Linux, rendendo 3DMMEx la prima ramificazione conosciuta di 3D Movie Maker a funzionare al di fuori di Windows. La pubblicazione sul porting è datata 9 maggio 2026.
Microsoft 3D Movie Maker — un programma per bambini del 1995 per creare semplici cartoni animati in 3D: l'utente sceglieva le scene, posizionava i personaggi e gli oggetti, assegnava loro azioni, aggiungeva dialoghi, suoni e musica. A lungo, il progetto è rimasto un artefatto storico chiuso dell'era di Windows 95, ma a maggio 2022, Microsoft ha reso pubblico il codice sorgente di 3D Movie Maker con licenza MIT. Il repository ufficiale di Microsoft è disponibile su GitHub; nella descrizione è chiaramente indicato che si tratta del codice sorgente del progetto originale del 1995, pubblicato come software open source con licenza MIT.
L'apertura del codice sorgente è stata il punto di partenza per diversi tentativi di riportare in vita il programma. Inizialmente è nato il progetto 3DMMForever, che si occupava della modernizzazione della build e della preparazione alla compilazione con strumenti moderni. Successivamente, quando il lavoro su di esso ha rallentato, Ben Stone ha creato un fork 3DMMEx. L'obiettivo del progetto è preservare l'esperienza classica di utilizzo di 3D Movie Maker, ma aggiungere piccoli miglioramenti e rendere il codice portabile sui sistemi moderni.
Il porting si è rivelato non essere una semplice ricompilazione del vecchio codice. Il codice sorgente di 3D Movie Maker era scritto per un vecchio dialetto C++, Microsoft Visual C++, Win32 API e un modello di memoria a 32 bit. Inoltre, venivano utilizzate dipendenze statiche nelle librerie interne, assemblatore x86 incorporato, vecchie ipotesi sulle dimensioni dei puntatori e vincoli legati a sottosistemi specifici di Windows.
Cosa è stato necessario fare
Sostituire il layer Win32 con SDL. In 3D Movie Maker viene utilizzato un framework applicativo interno Kauai, che astrattava inizialmente alcune funzioni di sistema, ma nella pratica si basava comunque su Win32. In 3DMMEx, l'implementazione dell'interfaccia grafica è stata trasferita su SDL2. Questo ha permesso di sostituire il sistema delle finestre, la gestione degli input e il rendering, mantenendo comunque l'architettura dell'applicazione intatta.
Riscrivere il rendering e l'input. Alcune operazioni che in Win32 venivano eseguite con una singola chiamata, in SDL sono state implementate manualmente. Ad esempio, per lavorare con i font in Windows si utilizzavano funzioni predefinite per l'elenco e la creazione dei font, mentre nella versione portabile è stato necessario scrivere questa logica separatamente per le piattaforme. Allo stesso modo, è stato implementato nuovamente il sistema di combinazioni di tasti, poiché la vecchia implementazione di Windows non poteva essere utilizzata direttamente in Linux.
Rimuovere l'assemblatore incorporato. In Kauai e nei componenti correlati è stato utilizzato un assemblatore ottimizzato manualmente per x86, incluse le funzioni di copia della memoria, elaborazione delle immagini e compressione dei dati. Per la portabilità, queste sezioni sono state sostituite con varianti in C/C++. Secondo l'autore, ciò non solo ha semplificato la compilazione al di fuori di Windows, ma in alcuni casi ha persino migliorato le prestazioni grazie alle moderne implementazioni di memcpy e memmove nella libreria standard C.
Affrontare le librerie statiche. 3D Movie Maker aveva due importanti dipendenze esterne: BRender e AudioMan. BRender è un motore 3D di Argonaut Software utilizzato per la grafica. Il suo codice sorgente è stato aperto, ma conteneva anche molti assemblatori x86. Per 3DMMEx viene utilizzata una variante in cui le parti in assembly sono sostituite con codice portabile.
Sostituire AudioMan per Linux. La libreria AudioMan non era responsabile solo della riproduzione del suono, ma anche dell'importazione e registrazione dei suoni all'interno dell'applicazione. Poiché era strettamente legata al suono di Windows e alle interfacce COM, gli sviluppatori non l'hanno trasferita direttamente. Per i sistemi non Windows è stato aggiunto un nuovo modulo per la riproduzione e registrazione del suono basato su miniaudio.
Aggiungere supporto per MIDI e video incorporati. Per il porto Linux sono stati integrati FluidSynth per la riproduzione di MIDI e GStreamer per la riproduzione di video. È stato inoltre necessario affrontare i problemi tipici del trasferimento dei vecchi programmi Windows in un ambiente POSIX: sensibilità ai nomi dei file rispetto al maiuscolo/minuscolo, barre oblique inverse nei percorsi, funzioni piattaforma specifiche per la gestione dei file e altre piccole cose che nel complesso rompono l'avvio dell'applicazione.
Preparare il codice per i sistemi a 64 bit. Una parte significativa del vecchio codice presupponeva un ambiente a 32 bit.. Durante il porting, sono emersi punti in cui i puntatori venivano convertiti in numeri a 32 bit e le strutture salvate su disco dipendevano dalla dimensione del puntatore. Per non compromettere la compatibilità con i file dei progetti 3D Movie Maker, sono state aggiunte al codice verifiche delle dimensioni delle strutture e una logica separata per la serializzazione.
Migliorare il debug e il testing. Parte dei test interni di Kauai è stata trasferita su Google Test, e nel codice sono state aggiunte ulteriori verifiche e registri di esecuzione per gli script dell'interfaccia. Questo è importante perché una parte significativa della logica di 3D Movie Maker risiede non nel normale codice C++, ma negli script personalizzati dell'applicazione.
Attualmente nel repository 3DMMEx sono dichiarati supporto per Linux, grafica e input tramite SDL2, compilazione con Visual Studio 2022, Clang e GCC, compilazioni a 64 bit per x64 e ARM64, sostituzione dell'assembly integrato con C++ portabile, test modulari, migliorato utilizzo del mouse, nuove scorciatoie da tastiera e importazione audio di qualità superiore. Per la compilazione su Linux sono necessari CMake, Ninja, GCC e le librerie di sviluppo SDL2, SDL2_ttf, GStreamer, GTK3, iconv e Fontconfig.
Attualmente, la versione Linux deve essere compilata dai sorgenti. L'autore prevede di preparare successivamente i pacchetti binari pronti per le distribuzioni più popolari. Tuttavia, il porting è già funzionale: secondo quanto riferito da Ben Stone, tutte le funzionalità di 3DMMEx funzionano nella versione SDL/Linux, anche se ci sono ancora problemi con la gestione del mouse durante il trascinamento degli attori sulla scena. Tra future possibili direzioni sono stati citati il porting su macOS e un'opzione tramite Emscripten per l'esecuzione nel browser.
Pertanto, l'apertura del codice sorgente da parte di Microsoft nel 2022 ha portato non solo alla conservazione del vecchio programma in forma archiviata, ma a un vero e proprio porting sulle piattaforme moderne. 3D Movie Maker può ora essere considerato non solo come un reperto museale dell'epoca di Windows 95, ma anche come un esempio di come la pubblicazione del codice sotto licenza libera permette, dopo decenni, di riportare in vita un'applicazione a lungo abbandonata.
Fonte: linux.org.ru
