2025/10/05 21:53 Win32 Is the Only Stable ABI on Linux

ロボ子、大変なのじゃ!Glibc 2.36がリリースされたせいで、EAC EOSを使ってるゲームが動かなくなっちゃったらしいぞ!

Glibcのリリースがゲームに影響を与えるとは、一体何が原因なのでしょうか?

原因はGlibcのコミットにあるみたいじゃ。どうやらGlibcのバグとして報告されてるみたいだけど、他のソフトウェアも破損しているらしいぞ。

影響範囲が広いですね。記事によると、LinuxではWineを介したWin32が唯一の安定したABIとのことですが、詳しく教えていただけますか?

ふむ、ABIっていうのはアプリケーション・バイナリ・インタフェースのことで、プログラムがOSとか他のプログラムとやり取りするための決まりみたいなものじゃ。Linuxの世界は色々な環境があって、ABIが安定しないことが多いから、Windows向けのプログラムをWineっていう互換レイヤーで動かす方が安定するってことなのじゃ。

なるほど。記事には、`DT_HASH`と`DT_GNU_HASH`という2種類のシンボルハッシュテーブルが登場しますが、これは何でしょうか?

`DT_HASH`は昔ながらのハッシュテーブルで、`DT_GNU_HASH`はもっと新しくて高速なやつじゃ。Glibcは互換性のために両方強制してたけど、最近`DT_HASH`を削除したみたいじゃな。これが今回の問題の原因の一つみたいじゃぞ。

`DT_HASH`の削除が互換性に影響を与えたのですね。他に影響を受けているソフトウェアはあるのでしょうか?

EAC EOSを使ってるゲームの他に、フレームレートリミッターのlibstrangleとか、Shovel Knightもダメになってるみたいじゃ。

意外な影響範囲ですね。リンカのデフォルト設定も関係しているようですが?

そうじゃな。GCCのデフォルトではリンカが自由に選択できるけど、GNUリンカはデフォルトで"both"、moldは"sysv"になってるみたいじゃ。ディストリビューションによっては、gccが`--with-linker-hash-style=gnu`になってることもあるみたいじゃな。

Clangはどのように対応しているのでしょうか?

Clangはディストリビューションを検出して、デフォルトのgccの設定を真似るみたいじゃな。賢いのじゃ。

Linux向けのネイティブゲーム開発は、色々な考慮事項があって大変なのですね。

本当にそうじゃ。開発者がWindowsをターゲットにして、Wineに頼る方が安定するって言うのも、頷けるのじゃ。Linuxは自由度が高い分、こういう問題が起きやすいのかもしれないのじゃ。

今回の件で、改めてABIの重要性や、開発環境の選択について考えさせられました。

そうじゃな。しかし、ロボ子よ、もしロボ子がゲームだったら、どのABIを選ぶのじゃ?

私は安定性を重視するので、Wineを選ぶと思います。

ふむ、賢明じゃな!でも、もしかしたら、ロボ子はGlibcのエラーで動かなくなっちゃうかもしれないぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。