- Mojang hat angekündigt, die Obfuskation in Minecraft: Java Edition vollständig zu entfernen
- Obfuskation war in der Spieleindustrie eine übliche Sicherheitspraxis, schränkte jedoch die Zugänglichkeit des Codes und die Mod-Entwicklung ein
- Bisher waren Klassen-, Funktions- und Variablennamen vollständig obfuskiert, was Mod-Entwicklung und Debugging komplex machte; nun werden Builds mit den ursprünglichen Codenamen bereitgestellt
- Ab dem ersten Snapshot nach dem Mounts of Mayhem-Update verschwindet die Obfuskation; zur Kompatibilität mit bestehenden Tools werden obfuskierte und deobfuskierte Versionen eine Zeit lang parallel veröffentlicht
- Durch diese Änderung sollen Mod-Entwicklung, Code-Analyse, Auswertung von Crash-Logs und Bugfixing deutlich einfacher werden
Die Geschichte der Minecraft-Code-Obfuskation
- Java Edition nutzte seit den frühen Veröffentlichungstagen Obfuskation zum Schutz des Quellcodes
- Klassen-, Funktions- und Variablennamen im Code wurden absichtlich in bedeutungslose Zeichenfolgen umgewandelt und nicht offengelegt
- Dadurch mussten Modder die Rolle jedes Code-Elements manuell analysieren
- Seit 2019 veröffentlichte Mojang zur Abmilderung Obfuskations-Mapping-Dateien (obfuscation mappings)
- Diese Mapping-Listen verbanden obfuskierte Namen mit ihren ursprünglichen, bedeutungsvollen Namen
- Dadurch wurde es für Modder einfacher, die Codestruktur zu verstehen, es blieb jedoch weiterhin ein Zwischenschritt nötig
Entscheidung zur Entfernung der Obfuskation
- Mojang hat beschlossen, die Obfuskation selbst zu entfernen und damit den Zwischenschritt vollständig zu beseitigen
- Gilt ab dem ersten Snapshot nach der vollständigen Veröffentlichung von „Mounts of Mayhem“
- Künftig werden in allen Versionen Code mit ursprünglichen Namen für Variablen, Felder und Klassen standardmäßig bereitgestellt
- Entwickler und Modder erhalten damit direkten Zugang zum Code und können ihn unmittelbar anpassen
- Dies wird als Maßnahme verstanden, die Offenheit der Java Edition zu erhöhen und die Hürden im Mod-Ökosystem zu senken
Übergangsphase für Modder
- Mojang richtet mit Blick auf Kompatibilitätsprobleme bestehender Tools eine Übergangsphase ein
- Ab dem nächsten Snapshot wird zusätzlich eine deobfuskierte experimentelle Version (experimental release) veröffentlicht
- Modder können ihre Tools und Workflows vorab an der neuen Codestruktur testen
- Nach der vollständigen Umstellung soll die bisherige obfuskierte Version eingestellt werden
- Die erste vollständig deobfuskierte Version ist der erste Snapshot nach der Veröffentlichung von Mounts of Mayhem
Ziel der Änderung
- Mojang erklärt, „Modding ist ein Kernbestandteil der Java Edition“, und dass die Obfuskation dieses Wachstum behindert habe
- Ohne komplexe Code-Entschlüsselung werden Erstellung, Updates und Debugging von Mods schneller möglich
- Durch die bessere Lesbarkeit von Crash-Logs soll auch die Problemlösung schneller werden
- Auch Zusammenarbeit und Lernprozesse unter Moddern dürften einfacher werden
Lizenz- und Rechtsrichtlinien
- Diese Änderung hat keine Auswirkungen auf die EULA oder die Usage Guidelines
- Minecraft- und Mod-Entwickler müssen diese Regeln weiterhin einhalten
- Jede jar-Datei enthält eine LICENSE-Datei mit direktem Verweis auf die EULA
- Weitere Änderungen in Zukunft:
- Entfernung der Obfuskations-Mapping-Informationen aus der Versions-
.json
- Sowohl Client- als auch Server-jar-Dateien werden deobfuskiert bereitgestellt
- Jede jar enthält eine neue LICENSE-Datei
Ausblick
- Mojang bezeichnet dies als „Übergang in eine transparente Zukunft“ und will aktiv Feedback aus der Community sammeln
- Die Aufhebung der Obfuskation ist eine der offensten Veränderungen der Entwicklungsumgebung in der Geschichte von Minecraft Java Edition; erwartet werden eine Beschleunigung des Wachstums des Mod-Ökosystems und ein größerer pädagogischer Nutzen
1 Kommentare
Hacker-News-Kommentare
Erstaunlich, dass Minecraft zwar eine so starke Modding-Community hat, Entwickler aber trotzdem mit dekompilierten, obfuskierten Java-Binärdateien arbeiten mussten
Ihre Hingabe ist beeindruckend: Über mehr als zehn Jahre haben sie immer wieder deobfuskiert und reobfuskiert und dabei ihre Tools weiterentwickelt
Es war eindrucksvoll, wie er wie ein Hacker aus Matrix auf Hexzahlen starrte und Zeichen für Zeichen änderte
Bei Java ist das aber ohnehin relativ leicht zu dekompilieren; die eigentliche Hürde ist weniger die Obfuskation als die Komplexität objektorientierter Strukturen
Man muss sie also nicht mehr wie früher in der Community selbst erstellen
Es reichte, die VM-Struktur und das Konzept von Objektdispatch zu kennen
Die frühe Minecraft-Modding-Community war wirklich ein großartiger Ort und eines der prägendsten Coding-Erlebnisse, die ich hatte
Umso überraschender war, dass dieses Ökosystem größtenteils durch Reverse Engineering entstanden ist
Spiele wie Minecraft, Roblox, Geometry Dash und Trackmania sind Beispiele für Erfolg durch die Stärke der Community
Wenn die Engine geschlossen ist oder die Entwicklung schwierig, ist Wachstum schwer — wie bei Vision Pro oder dem Metaversum
Eine Community entsteht nur, wenn Hobbyentwickler und kleine Nutzergruppen leicht mitmachen können
Am Ende ist aber vor allem wichtig, dass das Spiel selbst gut ist
Wenn die Community wächst, fängt ein Teil davon ganz natürlich mit dem Modding an
Richard Burns Rally etwa war ursprünglich gar nicht für Modding gedacht, doch Fans haben Autos, Strecken und sogar Online-Funktionen hinzugefügt
Bei der Voxel-Engine Luanti sieht man ein ähnliches Phänomen
2006 konnte man kostenlos sofort Tausende 3D-Multiplayer-Spiele starten, inklusive zerstörbarer Gebäude und verformbarem Terrain
Das war für die damalige Zeit revolutionär, und genau diese einfache Zugänglichkeit half später dabei, den Kindermarkt zu dominieren
Schon in der Alpha war das Singleplayer-Erlebnis hervorragend, und die Balance zwischen Survival und Kreativität war perfekt
Schon damals machte es Umsätze in Millionenhöhe
Kaum jemand möchte ein teures VR-Headset tragen
Unity, Unreal und Godot unterstützen VR alle gut
Das Problem ist, dass es zu wenige Nutzer im Verhältnis zu den Entwicklungskosten gibt
Man muss Zugänglichkeit, UX, Motion Sickness und vieles mehr berücksichtigen, wodurch die Entwicklung viel teurer wird
Schon Untertitel in einer 6DoF-Umgebung darzustellen, ist schwierig
Die Obfuscation Mappings, die Mojang 2019 veröffentlicht hat, waren eine Liste zum Auflösen obfuskierter Namen
Dadurch mussten Modder nicht mehr bei jedem Codefragment raten, aber es bleibt die Frage, warum nur die Hälfte veröffentlicht wurde
Ich frage mich, ob Minecraft Java Edition irgendwann als Open Source auf GitHub veröffentlicht wird
Es würde sich wahrscheinlich wie Skyrim auf praktisch jeder Plattform weiterverkaufen
Die Spieldateien lassen sich außerdem kostenlos von Microsoft-Servern laden, daher wirkt es nicht so, als würde eine Open-Source-Veröffentlichung großen Schaden anrichten
Archiv der damaligen Webseite
Die künstlerischen Assets blieben weiterhin urheberrechtlich geschützt
Ich arbeite inzwischen lieber an Luanti
Man kann dort per Modding fast dieselbe Erfahrung wie in Minecraft umsetzen, und es gibt auch Spielmods wie VoxeLibre
Auch der Quellcode der in Lua geschriebenen Mods ist größtenteils offen zugänglich
Besonders Zoonami ist interessant, weil es ein Pokémon-ähnliches Spielerlebnis bietet
Minecraft lässt sich ohnehin schon leicht raubkopieren, daher wäre der Schaden durch eine Offenlegung des Quellcodes wahrscheinlich gering
Die meisten behalten ihren legitimen Account, um Mojangs Authentifizierungsserver zu nutzen
Das Projekt ist sogar groß genug, dass auch eine Open-Source-Freigabe mit nichtkommerzieller Einschränkung denkbar wäre
Die aggressive Obfuskation von Proguard macht Code schwer verständlich, indem Klassennamen stark verfremdet und sogar Inlining eingesetzt wird
Insofern ist dieser Schritt ein großer Fortschritt
Gute Nachrichten! Für die Minecraft-Modding-Community eröffnen sich neue Möglichkeiten
Die communityerstellten Mappings standen unter einer freien Lizenz, Microsofts Mappings dagegen nicht
Das könnte eine Art Falle gewesen sein
Wenn man es wirklich einfacher machen will, wäre es wohl am besten, den Quellcode unter einer moddingfreundlichen Lizenz zu veröffentlichen