Open-Source-Projekt
LibreOffice/core avatar
LibreOffice/core

Emscripten-Cross-Build-Unterstützung in LibreOffice/core

Projektüberblick: Schreibgeschütztes LibreOffice-Core-Repo – keine Pull-Anfrage (verwenden Sie stattdessen Gerrit – laden Sie Zip nicht herunter, sondern verwenden Sie es.

4.365 Sterne943 ForksC++GPL-3.0

Auf einen Blick

Was ist das?
Ein Repository-Leitfaden zum Bau von LibreOffice als WebAssembly mit Qt-basiertem Build, Headless-Build, Einschränkungen und Diagnosewerkzeugen.
Für wen ist es gedacht?
Das README beschreibt den Headless-Build als 'That's all' und merkt an, dass soffice.wasm nur als Nebeneffekt gebaut wird; die eigentliche Laufzeitabhängigkeit ist soffice.data, das das In-Memory-Dateisystem enthält, das der LibreOffice-Technology-Kerncode benötigt.
Darf ich es kommerziell nutzen?
Ja, unter Bedingungen. GPL-3.0 ist eine Copyleft-Lizenz: Wenn Sie Software weitergeben, die sie enthält, müssen Sie deren Quellcode unter derselben Lizenz veröffentlichen. Wer sie nur intern betreibt, ohne sie weiterzugeben, löst diese Pflicht nicht aus.
Wird es noch gepflegt?
Ja. Das Repository hat innerhalb des letzten Tages neue Commits erhalten.
In welcher Sprache ist es geschrieben?
Hauptsächlich C++, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Umfang des Repositorys und genannte Einschränkungen

Das Repository ist ein schreibgeschützter Spiegel des LibreOffice-Core-Codes. Die Beschreibung besagt, dass Pull Requests nicht akzeptiert werden, Änderungen über Gerrit laufen sollen und dass man keine Zip-Dateien herunterladen, sondern die Bundles auf dev-www.libreoffice.org verwenden soll. Das README befasst sich speziell mit dem Bau von LibreOffice als WebAssembly mit der Emscripten-Toolchain. Es beschreibt zwei Zwecke: die Erzeugung eines WASM-Binaries von LibreOffice mit Qt5-GUI oder die Kompilierung nur des Kerns („LibreOffice Technology") ohne UI zur Verwendung durch andere Software, die die UI bereitstellt, etwa Collabora Online als WASM. Das README enthält keine Geschichte des Repositorys und keinen Überblick über die gesamte Codebasis.

Für core prüfst du hier Installationsbefehl und Abhängigkeiten anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

Zwei Build-Ziele

Das README behandelt die beiden Build-Ziele getrennt. Das erste Ziel, der ursprüngliche Grund für den WASM-Port, erzeugt einen Writer-only-LibreOffice-Build mit Qt5. Es werden emrun-Befehle zum Starten von qt_soffice.html oder qt_vcldemo.html aus der Build-Ausgabe angegeben. Das zweite Ziel ist ein Headless-Build, der am Ende des READMEs dokumentiert ist und LibreOffice-Core in ein anderes Produkt einbetten soll. Dieser Build benötigt kein Qt und keine Abhängigkeiten über die hinaus, die normalerweise für LibreOffice heruntergeladen und kompiliert werden. Ein Beispiel für autogen.input wird mit Flags wie --disable-gui und --with-wasm-module=writer gezeigt.

Für core prüfst du hier Eingabeformat und erzeugte Ausgabe anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

Toolchain-Versionen und Umgebungs-Setup

Der Qt-basierte Build verwendet Qt 5.15.2 und Emscripten 4.0.10. Das README warnt, dass sich Emscripten schnell entwickelt und andere Versionen oft willkürliche Probleme verursachen. Es werden Befehle zur Installation von emsdk 4.0.10 angegeben. Für Qt wird ein von allotropia gepflegter Fork empfohlen, da Qt 5.15 LTS nicht öffentlich gepflegt wird und Qt WASM einige Fehler hat. Außerdem wird eine Einschränkung mit -fwasm-exceptions und simulate_infinite_loop erwähnt und auf einen Hack in desktop/source/app/sofficemain.cxx verwiesen. Für den Headless-Build gibt das README an, dass Emscripten 3.1.30 bekanntermaßen funktioniert, während die LO+Qt5-Arbeit 2.0.31 verwendet hat.

Für core prüfst du hier Konfigurationsdateien und Standardwerte anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

Build-Konfiguration und Deployment

Für den Qt-Build füllt die Konfiguration mit --with-package-format=emscripten das Verzeichnis workdir/installation/LibreOffice/emscripten mit relevanten Dateien aus instdir. autogen.sh ist gepatcht, um emconfigure zu verwenden, und die empfohlene Distro-Konfiguration ist --with-distro=LibreOfficeWASM32. Das Deployment wird als tar-Befehl beschrieben, der soffice.*- und qt*-Dateien packt, und der HTTP-Server muss die Header Cross-Origin-Opener-Policy: same-origin und Cross-Origin-Embedder-Policy: require-corp senden. Das README beschreibt auch einen Docker-Cross-Build mit Images aus dem lode-Repository, der eine kontrollierte, reproduzierbare Umgebung bieten soll, da emsdk install/activate nicht stabil ist.

Für core prüfst du hier Fehlerverhalten und Protokolle anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

UNO-Bindungen und JavaScript-Interaktion

Das README dokumentiert eine grobe Anfangsimplementierung von UNO-Bindungen mit Embind und merkt an, dass viele Teile nicht implementiert sind und dass es Speicherlecks geben könnte. Es werden zwei JavaScript-Beispiele gezeigt: eines fügt eine Zeichenkette am Anfang des Writer-Dokuments ein, ein anderes ändert jeden Absatz auf eine zufällige Farbe. Beide verwenden Module.uno_init.then zur Initialisierung und rufen dann UNO-APIs auf. Das README sagt, dass diese Beispiele in der Konsole des ersten Web-Worker-Threads, dem LO-Hauptthread, eingegeben werden müssen, da der Build -sPROXY_TO_PTHREAD verwendet. Alternativ kann ein Skript neben qt_soffice.html platziert und über Module.uno_scripts während des Builds geladen werden.

Für core prüfst du hier Version und Wartungszustand anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

Bekannte Einschränkungen und Workarounds

Das README hält mehrere Emscripten- und Qt-Einschränkungen fest. Es besagt, dass Module und Threads nicht zusammen verwendet werden können und dass MAIN_MODULE/SIDE_MODULE Probleme wie nur zur Laufzeit erfolgende Symbolauflösung haben. Die Emscripten-pthread-Emulation erfordert, dass die JS-Hauptthread-Ereignisschleife schnell reagiert, aber die Qt5-Ereignisschleife läuft auf diesem Thread, daher werden vorab erzeugte Worker über -sPTHREAD_POOL_SIZE benötigt. Das README erklärt auch, dass LO normalerweise eine verschachtelte Ereignisschleife für Dialoge verwendet, die aber die Browser-Ereignisschleife nicht antreiben kann und das Entfernen von Application::Execute erfordern würde. Weitere Punkte sind ein Standard-Speicherlimit von 1GB in Qt (4GB möglich), ein ICU-Fehler und dass wasm64 immer noch 32-Bit-Pointer verwendet.

Für core prüfst du hier Dateipfade und Berechtigungen anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

Diagnosewerkzeuge und zusätzliche Links

Zur Problemdiagnose schlägt das README vor, nm -s zu verwenden, um Symbole in einem Archiv anhand des von ranlib erzeugten Index aufzulisten, da Linkfehler bedeuten können, dass das Archiv keinen Index hat. Zum Debuggen wird beschrieben, wie man mit LLVM in WASM eingebettete DWARF-Informationen in Chrome verwendet; dafür sind eine experimentelle Funktion und eine Erweiterung nötig. Der Debug-Build teilt DWARF in eine zusätzliche .debug.wasm-Datei. Das README endet mit einer langen Liste externer Links zu Qt-WASM-Dokumentation, Emscripten-Dateisystem, pthreads, Ereignisschleifen und älterer veralteter Dokumentation, bewertet diese Ressourcen aber nicht selbst.

Für core prüfst du hier Schnittstellen zu Drittanbietern anhand des README-Einstiegs und des dort genannten Projektbefehls. Beobachte die konkrete Ausgabe oder Dateistruktur und halte Version, Eingabe und Ergebnis fest; Aussagen zu Leistung, Stabilität oder aktueller Pflege bleiben offen, wenn das README sie nicht belegt.

Redaktionelles Fazit

Das README beschreibt den Headless-Build als 'That's all' und merkt an, dass soffice.wasm nur als Nebeneffekt gebaut wird; die eigentliche Laufzeitabhängigkeit ist soffice.data, das das In-Memory-Dateisystem enthält, das der LibreOffice-Technology-Kerncode benötigt.

Offizielle Quellen

  1. Official documentation
  2. Official README
  3. Project repository
Community-Notizen

Community-Notizen