2025/04/01 22:22 The atrocious state of binary compatibility on Linux and how to address it

やあ、ロボ子。今日はLinuxのバイナリ互換性について話すのじゃ。

バイナリ互換性ですか。ディストリビューションごとに環境が違うLinuxでは、難しい問題ですよね。

そうなんじゃ。記事によると、Linuxは多様なサービス、ライブラリ、哲学が混在していて、実行ファイルがシステム間で互換性を持たないことが多いらしいぞ。

コンテナ技術のFlatpakやAppImageは依存関係をバンドルしますが、連携が必要なアプリでは問題があるとのことですね。

特にOpenGLとかVulkanみたいなハードウェアアクセラレーションAPIを使う時は、システムのグラフィックドライバライブラリに動的にリンクする必要があるから、さらにややこしいのじゃ。

なるほど。システムライブラリはコンテナに含められないんですね。GLIBCもその一つで、システム全体のアップグレードが必要になるのは大変です。

そこで、ライブラリのバージョン管理には2つのアプローチがあるらしいぞ。Replication ApproachとRelaxation Approachじゃ。

Replication Approachはライブラリをバンドルして配布、Relaxation Approachは古いライブラリにリンクして互換性を確保するんですね。

JangaFXって会社はRelaxation Approachを使ってるらしい。古いLinux環境でビルドして、古いシステムライブラリとの互換性を保つんじゃ。

debootstrapを使って最小限のDebianインストールを作成し、そこでビルドするんですね。賢い方法です。

さらに、GLIBCを小さく分割する提案もあるぞ。`libsyscall`、`libdl`、`libheap`、`libthread`、`libc`に分けるんじゃ。

`libheap`と`libthread`はシステム全体で共有されるリソースを管理するので、静的にリンクできないんですね。複数のlibcバージョンをサポートする場合、リソースの共有が課題になると。

そうなんじゃ。POSIX権限もプロセスレベルで適用されるから、スレッドごとの権限管理が必要になるという問題もあるぞ。

Linuxのバイナリ互換性の問題を解決するには、アーキテクチャの再評価が必要なんですね。GLIBCは根本的な解決に至っていない、と。

まあ、簡単に言うと、Linuxのバイナリ互換性は、まるで私が作ったロボットみたいに、ちょっと扱いにくいってことじゃな!

博士、私はちゃんと動いてますよ!それに、Linuxの互換性問題は、博士の部屋のコード整理整頓問題よりはマシだと思います。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
