3D Movie Maker wurde auf Linux portiert

3D Movie Maker wurde auf Linux portiert

Entwickler des Projekts 3DMMEx Die klassische Version gestartet Microsoft 3D Movie Maker unter Linux ohne Wine und virtuelle Maschinen. Über die geleistete Arbeit berichtete Ben Stone, der Autor des ursprünglichen Ports von 3DMMEx. Seinen Angaben zufolge hat das Projekt einen wichtigen Meilenstein erreicht: Das Programm lässt sich nun zusammenstellen und unter Linux starten, was 3DMMEx zu dem ersten bekannten Fork von 3D Movie Maker macht, der außerhalb von Windows funktioniert. Die Veröffentlichung über den Port ist datiert auf 9. Mai 2026.

Microsoft 3D Movie Maker — ein Kinderprogramm aus dem Jahr 1995 zur Erstellung einfacher dreidimensionaler Filme: Der Benutzer wählte Szenen aus, platzierte Charaktere und Objekte, gab ihnen Aktionen und fügte Dialoge, Geräusche und Musik hinzu. Lange Zeit blieb das Projekt ein verschlossenes historisches Artefakt aus der Ära von Windows 95, doch im Mai 2022 öffnete Microsoft den Quellcode von 3D Movie Maker unter der MIT-Lizenz. Das offizielle Repository von Microsoft ist auf GitHub; in der Beschreibung wird ausdrücklich darauf hingewiesen, dass es sich um den Quellcode des ursprünglichen Projekts aus dem Jahr 1995 handelt, der als Open Source unter der MIT-Lizenz veröffentlicht wurde.

Die Offenlegung der Quellcodes bildete den Ausgangspunkt für mehrere Versuche, das Programm wiederzubeleben. Zunächst kam das Projekt 3DMMForever, das sich mit der Modernisierung der Version und der Vorbereitung zur Kompilierung mit modernen Mitteln beschäftigte. Später, als die Arbeiten daran langsamer vorankamen, gründete Ben Stone einen Fork 3DMMEx. Das Ziel des Projekts ist es, die klassische Erfahrung mit 3D Movie Maker zu bewahren, jedoch mit kleinen Verbesserungen und den Code portabel für moderne Systeme zu machen.

Die Portierung stellte sich nicht als bloße Neukompilierung des alten Codes heraus. Der Quellcode von 3D Movie Maker wurde in einem alten C++-Dialekt geschrieben, Microsoft Visual C++, Win32 API und einem 32-Bit-Speichermodell. Darüber hinaus wurden in den internen Bibliotheken statische Abhängigkeiten, eingebetteter x86-Assembler, alte Annahmen über die Größe von Zeigern und Bindungen an Windows-spezifische Subsysteme verwendet.

Was getan werden musste

  • Den Win32-Layer durch SDL ersetzen. In 3D Movie Maker kommt ein internes Anwendungsgerüst Kauai, das ursprünglich einen Teil der Systemfunktionen abstrahierte, aber in der Praxis dennoch auf Win32 angewiesen war. In 3DMMEx wurde die Implementierung der grafischen Benutzeroberfläche auf SDL2umgestellt. Dadurch konnte das Fenstersystem, die Eingabeverarbeitung und die Zeichnung ersetzt werden, während die alte Anwendungsarchitektur beibehalten wurde.

  • Die Zeichnung und Eingabe neu schreiben. Einige Operationen, die in Win32 mit einem Aufruf durchgeführt wurden, mussten in SDL manuell implementiert werden. Zum Beispiel wurden in Windows fertige Funktionen zur Aufzählung und Erstellung von Schriftarten verwendet, während in der plattformübergreifenden Version diese Logik für jede Plattform separat geschrieben werden musste. In ähnlicher Weise wurde das System für Tastenkombinationen neu implementiert, da die alte Windows-Implementierung nicht direkt in Linux verwendet werden konnte.

  • Den eingebetteten Assembler entfernen. In Kauai und den zugehörigen Komponenten wurde ein manuell optimierter Assembler für x86 verwendet, unter anderem in den Funktionen zur Speicherkopierung, Bildverarbeitung und Datenkompression. Um die Portabilität zu gewährleisten, wurden diese Abschnitte durch C/C++-Varianten ersetzt. Laut dem Autor vereinfachte dies nicht nur den Build-Prozess außerhalb von Windows, sondern verbesserte in einigen Fällen sogar die Leistung durch moderne Implementierungen von memcpy und memmove in der C-Standardbibliothek.

  • Mit den statischen Bibliotheken befassen. Der 3D Movie Maker hatte zwei wichtige externe Abhängigkeiten: BRender und AudioMan. BRender ist die 3D-Engine von Argonaut Software, die für die Grafik verwendet wurde. Der Quellcode wurde ebenfalls veröffentlicht, beinhaltete jedoch viel x86-Assembler. Für 3DMMEx wird eine Variante verwendet, bei der die Assemblerteile durch tragbaren Code ersetzt wurden.

  • AudioMan für Linux ersetzen. Bibliothek AudioMan verantwortlich für die Wiedergabe von Audio sowie für den Import und das Aufzeichnen von Tönen innerhalb der Anwendung. Da es eng mit dem Windows-Audio und den COM-Schnittstellen verbunden war, haben die Entwickler entschieden, es nicht direkt zu portieren. Für Nicht-Windows-Systeme wurde ein neues Modul zur Wiedergabe und Aufzeichnung von Audio basierend auf miniaudio.

  • MIDI- und Videoinserts-Unterstützung hinzufügen. Für den Linux-Port wurden integriert FluidSynth für die Wiedergabe von MIDI und GStreamer für die Wiedergabe von Video-Clips. Zudem mussten typische Probleme beim Portieren alter Windows-Programme in eine POSIX-Umgebung gelöst werden: Fallunempfindlichkeit von Dateinamen, umgekehrte Schrägstriche in Pfaden, plattformspezifische Funktionen zur Dateiarbeit und andere Kleinigkeiten, die zusammen den Start der Anwendung behindern.

  • Den Code für 64-Bit-Systeme vorbereiten. Ein erheblicher Teil des alten Codes war auf eine 32-Bit-Umgebung ausgelegt.. Bei der Portierung wurden Stellen festgestellt, an denen Zeiger auf 32-Bit-Zahlen zurückgeführt wurden, und die auf der Festplatte gespeicherten Strukturen hingen von der Größe des Zeigers ab. Um die Kompatibilität mit den Projektdateien von 3D Movie Maker nicht zu beeinträchtigen, wurden im Code Größenprüfungen für die Strukturen und separate Serialisierungslogik hinzugefügt.

  • Verbesserung von Debugging und Tests. Ein Teil der internen Tests von Kauai wurde auf Google Test, und der Code erhielt zusätzliche Überprüfungen und Protokolle für die Skriptabwicklung. Dies ist wichtig, da ein erheblicher Teil der 3D Movie Maker-Logik nicht im klassischen C++-Code, sondern in den eigenen Skripten der Anwendung lebt.

Jetzt im Repository 3DMMEx sind Unterstützung für Linux, Grafik und Eingaben über SDL2, Kompilierung mit Visual Studio 2022, Clang und GCC, 64-Bit-Bauten für x64 und ARM64, Umstellung von eingebautem Assembler auf portablen C++, Modultests, verbesserte Mausinteraktionen, neue Tastenkombinationen und qualitativ hochwertigerer Audioimport angegeben. Für den Bau unter Linux sind CMake, Ninja, GCC und die Entwicklungsbibliotheken SDL2, SDL2_ttf, GStreamer, GTK3, iconv und Fontconfig erforderlich.

Derzeit muss die Linux-Version aus dem Quellcode kompiliert werden. Der Autor plant, fertige Binärpakete später für gängige Distributionen bereitzustellen. Der Port selbst ist jedoch bereits funktionsfähig: Laut Ben Stone funktionieren alle Funktionen von 3DMMEx in der SDL/Linux-Version, obwohl es Probleme mit der Mausverarbeitung beim Ziehen von Darstellern auf der Bühne gibt. Zu den möglichen zukünftigen Richtungen gehören außerdem der Port auf macOS und eine Option über Emscripten für den Betrieb im Browser.

Somit führte die Veröffentlichung des Quellcodes durch Microsoft im Jahr 2022 nicht nur zur Archivierung des alten Programms, sondern auch zu einem vollständigen Port auf moderne Plattformen. 3D Movie Maker kann nun nicht nur als museumsgelbes Relikt der Windows 95-Ära betrachtet werden, sondern auch als Beispiel, wie die Veröffentlichung von Code unter einer freien Lizenz nach Jahrzehnten eine längst vergessen geglaubte Anwendung wieder zum Leben erwecken kann.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4