第17章 コンパイラーおよび開発ツール

以下の章では、コンパイラーおよび開発ツールに関する RHEL 8 と RHEL 9 の間の最も重要な変更点を説明します。

17.1. glibc の主な変更

すべてのスレッド API が libc.so.6 に統合されました

RHEL 8 では、システムスレッドライブラリー libpthread.so は個別のライブラリーでした。RHEL 9 では、すべてのスレッド API がコア C ライブラリー libc.so.6 に統合されました。スレッドをコア C ライブラリーに移動すると、ライブラリーはデフォルトでスレッドをサポートできるようになります。単一のファイルを使用すると、スレッド API とコア C、POSIX、および BSD API がすべて同時に更新されるため (個別のライブラリーはありません)、インプレースアップグレードプロセスもスムーズになります。

開発者は、スレッド化されたアプリケーションをリンクする際に、これまでどおり -lpthread オプションを使用できますが、これは不要になりました。

これまで、ライブラリーは pthread_create または pthread_cancel への弱い参照を使用して、プロセスがマルチスレッド化される可能性があるかどうかを検出していました。libpthread.so がコア C ライブラリーに含まれたことで、このチェックは常に成功するようになったため、ライブラリーは代わりに __libc_single_threaded シンボルを使用する必要があります。

libdl ライブラリーは libc.so.6 に統合されました

RHEL 8 では、libdl ライブラリーは個別のライブラリーでした。RHEL 9 では、libdl ライブラリーがコア C ライブラリー libc.so.6 に統合されました。つまり、dlsym 関数の干渉がより困難になりました。シンボル解決が機能する仕組みを制御する必要があるアプリケーションを、auditors (LD_AUDIT) インターフェイスに切り替える必要があります。

dns および file 用の Name Service Switch サービスプラグインが、libc.so.6 に統合されました。

RHEL 8 では、ユーザーおよびグループの ID 管理 API にデータを提供する files および dns の Name Service Switch (NSS)サービスは、異なるプラグインでした。RHEL 9 では、プラグインはコア C ライブラリー libc.so.6 に統合されました。filesdns サービスプロバイダーを移動すると、NSS filesdns アクセスサービスがプロセスの起動時に常に読み込まれることを認識して、マウント名前空間の境界を越える必要があるアプリケーション (コンテナーに入るなど) を実行できます。

files または dns を参照する nsswitch.conf に依存するユーザーおよびグループ API を呼び出す場合、開発者はこれらのサービスが常に存在し、基礎となるサービスデータを提供すると想定できます。