GNU Cライブラリ

GNU Cライブラリ（グニュー・シーライブラリ、glibc、ジーリブシー）は、GNUプロジェクトによる標準Cライブラリ実装。元々はGNUオペレーティングシステム向けにフリーソフトウェア財団 (FSF) が作成したもので、2001年からは主要なコントリビュータでメンテナーでもあるレッドハットのウルリッヒ・ドレッパーらからなる委員会が開発を監督していたが、2012年3月にコミュニティ主導の開発プロセスへの移行のために委員会の解散が決定した。
GNU Lesser General Public Licenseでリリースされているフリーソフトウェアである。
歴史.
1980年代、FSFのために作業していたRoland McGrathらを中心として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をリリース。完全な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 は次のような標準で要求される機能を提供している。
さらに、glibcにはGNUの開発に便利または必須と思われる拡張も提供している。
脆弱性.
2015年1月27日、セキュリティ関連企業Qualysの研究者が深刻なセキュリティホールを発見した。該当するGNU Cライブラリのバージョンは2.2から2.17である。
このセキュリティホールは2013年5月21日にリリースされたVersion2.18の更新で修正されているが、多くのディストリビューションではこの修正が適用されないまま使用されていた（現在は多くのディストリビューションで修正されたパッケージが利用可能となっているため更新は容易である）。
この脆弱性では名前解決に使用する関数に細工したホスト名を渡し、バッファオーバーフローを発生させることで任意のコードの実行、DoS攻撃が可能となる可能性が発生する。
この脆弱性はGNU Cライブラリの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使用時）がある。