Kann ich eine Linux-Distribution mit libc statt glibc erstellen?

Kann ich eine Linux-Distribution mit libc statt glibc erstellen?

Ich habe mich vor kurzem mit einem Freund unterhalten, der ein sehr erfahrener Softwareentwickler ist, und er hat mir einige Artikel gezeigt, in denen dargelegt wurde, dass libc viel besser sei als glibc.

Ich frage mich, ob es möglich ist, stattdessen libc zu verwenden, und auf welche Probleme ich stoßen würde, wenn ich diesen Weg wähle?

Antwort1

Kontext: Aus den obigen Kommentaren geht hervor, dass ein BSDish libcgemeint ist.

Ich glaube, es wurde untersucht, aber es libcist tendenziell eng an einen bestimmten Kernel gebunden ( glibchat eine Abstraktionsschicht, die eine gewisse Portabilität ermöglicht, aber die üblichen Probleme verursacht, die eine Abstraktionsschicht verursacht), und um BSD libcmit einem Linux-Kernel kompatibel zu machen, müsste es fast vollständig neu geschrieben werden. Die wichtigsten Systemdienste sind bei den beiden Systemen sehr unterschiedlich (ein Beispiel: BSD libcgeht davon aus, dass keine Pipes/FIFOs vorhanden sind, weil BSD stattdessen Socketpaare verwendet; Linux hingegen unterstützt keine Pipe-kompatiblen Socketpaare).

Der umgekehrte Weg (Debian verfügt, glaube ich, über einen experimentellen Linux-Benutzerbereich auf einem FreeBSD-Kernel) ist aufgrund glibcder Portabilitätsschicht möglich.

Antwort2

Es gibt viele libc-Implementierungen. Es ist möglich und durchaus üblich, ein System zu erstellen mituClibcoderEGLIBC. Es ist nicht einmal besonders schwierig: Versuchen SieBuildroot.

Antwort3

Viele Softwareprogramme sind von glibcsich selbst oder glibcMakros oder einfach nur glibcvon Stilen abhängig, sodass der Build fehlschlägt. Sie können jede Software einfach reparieren, wenn Sie sich auskennen glibc. Hier sehen wir zum BeispielLinux-Headerfür musl. Die Header sind noch nicht fertig, aber Sie können Commits auschecken und sehen, wie diese Arbeit aussieht.

Jeder Entwickler testet seine Software mit glibceinem basierten System. Es ist nicht möglich, alle Live-Softwareentwicklungen zu reparieren und sie mit anderen kompatibel zu machen, libcindem man die richtige Lösung wie Pull Request verwendet. Daher können allgemeine Systeme gentoonicht ohne unendliche Mühe mit alternativen libcs ​​erstellt werden.

Embedded-Entwickler (von openwrtzum Beispiel) reparieren Softwareversionen und machen viel Arbeit darum herum. Eingebettetes System (wie openwrt) kann also nur eineQuellemusldie mit einer alternativen libc wie oder erstellt werden können uclibc.

glibcDer einzige schmerzlose und richtige Weg, durch „other“ zu ersetzen, libcbesteht darin, einen speziellen Wrapper zu implementieren, der alle glibcVerhaltensweisen mit „other“ simuliert libc. Ein solches Projekt gibt es derzeit nicht.

verwandte Informationen