最近、スキルの高いソフトウェアエンジニアである友人と会話しました。彼は、libcがglibcよりもはるかに優れているという事実を概説した記事をいくつか見せてくれました。
代わりにlibcを使用することは可能かと思いますが、このルートを使用した場合、どのような問題が発生しますか?
コンテキスト:上記のコメントから、BSDish libc
が意味されていると仮定します。
調査されたと思いますが、libc
は特定のカーネルに緊密に結び付けられる傾向があります(glibc
には抽象化レイヤーがあり、移植性はありますが、抽象化レイヤーが引き起こす通常の問題を引き起こします)そしてBSD libc
をLinuxカーネルで動作させるには、ほぼ完全に書き直す必要があります。主要なシステムサービスは2つのシステム間で大きく異なります(1つの例:BSD libc
は、BSDが代わりにソケットペアを使用するため、パイプ/ FIFOがないと想定します。逆に、Linuxはパイプ互換のソケットペアをサポートしません)。
glibc
の移植性レイヤーにより、他の方向に進むことも可能です(DebianにはFreeBSDカーネル上に実験的なLinuxユーザースペースがあると思います)。
多くのlibc実装があります。 uClibc または [〜#〜] eglibc [〜#〜を使用してシステムを構築することは可能であり、かなり一般的です。 ] 。特に難しいことではありません。 Buildroot を試してください。
多くのソフトウェアは、glibc
自体またはglibc
マクロ、あるいはglibc
スタイルに依存しているため、ビルドは失敗します。内部からglibc
を知っていれば、どんなソフトウェアでも簡単に修正できます。たとえば、ここで見ることができます linux headers for musl
。ヘッダーは完成していませんが、コミットをチェックアウトして、この動作がどのように見えるかを確認できます。
すべての開発者は、glibc
ベースのシステムを使用してソフトウェアをテストします。プルリクエストなどの適切なソリューションを使用して、すべてのライブソフトウェア開発を修正し、他のlibc
と互換性を持たせることはできません。したがって、gentoo
のような汎用システムは、無限の苦痛なしに代替libcを使用して構築することはできません。
組み込み開発者(たとえばopenwrt
から)はソフトウェアバージョンを修正し、それを回避するために多大な作業を行っています。したがって、組み込みシステム(openwrt
など)は、musl
やuclibc
などの代替libcでビルドできる ソース のみを提供できます。
glibc
を他のlibc
に置き換える唯一の簡単で正しい方法は、他のglibc
を使用してすべてのlibc
の動作をシミュレートする特別なラッパーを実装することです。今日、そのようなプロジェクトはありません。