libcに関する世界観です。
libcは、その名の通りCの標準ライブラリの実装。
カーネルやコンパイラだけでは、Cのプログラムは動かない。カーネルのシステムコールやコンパイラの言語処理系と合わせて、「C言語の関数を実行できる」ようなライブラリが必要である。
libcはカーネルと並んでとても重要で、さまざまなCのライブラリ関数を使うためにはカーネルとlibcがタッグを組む必要がある。その上でgccなどの言語処理系が必要。Linuxではこれらは全てフリーソフトウェアで入手できる。GNUプロジェクトがglibcを開発し、Linuxカーネルの開発者と緊密に協力した結果である。
Linuxで利用できるlibcには、GNUによるglibcのほかさまざまな軽量版libcが存在する。また、FreeBSDやNetBSDなどもそれぞれのOSカーネルと合わせてlibcを開発しており、組み込みシステムなどではglibcではなくNetBSDのlibcを使うなどといった事例もある。
また、C++で開発を行うためにも、同様にC++の標準ライブラリが必要である。LinuxではGCCプロジェクトのlibstdc++などが利用できる。
FreeBSD man-pagesのintro(3)はCのライブラリ関数を知る上で参考になります。
GNUによるlibc(標準Cライブラリ)の実装。かつてはLinuxの開発者が「Linux libc」をフォークさせたこともあったが、glibc 2.0でたくさんの機能追加と移植性の向上が行なわれ、Linuxの開発者はglibcに戻った。
フル機能のGlibcは多機能だが、サイズが大きく、サイズを小型化するためにmuslのようなCライブラリの実装も使われることがある。また、ライセンスにコピーレフトのものを使いたくない場合や移植性などを考えて、*BSDのlibc実装が使われることもあり、AndroidではNetBSDのlibcが使われている。
Muslは軽量なglibcの代替。Void Linuxなどで標準とは違う軽量なCライブラリとして利用出来る。
アプリケーションのバイナリをポータブルな単一ファイルとして配布できるように、静的リンクに最適化している。
Linux向けのCライブラリは他にもあるが、機能を増やせば巨大になり、機能を減らせば軽量になるという関係にある。Muslは最低限の機能でありながらPOSIX互換を保っている。
uClibcは、小型のCライブラリで、μClinux向けに開発された。
uClibcはglibcと比べてずっと小さく、任意の機能を有効にしたり無効にしたりできる。また、組み込みなどでMMUのないマシンにも対応している。
Newlib/dietlibcも、小型のCライブラリ。組み込み向けに用いる。
GNUツールチェインについてはGNUツールチェインやMakeを参照のこと。
C言語についてはC言語を参照のこと。
共有ライブラリも参照のこと。