世界を動かす技術を、日本語で。

MinecraftのJava Editionでの難読化の解除

概要

  • Minecraft: Java Edition のコード難読化が完全廃止
  • 今後のバージョンでは オリジナルの名前 がそのまま提供
  • MOD開発・デバッグの効率化 が実現
  • 移行期間中は 両バージョン を提供
  • EULAや利用規約 には変更なし

Minecraft: Java Edition 難読化廃止によるMODコミュニティへの影響

  • Java Edition のコード難読化を完全に廃止決定
  • Mounts of Mayhem リリース後の最初のスナップショットから適用
  • 以降のビルドでは、 変数名やクラス名など本来の技術名 が全てデフォルトで含まれる仕様
  • MOD制作・アップデート・デバッグ の容易化
  • クラッシュログの可読性向上 によるトラブルシュートの効率化

難読化の歴史と過去の対応策

  • Java Edition はリリース当初から難読化を採用
  • ソースコードの内容を隠す目的で、 クラスや関数名などが判別不能
  • 2019年より「 obfuscation mappings」を公開し、難読化名と本来名の対応表を提供
  • これにより、MOD開発者の作業負担が一部軽減

今回の変更理由とMOD開発者への影響

  • MOD開発の中心的存在 であるJava Editionの特性を重視
  • 難読化廃止により、 開発・保守・デバッグの効率大幅向上
  • 既存のMODツール は難読化前提のものが多いため、移行期間を設けて対応を支援
  • 次回スナップショットから、 難読化版と非難読化版を並行提供
    • MOD開発者は新旧両バージョンでツールやフローの検証が可能

MOD開発者が今後注目すべき点

  • .json形式の難読化マップ は今後不要
  • クライアント・サーバー両方の.jarファイル が非難読化
  • 全.jarファイルに LICENSEファイル が追加
    • LICENSEファイルには EULAへのリンク を明記

EULA・利用規約について

  • EULAやMinecraft利用ガイドライン には変更なし
  • 全てのMODやJava Editionに引き続き適用
  • 透明性向上 のため、jar内にLICENSEファイルを新設

今後の展望とフィードバックのお願い

  • MOD開発者・コミュニティからのフィードバック を広く募集
  • 透明性と開発効率の新時代 への移行を推進
  • 最新情報やアップデートは Minecraft公式ニュース で随時公開

Hackerたちの意見

マインクラフト、ロブロックス、ジオメトリーダッシュ、トラックマニア…これらのゲームはコミュニティのおかげで成功したんだよね。一人では、普通のプレイヤーにはあまり魅力がないけど、クリエイティブなプレイヤーが面白いものを作って、みんなを惹きつけるんだと思う。Vision Proやメタバースが苦戦してる理由の一つは、エンジンが悪いからだと思う。単に制限されてるだけじゃなくて、開発も難しいしね(個人的な経験はないけど、VR全般についてそう聞いたことがある)。コミュニティを作りたいなら、趣味でやってる人や小規模なユーザーが開発しやすい環境を整える必要があるよ。これって大手企業にも当てはまると思う、上の例がその証拠だね。* ただし、既存の評判も必要だから、小さな会社は良いエンジンがあってもコミュニティを築くのが難しいんだよね。

もう一つの理由は、誰もメタバースを求めていないし、アクセスするために面白い帽子に大金を使いたくないってことだね。

ビジョンプロとメタバースが苦戦してる理由の一つは、エンジンが悪いからだと思う。単にロックされてるだけじゃなくて、開発が難しいっていうのも聞いたことがある(個人的な経験はないけど、VR全般についてそういう話はよく聞く)。コミュニティを作りたいなら、趣味でやってる人や小規模なユーザーが開発しやすい環境を整えないとね。これって大手企業でも同じで、上の例がその証拠だと思う。今のユニティやUEはかなり良いVRサポートがあるし、ゴドットもそこに近づいてる。さらに、VR用のカスタムエンジンを作るのは、普通の3Dゲームを作るのとそれほど難しくないはずだよ(OpenXRみたいなAPIが標準化されればね)。今のVRの大きな問題は、普通のアプリやゲームより開発コストが高いのに、ユーザーが少ないこと。これじゃあ売り込みが難しいよね。インディー開発者には、まだ飽和していない市場で利益を上げるチャンスを与えてあげたい(今は良いマーケティングがないと、Steamや他のアプリストアで埋もれちゃうから)。コストがかかる要因はいくつもあって、ゲームのためにいくつかのモビリティやアクセシビリティ機能をサポートしなきゃいけない(例えば、スムーズな移動やジャンプ、視点を動かすときのFOVを減らすなど)、これって他のプラットフォームではあまり気にしなくていいことなんだよね。それにインタラクティビティの問題もある。UX(そして多くの面でUI)もまだ理想から遠い。ほとんどのVRアプリやゲームは試行錯誤してるけど、まだまだパターンや良いプラクティスを築く余地がある。これがVRを使うのを面倒にする要因になってる。特に、ある問題が特定のユーザーにとっては絶対に無理なこともあるからね。例えば、6DoF環境で字幕を表示するのは難しい。あるゲームでは視界の固定ポイントに字幕を置くけど、これが吐き気や読みづらさの原因になる。別のゲームでは頭や視点に合わせて動くけど、遅延があって、吐き気の問題は減るけど気が散るし、読みづらさもある(字幕が視界から外れちゃうことがある)。

フライトシミュレーターシリーズもリストに加えられるね。これは無料と商業用のアドオンがたくさんある広大なエコシステムを生んだ。だけど、大きな会社でも小さな会社でも、まず必要なのは良いゲームだと思う。エンジンは二の次だよ。ゲームの周りにコミュニティができると、その中で改造できるスキルを持ったメンバーのごく少数が重要になってくる。例えば、リチャードバーンズラリーは全くモッドを想定してなかったけど、ファンが新しい車やトラック、オンラインスコアボードを追加した。ルアンティのコミュニティ(ほぼ最初からモッド可能に設計されたボクセルゲームエンジン/プラットフォーム)でも似たようなことが見えてきてる。注目のゲームにはモッドがつくけど、そうじゃないゲームもある(前者のデフォルトゲームは特にそうで、良いゲームとは言えないけど、その地位のおかげでたくさんのモッドがあるし、それに基づいたゲームもそのエコシステムの恩恵を受けてる)。でも、みんな同じエンジンを使ってるんだよね(ロブロックスもその点では似てるかもしれないけど、ルアンティのようにゲーム全体を「具現化」してるかはわからない)。

メタクエストは開発がすごく簡単だよ。ソロ開発者からフルスタジオまで、いろんなクオリティのゲームがたくさんある。メタバースが失敗してる理由は、誰もそれを求めてないから。人々に押し付けても無駄なんだよね。VRゲーマーはゲームをプレイしたいだけで、「世界」で遊びたいわけじゃない。メタはこれに気づいてない。

どれも$0〜$20だったよ。ユーザーと開発者のコミュニティを築くのは、鶏と卵の問題みたいなもんだね。ゲームは限られたコンテンツで強いプレイヤーベースを築かなきゃいけないし、その後、十分に投資したゲーマーがクリエイターになる必要がある。実際に開発を成功させられる人も必要だけど、もっと大きな問題は、特別なハードウェアに$500〜$3500かかるプラットフォームでは、ユーザーが少ないから理由がないってことだと思う。

ロブロックスは、リリース当初から素晴らしいエンジンを持っていて、地形の破壊は今でも他に匹敵するものがないよね。2006年にはロブロックスのアプリをダウンロードして、すぐに何千もの3Dマルチプレイヤーゲームを無料でプレイできたんだ。完全に破壊可能な建物やダイナミックな地形もあったし。リモートコード実行からウイルスをもらうこともなかったし、当時は画期的だったよね。その頃はSteamをダウンロードして、カウンターストライクみたいな個別のゲームを買わなきゃいけなかったし、一番変わってたのは「サーフ」ゲームモードだったな。ほとんどのゲームはCDで買ってたし、手榴弾で建物を壊すなんてできなかったよね。セカンドライフやハボホテルと比べると、歩き回って人と話せるって感じかな?その周りにできたコミュニティが、最終的にはアメリカの子供たちのゲーム界を完全に支配することになったけど、「ボタンをクリックしてゲームに入って、ものを吹き飛ばす」って基本的な部分は、10年先を行ってたよね。あと、ブロックランドはお金がかかったけど、ロブロックスは無料だったし。

同意する!これ、よく見たよね。クエスト3の発売時には、X、Y、Zをする最初の会社になることが多かったけど、新機能がSDKにリリースされてから数ヶ月後だったから、ドキュメントがひどくて(しばしば矛盾もしてたし)。デモの使用例から少しでも逸れると、シシフォスのように感じることが多かった。すごく近いけど、山を越えられないって感じ。特定のケースではマーケティングには良かったけど(最初になるのは)、ビルダーたちのコミュニティには悪影響だったよね。

マインクラフトについてはちょっと意見が違うな(そのリストの中で唯一やったゲームだから)。アルファ版の時に買ったけど、その時からシングルプレイの体験が素晴らしくて、すっかりハマったよ。15年以上前のことなのに、今でも鮮明に覚えてる。クリエイティビティとサバイバルのバランス(それにクリーパーもね)が完璧だった。これを言うのは俺だけじゃないと思う。確か、アルファの時点で何百万ドルも稼いでたはず。

バルブはモッディングがなかったら今のようには存在してなかったと思う。カウンターストライクの人気が初期の購入をたくさん生んだおかげで、バルブは出版社からのプレッシャーを受けずに自分たちのペースで物事を進められるようになったんだよね。

フォートナイトは何年も前からゲームというよりプラットフォームを目指してるよね。(エピックゲームズストアもそうで、ゲームを選ぶ前に一回起動しないといけないのがマジで面倒。)「クリエイティブ」マップがフォートナイトの成功にどれくらい貢献してるのか、1stパーティーや2ndパーティーの開発した体験と比べて気になるな。

でも、私たちはマインクラフトの中でも、マインクラフトを使ってクリエイティブになってほしいと思ってるから、2019年にはこの面倒なプロセスを少しでも楽にするために「難読化マッピング」をリリースしたんだ。このマッピングは、難読化された用語を元の用語に合わせるための長いリストみたいなもので、これによってモッダーたちは何がどうなってるのか、何と呼べばいいのかを考えなくて済むようになったんだ。でも、そこで止まる必要はなかったんじゃない?本当に、最初からこの中途半端な対策をする意味があったのかな?

予想だけど、法務チームは難読化解除の話が出た瞬間に頭が溶けそうになったんじゃないかな。

多くのモッドツールは、そういったAPIの難読化された名前やコミュニティ名を元に作られてるんだ。

マッピングは、難読化されたクラスやメソッドのサブセットだけだったのかな?要するに、マッピングを一種の公開APIにしてるってこと?

もしかしたら、もっと簡単だったのかも?法律的な理由もあったかもしれないし。

JavaエディションをGitHubでオープンソースにすることはないのかな。人々はスカイリムと同じように、リリースされるプラットフォームごとにマインクラフトを買うと思うよ。

ドゥームみたいに、もっと多くのゲームがオープンソースになればいいのに。アートアセットはまだ著作権があるから影響はないしね。

あなたが探してるのはMinetestやLuantiかもしれないね。

彼らがそうしない理由はないよ。アカウント認証に「名誉システム」を使ったオープンソースのランチャーはすでに確立されているし、標準化されてる。認証をコメントアウトするのは簡単だし、MicrosoftのサーバーからはアカウントなしでJARやアセットをダウンロードできる。お金を払わずに手に入れるのは簡単なゲームだから、エンジンをオープンソースにするデメリットはないと思う。

2010年にノッチはこう約束したんだ。> 「売上が落ち始め、一定の時間が経ったら、ゲームのソースコードを何らかのオープンソースとして公開する。」

俺の理解では、マインクラフトの初期ベータ時代に、モッドがJARに埋め込まれてゲームの海賊版ができるのを避けるために難読化が追加されたんだ。これが何年も面倒だったけど、モッディングシーンが大きくなってきたから、少しでもモッドがやりやすくなればいいな。

ルアンティ(以前のミネテスト)での開発が好きだな。モッドをダウンロードすることで、ほぼマインクラフトの体験ができるよ。あるいは、VoxeLibreのゲームモッドを使うこともできる。https://content.luanti.org/packages/Wuzzy/mineclone2/ モッドはLuaで書かれていて、ほとんどのソースコードが見つかるよ。俺が好きなのはZoonamiで、ポケモンみたいなゲーム体験に変えてくれる。https://content.luanti.org/packages/isaiah658/zoonami/

ズーナミは、タクセモンが達成できなかったことを成し遂げるだろう。

https://github.com/luanti-org/luanti

マインクラフトが、こんなに強力なモッドコミュニティを持っていて、モッダーたちが難読化されたデコンパイル済みのJavaバイナリを使って作業しているなんて、すごいことだよね。しかも、同じ名前を使って難読化を解除したり再度難読化したりするための elaborate なツールも使ってるし。もう10年以上も続いてるんだよ!ほんと、献身的だよね。

俺もそう思ってた。ゲームにあまり詳しくなかったから、モッドは公式のプラグインシステムを使ってると思ってたんだ。マインクラフトのモッダーたち(たぶん子供やティーンエイジャー?)が、逆コンパイルだけじゃなくて、プロガードを回避するためのエコシステムを作ってるなんて全然知らなかったよ。

マインクラフトのモッドが怪しいダウンロードサイトから配布されていて、時々自分のWindows EXEインストーラーが付いてくるのが怖いよ。知ってる限り、ゲーム内には全くサンドボックスがないから(あ、ダジャレじゃないよ)、一度インストールしたらモッドがコンピュータに完全にアクセスできちゃうんだよね?

ソースコードがなくてもソフトウェアを改造できるっていう証拠がまた一つ。とはいえ、Javaは常にデコンパイルが簡単だったし、個人的には理解の最大の障害は、大規模なコードベースに内在する「オブジェクト指向の難読化」だと思う。オリジナルのソースがあってもね。

公平に言うと、2019年からモヤングはマッピングを提供してくれるようになったから、みんながコミュニティが作ったものを使う必要がなくなったんだよね。

コミュニティの難読化マッピングは無制限にライセンスされてるけど、マイクロソフトのはそうじゃない。これは罠だよ。

変数名に著作権は適用されるの?

もっと簡単にする方法があるよ。それは、モッディングを許可するライセンスでソースコードを公開することだね。

ソースを公開しても、あんまり影響ないと思うよ。マインクラフトは簡単に海賊版が作れるし、みんなが何かにお金を払う理由は、モヤングの認証サーバーのアカウントが必要だから(いろんな理由で移動したくない人が多い)。それに、オープンソースにしても、他の会社がそのコードを使って利益を上げるのを禁止する条項をつければいいだけだし。もう大きすぎて潰れないよ。

もしかしたら、将来的にjavadocのjarファイルを公開するかもね!