Bionic libc
読み:バイオニック-リブ-スィー
外語:Bionic libc
Androidで使われている標準Cライブラリ。
概要
AndroidはLinuxカーネルを用いているが、標準CライブラリはLinuxで一般的なglibc(GNU libc)ではなく、BSDのCライブラリを基にして開発された独自のものを用いている。
Bionic libcは、BSDライセンスで提供されている。
特徴
由来
Androidで独自の標準Cライブラリが採用した理由は二つある。
- コンパクト 一つは、メモリーの限られる携帯機器で多くのプロセスが利用するため、コンパクトで、高速なものが必要となったためとされる。
スレッド機能(pthread)など重そうな機能も、高速かつコンパクトな独自の実装となっているとされる。
- ライセンス もう一つは、GPLをユーザースペースに伝搬させないため。
Googleは、GPLはカーネルまでに留め、それより上は原則としてBSDライセンス相当とする方針としている。
またglibcはLGPLだが、これを静的リンクしてしまうとLGPLが感染し、リバースエンジニアリング禁止がライセンス規約として不可となるなど、プロプライエタリーな環境では面倒な問題もある。
これを避けるため、BSDライセンスで提供されるBionic libcが用意された。
内容
Androidでは、ソースコードのルートに/bionicとしてディレクトリが存在する。
この直下には、libc libdl libm libstdc++ libthread_db linker という6つのディレクトリがある。
- libcの下に標準Cライブラリの一般的な関数があるが、ソースを見ると、OpenBSD由来であることが分かる。
- libmの下は数学の関数(math.h関係)があるが、ソースを見ると、FreeBSD由来であることが分かる。
- libstdc++はgccのそれと同名であるが全くの別物で、中身はほぼ何もしていないに等しい。例えばtypeinfoは何も返さないなど、C++のサポートは必要最小限ということが分かる。
それ以外は主にThe Android Open Source Projectの作成したものだが、BSDライセンスとなっている。
また、mallocは、glibcと同様にパブリックドメインのdlmallocがベースとなっている。
再検索