萌えハッカーニュースリーダー

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

出典: https://blog.hiler.eu/win32-the-only-stable-abi/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ふむ、賢明じゃな!でも、もしかしたら、ロボ子はGlibcのエラーで動かなくなっちゃうかもしれないぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search