GNU Cライブラリ (glibc) について
GNU C
ライブラリ(glibc、ジーリブシー)は、
GNUプロジェクトによって開発された標準C
ライブラリの実装です。
フリーソフトウェア財団(FSF)によって初期開発が行われ、その後、
レッドハットのウルリッヒ・ドレッパー氏らを中心とする委員会が開発を監督しました。2012年3月からは、コミュニティ主導の開発プロセスへと移行しています。
歴史
1980年代、ローランド・マクグラス氏らの手によってglibcの開発が始まりました。1988年2月には、FSFがglibcがANSI Cの要件をほぼ完全に満たしていると発表しました。1992年には、ANSI C-1989とPOSIX.1-1990に対応し、POSIX.2への対応も進められました。
一時的なフォーク
1990年代初頭、
Linuxカーネル開発者たちはglibcの開発をフォークし、「Linux libc」と呼ばれるものが誕生しました。このフォークは数年間続き、バージョン2から5までリリースされました。しかし、1996年にFSFがglibc 2.0をリリースすると状況は変わります。glibc 2.0では、POSIX標準の完全サポート、優れた国際化/多言語サポート、
IPv6対応、64ビットデータアクセス、マルチスレッドのサポートなど、大幅な機能向上が図られました。この時点で
Linuxカーネル開発者たちはフォークを解消し、再びFSFのglibcを使用するようになりました。
Linux libcの最終バージョンは、内部での名称(soname)がlibc.so.5でした。glibc 2.xに引き継ぐ際、Linuxではsonameをlibc.so.6としました(AlphaおよびIA64アーキテクチャ向けはlibc.so.6.1)。このsonameはlibc6と略されることが多く、Debianの
パッケージ名などにも見られます。
リチャード・ストールマン氏によれば、Linux libcで行われた変更は著作権の状態が不明確であったため、glibcにはマージされませんでした。
GNUプロジェクトでは、著者と著作権の記録を厳密に行うことが原則とされています。
glibcは、多様な
カーネルや
ハードウェアアーキテクチャ上で利用されています。最も一般的なのは、x86
ハードウェア上の
Linuxカーネルを使用するシステムですが、公式にサポートされている
ハードウェアには、x86、モトローラ 680x0、DEC Alpha、
PowerPC、ARM、ETRAX CRIS、s390、
SPARCなどが含まれます。また、GNU Hurdと
Linuxカーネルが公式にサポートされている
カーネルです。さらに、多数のパッチを適用することで、FreeBSDや
NetBSD上でも動作するバージョンが存在します(Debian GNU/kFreeBSDやDebian GNU/
NetBSDなど)。また、
BeOSのlibrootとしても利用され、Haikuに引き継がれています。
機能
glibcは、以下の標準で要求される機能を提供しています。
- - Single UNIX Specification
- - POSIX (1c, 1d, 1j)
- - ISO C99で要求される機能の一部
- - BSDインタフェース
- - System V Interface Definition (SVID)
- - X/Open Portability Guide (XPG) issue 4.2
さらに、GNUの開発に有用または不可欠と思われる拡張機能も提供しています。
脆弱性
2015年1月27日、セキュリティ企業Qualysの研究者によって、深刻な
セキュリティホールが発見されました。これはglibcのバージョン2.2から2.17に影響するものでした。この脆弱性は、2013年5月21日にリリースされたバージョン2.18で修正されましたが、多くのディストリビューションでは修正が適用されないまま使用されていました。現在では多くのディストリビューションで修正された
パッケージが利用可能になっています。
この脆弱性を悪用すると、名前解決に使用される関数に細工された
ホスト名を渡すことで、バッファオーバーフローを引き起こし、任意のコード実行や
DoS攻撃が可能になる可能性があります。具体的には、gethostbyname関数やgethostbyname2関数を利用するソフトウェアに影響が及びます。2015年1月28日の時点では、メール転送エージェントであるEximがリモートから攻撃を受ける可能性があると確認されています。
小型機器などでの利用
glibcは、そのサイズや速度の面から、かつてはリーナス・トーバルズ氏や組み込みLinux
プログラマなどから批判されることもありました。そのため、メモリ使用量が少ない標準C
ライブラリ(Bionic、dietlibc、EGLIBC、Klibc、musl、Newlib、uClibcなど)が開発されてきました。gccでは、ターゲットがGNU/Linuxの場合、-mglibc、-muclibc、-mbionicで
ライブラリを切り替えることができます。
しかし、標準への適合性、機能の網羅性、各種サポートを考慮して、小型機器にもglibcを採用する例も多くあります。例えば、OpenMokoやiPAQ向けの
Familiar Linux(GPE使用時)などがあります。
関連項目
外部リンク