web-dev-qa-db-ja.com

glibcの代わりにlibcを使用してLinuxディストリビューションを構築できますか?

最近、スキルの高いソフトウェアエンジニアである友人と会話しました。彼は、libcがglibcよりもはるかに優れているという事実を概説した記事をいくつか見せてくれました。

代わりにlibcを使用することは可能かと思いますが、このルートを使用した場合、どのような問題が発生しますか?

6
yakamok

コンテキスト:上記のコメントから、BSDish libcが意味されていると仮定します。

調査されたと思いますが、libcは特定のカーネルに緊密に結び付けられる傾向があります(glibcには抽象化レイヤーがあり、移植性はありますが、抽象化レイヤーが引き起こす通常の問題を引き起こします)そしてBSD libcをLinuxカーネルで動作させるには、ほぼ完全に書き直す必要があります。主要なシステムサービスは2つのシステム間で大きく異なります(1つの例:BSD libcは、BSDが代わりにソケットペアを使用するため、パイプ/ FIFOがないと想定します。逆に、Linuxはパイプ互換のソケットペアをサポートしません)。

glibcの移植性レイヤーにより、他の方向に進むことも可能です(DebianにはFreeBSDカーネル上に実験的なLinuxユーザースペースがあると思います)。

8
geekosaur

多くのlibc実装があります。 uClibc または [〜#〜] eglibc [〜#〜を使用してシステムを構築することは可能であり、かなり一般的です。 ] 。特に難しいことではありません。 Buildroot を試してください。

5
Shawn J. Goff

多くのソフトウェアは、glibc自体またはglibcマクロ、あるいはglibcスタイルに依存しているため、ビルドは失敗します。内部からglibcを知っていれば、どんなソフトウェアでも簡単に修正できます。たとえば、ここで見ることができます linux headers for musl。ヘッダーは完成していませんが、コミットをチェックアウトして、この動作がどのように見えるかを確認できます。

すべての開発者は、glibcベースのシステムを使用してソフトウェアをテストします。プルリクエストなどの適切なソリューションを使用して、すべてのライブソフトウェア開発を修正し、他のlibcと互換性を持たせることはできません。したがって、gentooのような汎用システムは、無限の苦痛なしに代替libcを使用して構築することはできません。

組み込み開発者(たとえばopenwrtから)はソフトウェアバージョンを修正し、それを回避するために多大な作業を行っています。したがって、組み込みシステム(openwrtなど)は、musluclibcなどの代替libcでビルドできる ソース のみを提供できます。

glibcを他のlibcに置き換える唯一の簡単で正しい方法は、他のglibcを使用してすべてのlibcの動作をシミュレートする特別なラッパーを実装することです。今日、そのようなプロジェクトはありません。

0
puchu