最近、非常に優秀なソフトウェア エンジニアである友人と話をしたのですが、その友人は、libc が glibc よりもはるかに優れているという事実を概説した記事をいくつか見せてくれました。
代わりに libc を使用することが可能かどうか、またこの方法を採用した場合にどのような問題が発生するかが気になります。
答え1
コンテキスト: 上記のコメントから、BSD 風libc
を意味していると想定します。
すでに検討されていると思いますが、libc
特定のカーネルに密接に結びついている傾向があり (glibc
抽象化レイヤーがあるため、ある程度の移植性は得られますが、抽象化レイヤーが引き起こす通常の問題も発生します)、BSD をlibc
Linux カーネルで動作させるには、ほぼ完全な書き直しが必要になります。主要なシステム サービスは、2 つのシステム間で大きく異なります (例: BSD ではlibc
パイプ/FIFO がないものと想定されています。BSD では代わりにソケット ペアが使用されるためです。逆に、Linux ではパイプ互換のソケット ペアがサポートされていません)。
の移植性レイヤーのおかげで、逆の方向に進むこと (Debian には FreeBSD カーネル上に実験的な Linux ユーザースペースがあると思います) が可能になりますglibc
。
答え2
答え3
多くのソフトウェアは、glibc
自分自身やglibc
マクロ、あるいはglibc
スタイルに依存しているため、ビルドに失敗します。内部から知っていれば、どんなソフトウェアでも簡単に修正できますglibc
。例えば、ここを見てください。Linux ヘッダーヘッダーはまだ完成していませんmusl
が、コミットをチェックアウトして、この作業がどのようになっているかを確認できます。
すべての開発者は、glibc
ベースシステムを使用してソフトウェアをテストします。プルリクエストなどの適切なソリューションを使用して、すべてのライブソフトウェア開発を修正し、他のソフトウェアと互換性を持たせることは不可能libc
です。そのため、代替 libc を使用して汎用システムgentoo
を構築するには、無限の苦労が必要です。
組み込み開発者(openwrt
例えば)はソフトウェアのバージョンを修正し、それを回避するのに多大な労力を費やしています。そのため、組み込みシステム(のようなopenwrt
)は、ソースmusl
またはのような代替 libc を使用してビルドできますuclibc
。
glibc
other に置き換える唯一の簡単で正しい方法は、other を使用してlibc
すべての動作をシミュレートする特別なラッパーを実装することです。現在、そのようなプロジェクトはありません。glibc
libc