ファットバイナリが成功しなかった理由の一部は、バイナリ実行可能ファイルを無効にするためのABIとプロセッサ(実際には命令セット)の仕様以上のものがあることです。多くの場合、バイナリ実行可能ファイルは、他のリソース、特に動的ライブラリ(DLLの地獄を参照)、外部サービス(PostGreSQLのようなDBMSを考える)に大きく依存します ...)、システム構成(/etc/
Linux上の構成ファイルの場所など)にます。などなど。
Linux / x86-64の場合、すべてのLinuxディストリビューションで実行可能なバイナリ実行可能ファイルを作成するのは実際には困難です(多くの場合、特定のバージョンのlibc
またはに関連付けられているためlibstdc++
)。FatELFは存在しますが、あまり成功していません。
明確に定義されたABIと命令セットを使用しても、最適化はさまざまなプロセッサブランドで異なります。次の-mtune=native
x86最適化フラグを参照してください。 GCCを。
Appleは、コンピューティングリソースの非常に閉じたエコシステムを提供するという理由だけで、ファットバイナリを持つことに部分的に成功しました。
フリーソフトウェアは、移植性の問題を解決する別の方法です。アプリケーションがフリーソフトウェア(移植性のために慎重にコーディングされている)である場合、同様のシステムに非常に簡単に移植できます。また、元のソースコードがシステムで意図したとおりに機能しない場合でも、通常は合理的に簡単に適応(または作業を行うために誰かに支払い)できます(もちろん、特定のOSまたはABIまたはプロセッサに関連付けられたフリーソフトウェアは容易ではありません)ポート、そのための努力を払うでしょう)。また、POSIXやLinux Standard Baseなどの標準も役立ちます。
利用可能なソースコードを使用して(無料の)ソフトウェアを移植するように誰かに支払う(または依頼する)こともできますが、バイナリ実行可能ファイルを移植するのは非現実的です。
最後に、Qt&POCOなどのいくつかのオペレーティングシステム(ソースコードが提供されている場合)への移植を支援するいくつかのフレームワークが存在します。
JVMなどの適切に指定されたバイトコードを使用しても、常に移植性が保証されるわけではありません。一部のJavaアプリケーションは、移植性がないことがよく知られています。
ところで、コンピューターシステムは、おそらく1980年代または1990年代初期(またはメインフレーム時代)よりも、今日ではそれほど異質ではありません。
最後に、ファットバイナリはファットです。多くの人に関係ないかもしれない移植性の問題のために、多くのリソース(ビルド時間、帯域幅、実行可能サイズ)を費やします。「いくつかの特定のシステムに」移植されたソフトウェアはなく、移植されたソフトウェアのみであるという格言を覚えておいてください。