
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 libc
gemeint ist.
Ich glaube, es wurde untersucht, aber es libc
ist tendenziell eng an einen bestimmten Kernel gebunden ( glibc
hat eine Abstraktionsschicht, die eine gewisse Portabilität ermöglicht, aber die üblichen Probleme verursacht, die eine Abstraktionsschicht verursacht), und um BSD libc
mit 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 libc
geht 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 glibc
der Portabilitätsschicht möglich.
Antwort2
Antwort3
Viele Softwareprogramme sind von glibc
sich selbst oder glibc
Makros oder einfach nur glibc
von 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 glibc
einem basierten System. Es ist nicht möglich, alle Live-Softwareentwicklungen zu reparieren und sie mit anderen kompatibel zu machen, libc
indem man die richtige Lösung wie Pull Request verwendet. Daher können allgemeine Systeme gentoo
nicht ohne unendliche Mühe mit alternativen libcs erstellt werden.
Embedded-Entwickler (von openwrt
zum Beispiel) reparieren Softwareversionen und machen viel Arbeit darum herum. Eingebettetes System (wie openwrt
) kann also nur eineQuellemusl
die mit einer alternativen libc wie oder erstellt werden können uclibc
.
glibc
Der einzige schmerzlose und richtige Weg, durch „other“ zu ersetzen, libc
besteht darin, einen speziellen Wrapper zu implementieren, der alle glibc
Verhaltensweisen mit „other“ simuliert libc
. Ein solches Projekt gibt es derzeit nicht.