ライブラリ
ライブラリのファイル名は常に接頭辞libで始まり、拡張子として.a(静的ライブラリ)あるいは.so(ダイナミックリンクライブラリ)が使用される。オプションとして多重拡張子によるインタフェース番号が付与される場合がある。例えば、libfoo.so.2はlibfooライブラリの二番目のメジャーなインタフェース番号の付いたダイナミックリンクライブラリである。古いUNIXではマイナー番号も使っている場合がある (libfoo.so.1.2) が、最近のUNIXではメジャー番号しか使っていない。ライブラリのうち、共有ライブラリは/lib、/usr/lib、/usr/local/libなどのディレクトリに置かれる。動的にロードされたライブラリは/usr/libexecなどのディレクトリに置かれる。ライブラリのディレクトリにある .la ファイルは libtool(英語版) アーカイブである。
動的か静的かとは別に、ライブラリはプログラム間で共有される方式でも分類される。動的ライブラリは何らかの共有をサポートしており、複数のプログラムが同時に同じライブラリを使用することができる。静的ライブラリは各プログラムにリンクされるため、共有することはできない。
共有ライブラリ(英: shared library)はやや曖昧な用語であり、ふたつの概念を含む。第一はディスク上のコードを複数の無関係なプログラムが共有することを意味する。第二の概念はメモリ上のコードの共有であり、ライブラリのロードされた物理メモリページが複数のプロセスのアドレス空間にマップされ、同時にアクセスされることを意味する。一般に後者を共有ライブラリと称するのが推奨され、この方式には様々な利点がある。例えばOPENSTEPでは、アプリケーションの多くは数百Kバイトで即座にロード可能であり、その機能の大部分はライブラリ上に実装されていて、共有可能であるためにOSが別のプログラム用にメモリにロードしたコードイメージがそのまま使用できる。しかし、マルチタスク環境で共有されるコードは特別な配慮が必要であり、そのために性能が若干低下する。
メモリ上の共有ライブラリはUNIXでは位置独立コード (PIC) を使って実現される。これは柔軟なアーキテクチャだが複雑であり、Windowsなどでは使われていない。Windowsなどは、DLL毎にマップすべきアドレスを事前に決めておくなどしてメモリ上で共有可能にしている。
1980年代終盤に開発された動的リンクは1990年代初期にはほとんどのOSで使用可能となった。ほぼ同時期にオブジェクト指向プログラミング (OOP) が市場に出回り始めた。OOPは従来のライブラリが提供していなかった情報を必要とした。それは、あるオブジェクトが依存しているオブジェクトのリストである。これはOOPの継承という機能の副作用であり、あるメソッドの完全な定義は複数の場所に分散して配置される可能性がある。これは単純化すればライブラリ間の依存関係ということになるが、真のOOPシステムではコンパイル時には依存関係が明らかでなく、そのために様々な解決方法が登場した。
同じころ、多層構造のシステムの考え方も出てきた。デスクトップコンピュータ上の表示プログラムが汎用コンピュータ(汎用機)やミニコンピュータの記憶装置や演算機能を利用するものである。例えばGUIベースのコンピュータがミニコンピュータにメッセージを送り、表示すべき膨大なデータの一部を得るというものが考えられた。RPCは既に使われていたが、それは標準化されていなかった。
主要な汎用機およびミニコンメーカーがこれら二つの問題に関してプロジェクトを結成し、どこでも使えるOOPライブラリ形式を開発した。