- Mojangが Minecraft: Java Editionの難読化を完全に廃止すると発表
- 難読化はゲーム業界で一般的なセキュリティ慣行だったが、コードのアクセス性や Mod 開発に制約を与える要素でもあった
- これまではクラス名・関数名・変数名がすべて難読化されており、Mod 開発とデバッグが複雑だったが、今後は 元のコード名を含むビルドが提供される
- Mounts of Mayhemアップデート後の最初のスナップショットから難読化がなくなり、既存ツールとの互換性のため、しばらくは 難読化版と非難読化版を並行配布する
- この変更により、Mod 開発、コード解析、クラッシュログの解釈、バグ修正がさらに容易になると期待される
Minecraftコード難読化の歴史
- Java Editionはリリース初期から ソースコード保護のための難読化を使ってきた
- コード内部のクラス名、関数名、変数名は意図的に 意味のない文字列へ変換され、公開されていなかった
- そのため、Modderたちは各コードの役割を手作業で分析する必要があった
- 2019年からMojangはこれを緩和するため、obfuscation mappings を公開
- 難読化された名前を本来の意味を持つ名前へ対応付けるマッピングリストを提供
- これによりModderはコード構造を理解しやすくなったが、それでもなお中間工程は残っていた
難読化廃止の決定
- Mojangは 難読化そのものを廃止し、中間工程を完全になくすことを決定
- “Mounts of Mayhem” の正式リリース後、最初のスナップショットから適用
- 今後のすべてのバージョンで、変数名・フィールド名・クラス名など元の名前を含むコードが標準提供される
- 開発者とModderは 直接的なコードアクセスと修正が可能になる
- これはJava Editionの開放性を高め、Modエコシステムの障壁を下げる措置と受け止められる
Modder向けの移行段階
- Mojangは 既存ツールの互換性問題を考慮し、移行期間を設ける
- 次のスナップショットから 非難読化の実験版 (experimental release) もあわせて配布
- Modderは新しいコード構造に合わせて ツールとワークフローを事前テストできる
- その後、完全移行時には既存の難読化版は終了予定
- 最初の完全非難読化バージョンは Mounts of Mayhemリリース後の最初のスナップショット
変更の目的
- Mojangは「ModdingはJava Editionの中核」とし、難読化がその成長を妨げていたと説明
- 複雑なコード解読なしに、より迅速な Mod制作・更新・デバッグ が可能になる
- クラッシュログの可読性向上により、問題解決の速度も改善
- Modder同士の協業や学習プロセスも簡素化される見込み
ライセンスおよび法的ガイドライン
- 今回の変更は EULAやUsage Guidelinesには影響しない
- 引き続きMinecraftおよびMod制作者は該当規定を遵守する必要がある
- 各 jar ファイルにはEULAへ直接リンクする LICENSEファイル が含まれる
- 今後の変更点:
- バージョン
.json から 難読化マッピング情報を削除
- クライアント/サーバー jar ファイルの両方を非難読化状態で提供
- 各 jar に 新しい LICENSEファイルを同梱
今後の方向性
- Mojangはこれを「透明な未来への移行」と表現し、コミュニティフィードバックを積極的に集める予定
- 難読化の解除はMinecraft Java Editionの歴史における 最もオープンな開発環境の変化 であり、
Modエコシステムの成長加速と教育的価値の拡大が期待される
1件のコメント
Hacker Newsの意見
Minecraftがこれほど強力なモッドコミュニティを持つゲームでありながら、開発者たちが難読化されたJavaバイナリをデコンパイルして作業していたのは驚き
10年以上にわたって難読化解除と再難読化を繰り返しながらツール群を発展させてきた彼らの献身はすごい
まるで映画 Matrix のハッカーのように16進数を見ながら1文字ずつ書き換えていた姿が印象的だった
ただしJavaはもともとデコンパイルが容易なので、本当の障壁はコード難読化よりもオブジェクト指向構造の複雑さにある
昔のようにコミュニティが自前で作って使う必要はない
VMの構造とオブジェクトディスパッチの概念さえ分かれば十分だった
初期のMinecraftモッディングコミュニティは本当に楽しい場所で、私が経験したコーディングの中でも最も記憶に残る瞬間の一つだった
ところが実際には、その大半がリバースエンジニアリングによって作られた生態系だったと知って驚いた
Minecraft、Roblox、Geometry Dash、Trackmaniaのようなゲームはコミュニティの力で成功した事例
エンジンが閉鎖的だったり開発が難しかったりすると、Vision Proやメタバースのように成長しにくい
趣味の開発者や小規模なユーザーが気軽に参加できてこそコミュニティが生まれる
だが最終的に重要なのは『良いゲーム』そのもの
コミュニティが大きくなれば、その一部が自然とモッディングを始める
たとえばRichard Burns Rallyはもともとモッディングを想定していなかったが、ファンが車、コース、オンライン機能まで追加した
voxelエンジン Luanti でも似た現象が見られる
2006年に無料で数千本の3Dマルチプレイゲームを即座に起動でき、建物の破壊や地形変形も可能だった
当時としては革新的で、その単純なアクセスしやすさが最終的に子ども市場を制した
アルファ版の時点からシングルプレイ体験が素晴らしく、サバイバルと創造性のバランスが完璧だった
すでにその頃から数百万ドルの売上を上げていた
高価なVRヘッドセットをかぶりたい人はほとんどいない
Unity、Unreal、GodotはいずれもVR対応が優れている
問題は開発コストに対してユーザー数が少ないという点
アクセシビリティ、UX、酔い対策など考慮すべきことが多く、開発ははるかに高コストになる
たとえば6DoF環境で字幕を表示するだけでも難しい
Mojangが2019年に公開したobfuscation mappingsは、難読化された名前を解読するためのリストだった
そのおかげでモッダーたちは、もはやすべてのコードを推測する必要がなくなったが、なぜ半分しか公開しなかったのかは疑問
いつかMinecraft Java EditionをGitHubでオープンソース公開するのか気になる
Skyrimのように、どのプラットフォームでも売れ続けそうだ
ゲームファイルもMicrosoftのサーバーから無料で取得できるので、オープンソース化しても損はなさそう
当時のウェブページのアーカイブ
アート資産は引き続き著作権で保護される
私は最近 Luanti で作業するほうを好んでいる
Minecraftとほぼ同じ体験をモッドで実現でき、VoxeLibre のようなゲームモッドもある
Luaで書かれたモッドのソースコードも大半が公開されている
特に Zoonami はポケモンのようなゲーム体験を提供していて興味深い
Minecraftはすでに海賊版が容易なので、ソース公開による損害はほとんどないと思う
ほとんどの人はMojangの認証サーバーを使うために正規アカウントを維持している
非営利条件付きのオープンソース化すら可能なほど規模が大きい
Proguardの攻撃的な難読化は、クラス名を複雑に変え、インライン化まで行ってコードを理解しにくくする
今回の措置はその点で大きな前進
良い知らせ! Minecraftモッディングコミュニティに新たな可能性が開かれる
コミュニティが作ったマッピングは自由ライセンスだったが、Microsoftのマッピングはそうではない
一種の罠かもしれない
本当にもっと簡単にするなら、モッディングを許可するライセンスでソースコードを公開するのが最善だと思う