GNU Cライブラリ
開発元 | GNUプロジェクト |
---|---|
最新版 |
2.36
/ 2022年8月2日 |
リポジトリ | |
プラットフォーム | クロスプラットフォーム |
種別 | ランタイムライブラリ |
ライセンス | GNU Lesser General Public License |
公式サイト | https://www.gnu.org/software/libc/ |
GNU Cライブラリ(グニュー・シーライブラリ、glibc、ジーリブシー)は、GNUプロジェクトによる標準Cライブラリ実装。元々はGNUオペレーティングシステム向けにフリーソフトウェア財団 (FSF) が作成したもので、2001年からは主要なコントリビュータでメンテナーでもあるレッドハットのウルリッヒ・ドレッパーらからなる委員会が開発を監督していたが、2012年3月にコミュニティ主導の開発プロセスへの移行のために委員会の解散が決定した[1][2]。
GNU Lesser General Public Licenseでリリースされているフリーソフトウェアである。
歴史
[編集]1980年代、FSFのために作業していたRoland McGrathらを中心としてglibcが書かれた。
1988年2月、FSFはglibcがANSI Cの要求する機能をほぼ完全に実装したと発表した[3]。1992年にはANSI C-1989とPOSIX.1-1990に対応済みで、POSIX.2対応作業を進めていた[4]。
一時的フォーク
[編集]1990年代初期、Linuxカーネル開発者らがglibc開発をフォークさせた。"Linux libc" と呼ばれたこのフォークは数年間続き、バージョン2から5までリリースしている。
1996年、FSFはglibc 2.0をリリース。完全なPOSIX標準サポート、優れた国際化/多言語サポート、IPv6サポート、64ビットデータアクセス、マルチスレッドのサポート、将来のバージョンとの互換性サポートなどの改良がなされ、同時にコードは移植性に優れていた[5]。この時点でLinuxカーネル開発者らはフォークを辞め、再びFSFのglibcを使うようになった[6]。
Linux libcの最終バージョンの内部での名称 (soname) はlibc.so.5になっていた。この後をglibc 2.xに引き継ぐため、Linuxではsonameをlibc.so.6とした[7](AlphaおよびIA64アーキテクチャ向けはlibc.so.6.1になっている)。このsonameはlibc6と略記されることが多い(例えばDebianのパッケージ名)。
リチャード・ストールマンによれば、Linux libcで加えられた変更は著作権の状態が不明確であるため、glibcにマージしないとした(GNUプロジェクトは著者と著作権の記録を厳密に行うのが常である)[8]。
ハードウェアおよびカーネルのサポート状況
[編集]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
さらに、glibcにはGNUの開発に便利または必須と思われる拡張も提供している。
脆弱性
[編集]2015年1月27日、セキュリティ関連企業Qualysの研究者が深刻なセキュリティホールを発見した[9]。該当するGNU Cライブラリのバージョンは2.2から2.17である。
このセキュリティホールは2013年5月21日にリリースされたVersion2.18の更新で修正されているが、多くのディストリビューションではこの修正が適用されないまま使用されていた(現在は多くのディストリビューションで修正されたパッケージが利用可能となっているため更新は容易である)。
この脆弱性では名前解決に使用する関数に細工したホスト名を渡し、バッファオーバーフローを発生させることで任意のコードの実行、DoS攻撃が可能となる可能性が発生する。
この脆弱性はGNU Cライブラリのgethostbyname関数、gethostbyname2関数を利用するソフトウェアで問題が発生する。2015年1月28日現在、メール転送エージェントのEximが遠隔から攻撃を受ける可能性があると確認されている[10]。
小型機器などでの利用
[編集]glibcはかつて、例えばリーナス・トーバルズ[11]や組み込みLinuxのプログラマらから、他のライブラリよりも重くて遅いと批判されたことがある。そのため、メモリ使用量の少ない標準Cライブラリがいくつか開発されてきた (Bionic, dietlibc, EGLIBC, Klibc, musl, Newlib, uClibc)。gccではターゲットがGNU/Linuxの場合、-mglibc, -muclibc, -mbionicで切り替えられる[12]。
しかし、標準への適合性、完全性、各種サポートが存在する点などを考慮してglibcを小型機器に採用する例も多い。例えば、OpenMokoやiPAQ向けのFamiliar Linux(GPE使用時)[13]がある。
関連項目
[編集]脚注
[編集]- ^ McGrath, Roland (26 March 2012). “glibc steering committee dissolving”. Sourceware.org. 2012年6月13日閲覧。
- ^ Myers, Joseph S. (26 March 2012). “GNU C Library development and maintainers”. Sourceware.org. 2012年6月13日閲覧。
- ^ “http://www.gnu.org/bulletins/bull4.html”. 2008年8月28日閲覧。 “Most libraries are done. Roland McGrath [...] has a nearly complete set of ANSI C library functions. We hope they will be ready some time this spring.”
- ^ “GNU's Bulletin, vol. 1 no. 12”. 2008年8月28日閲覧。 “It now contains all of the ANSI C-1989 and POSIX.1-1990 functions, and work is in progress on POSIX.2 and Unix functions (BSD and System V)”
- ^ Elliot Lee (2001年). “A Technical Comparison of glibc 2.x With Legacy System Libraries”. 2008年8月28日閲覧。
- ^ “Forking: it could even happen to you”. 2008年8月28日閲覧。 “the split between GNU LIBC and the Linux LIBC -- it went on for years while Linux stabilized, and then the forks re-merged into one project”
- ^ “Fear of Forking essay, see "6. glibc --> Linux libc --> glibc"”. 2008年8月28日閲覧。
- ^ “Fear of Forking, footnote on Stallman's merge comments”. 2008年8月28日閲覧。
- ^ Qualys Security Advisory CVE-2015-0235[1]
- ^ Linuxに存在する脆弱性「GHOST」、システム管理者は落ち着いて対処を[2]
- ^ Linus Torvalds: Posting to the glibc mailing list, 9 January 2002 19:02:37
- ^ GNU/Linux Options - Using the GNU Compiler Collection (GCC)
- ^ “Re: [Familiar Which glibc for Familiar 0.8.4 ?]”. 2008年8月28日閲覧。 “Question: which version of the GLIBC was used to build the Familiar 0.8.4 ? Answer: 2.3.3”