我最近与一位技能高超的软件工程师朋友进行了交谈,他向我展示了一些文章,概述了 libc 比 glibc 好得多的事实。
我想知道是否可以使用libc来代替,如果我走这条路,我会遇到什么样的问题?
答案1
上下文:假设从上面的评论来看,BSDishlibc
是指 BSDish。
我认为它已经被研究过,但libc
往往与给定的内核紧密相关(glibc
有一个抽象层,这允许它具有一定的可移植性,但会导致抽象层引起的常见问题)并且使 BSDlibc
与 Linux 内核一起工作需要接近完全重写。两个系统之间的关键系统服务有很大不同(例如:BSDlibc
假设没有管道/FIFO,因为 BSD 使用套接字对;相反,Linux 不支持管道兼容的套接字对)。
由于 的可移植层,走向另一个方向(我认为 Debian 在 FreeBSD 内核上有一个实验性的 Linux 用户空间)是可能的glibc
。
答案2
答案3
许多软件依赖于其glibc
自身或glibc
宏或仅依赖于glibc
样式,因此构建失败。如果您了解glibc
内部情况,您可以轻松修复任何软件。例如我们可以在这里看到Linux 头文件为了musl
。标头尚未完成,但您可以检查提交并查看这项工作的样子。
glibc
每个开发人员都使用基础系统来测试其软件。不可能修复所有实时软件开发并使其与其他libc
使用正确的解决方案(例如拉取请求)兼容。因此,像这样的通用系统gentoo
不能使用替代的 libc 来构建,而不会带来无限的痛苦。
嵌入式开发人员(例如openwrt
)正在修复软件版本并围绕它进行大量工作。所以嵌入式系统(如openwrt
)只能提供来源可以使用替代 libc 来构建,例如musl
或uclibc
。
替换glibc
为 other 的唯一无痛且正确的方法libc
是实现glibc
使用 other 模拟所有行为的特殊包装器libc
。今天还没有这样的项目。