/bin と /usr/bin が同一なのはなぜか
/bin と /usr/bin が分かれていないという事実に対する、簡単な説明です。
Cygwin のデフォルトでは、「C:\Cygwin\bin」が「/usr/bin」に、「C:\Cygwin\lib」が「/usr/lib」にそれぞれマウントされています。これでは、/bin(= C:\Cygwin\bin)と /usr/bin、/lib(= C:\Cygwin\lib)と /usr/lib が全く同じディレクトリを指すということになってしまいます。「なぜこのようなマウントが採用されているのか」という疑問を感じた方もおられることでしょう。この奇妙なマウントは、Cygwin と UNIX の根本的な違いに基づいて設定されているものです。
UNIX 系 OS では起動時にルートパーティションだけをマウントし、必要な初期化処理を行ってから他のディスクやパーティションをマウントします。また、UNIX 系 OS にはシステム保守用の「シングルユーザモード(root として一人のユーザだけがログイン可能なモード)」という特別なモードが存在します。しかし UNIX 系 OS では様々な理由から /usr を別パーティションとして作成することが多いため、起動直後には /usr/bin に格納されているコマンドが利用出来ない場合もあり得ます。
そこで、UNIX 系 OS では起動直後にすぐ利用するコマンドや、シングルユーザモードででも使われるようなコマンドを厳選して /bin に、そして /bin 内のコマンドやカーネルが利用する共有ライブラリやモジュールだけを /lib に置いています。/bin や /lib はルートパーティションに置かれているディレクトリですので、仮にルートパーティションしかマウントされていないとしても、/bin に格納されているコマンドについては利用可能となるわけです。
ところが Cygwin は OS ではありませんから、このような区別を設ける必要はありません。/bin と /usr/bin は同一で構いませんし、/lib と /usr/lib を区別する必要もありません。むしろ、各コマンドが /bin に置かれているのか、/usr/bin に置かれているのかを意識するほうが厄介です(この区別を「厄介」だと感じるのは、ユーザよりもむしろパッケージを作成する開発者かもしれませんが)。/bin と /usr/bin が全く同一という、UNIX の常識から考えれば奇妙な構造は、このようにして生まれたのです。
この考えでいけば、/sbin と /usr/sbin も本来は区別しなくてもよいはずですが、何故か /sbin については区別されています。しかし、これは「区別している」のではなく、ただ「単に深く考えられていない」というのが理由だと思われます。
なお、一般の UNIX 系 OS では共有ライブラリ(.soなど)は /lib や /usr/lib に格納されます。しかし Windows では実行パス中に置かれていない DLL は利用できませんので、Cygwin では /bin のような、実行パスが通された位置に DLL が格納されています。