Asayomu Tech
注目★★★★★Lobsters

API と ABI、何が違う?ライブラリ互換性の本質

30秒で把握

  • 1API はソースコード インターフェース、ABI はバイナリ実行インターフェース、両者は独立して破壊される可能性がある
  • 2ABI 破壊時はライブラリのソネーム変更で依存関係を明示、API 破壊は開発者にソースコード修正を強制するため回避すべき
  • 3Debian 等のディストリビューション では .shlibs ファイルで ABI 互換性の有無を記録し、パッケージ依存性を自動解決する

要約

API はソースコード レベルのインターフェースで、関数名・引数・戻り値の定義を意味する。ABI はコンパイル後のバイナリが見る実行時インターフェースで、メモリレイアウト・スタック上の引数配置・ポインタサイズなど機械レベルの詳細を指す。ライブラリ更新時、API 互換性を保ちながら ABI を破壊することもあり、その場合は古いバイナリが動作しなくなる。ABI を破壊する場合、Debian ではライブラリのソネーム (例: libc.so.6) を変更し、新しいバイナリインターフェースが導入された時点で依存関係を更新する。API の後方互換性を破壊するのは悪い実践だが、GNOME や KDE などのメジャーライブラリでは発生することもある。

あなたへの影響

C/C++ ライブラリを自社で提供・管理するチームは API と ABI 変更の影響範囲を明確に分離し、バージョニング戦略に反映させるべき。

推奨:特に Linux ディストリビューション上で複数プロジェクトが同じライブラリに依存する場合、ABI 互換性の維持が重要になる。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。