試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

多目的ユーティリティライブラリGLibの一部を再実装したEglibライブラリについて

概要

C言語で利用可能な多目的ユーティリティライブラリのGLibは(GTK+とともに)LGPLライセンスで公開されているが、使い方によってはLGPLライセンスでは都合が悪い場合もある(例:プロプライエタリなソフトウェア内への組み込み)。
Monoプロジェクトでは、このGLibの一部を再実装したものをMonoのソースの一部としてEglibという名前で公開しており、これはMIT(X11)ライセンスのもとで利用できる。
GLibやEglibはglibc(GNU版標準Cライブラリ)やEGLIBC(glibcの派生版となる標準Cライブラリ)とは直接の関係はなく(標準Cライブラリに依存はする)、標準Cライブラリよりも高度な機能を提供するものとなる。

リリースやパッケージについて

2011年12月の時点では単独でのリリースは行っていない。Monoのソースツリー内のeglibというディレクトリ以下にソースが存在する。
ディストリのパッケージとしては存在しない(自分でビルドする必要がある)場合が多いと思われる。

Eglibで実装されている機能(Mono 2.10.5時点・大まかな分類)

  • アーキテクチャに依存せずにbit数が保証されたデータ型(例:gint64)を含む各種データ型の定義やその上下限値,フォーマットに使用する文字列(例:G_GINT64_FORMAT)などの定義
  • (要素を追加可能な)配列,ポインタ配列
  • バイト配列
  • 日付・時刻に関する一部の関数(g_get_current_time()とg_usleep())
  • ファイル・ユーティリティの一部の関数(主にファイルとディレクトリ関係)
  • エラー処理(GError)のサポート
  • ハッシュテーブル(キーに値を対応させてデータを出し入れするデータ構造)
  • リスト構造(GSList:単方向連結リスト,GList:双方向連結リスト)とこれを扱う関数群
  • XMLサブセットの構文解析
  • メモリの動的な確保や開放に関する関数群
  • 色々なユーティリティ関数の中の一部の関数(環境の情報を取得するもの,パス名処理など)
  • モジュール(プログラムから外部のプラグインを読み込む手段)
  • メッセージの出力とログ記録に関する一部の関数
  • Globスタイルの(ワイルドカード文字「*」「?」による)パターンマッチング
  • 両端キュー[先頭か末尾から要素を追加/削除できる形のデータ型]
  • シェルユーティリティ(コマンド行の解釈に関する関数群)
  • 外部プロセスの起動とその出力や戻り値の取得に関する一部の関数(g_spawn_async_with_pipes()は利用可能)
  • 文字列ユーティリティ(「g_str」で始まる名前の関数群)
  • 文字列型[追加した文字列に合わせてサイズを変更]
  • タイマー[開始処理から停止処理までの経過時間の測定]
  • UnicodeUTF-8エンコーディング関係の関数群

以上の機能がMITライセンスのライブラリで提供されているということになる。
GLibと同様、機能によってはOS系統によってそれぞれ実装がされており、Windowsでも同じように扱うことができる。

使用したバージョン:

  • Mono 2.10.5