
linux
直接回答题主的疑问如下:1.
linux的C库可视为第三方提供的,GNU并不隶属于
linux社区。glibc在理论上能够部署到其他操作系统,不过当前GNU的重心基本都放在
linux上,所以二者看起来结合得很紧密。实际上,不用glibc也能兼容
linux系统调用。把编译器改成clang/llvm,将C库链接环境换成musl,就可以完全脱离glibc。关于系统调用的格式,
linux源码中有文档,可自行查阅,如果只想查看系统调用号,可看这个链接。2. 在裸机上部署
linux内核的话,显然无法让
linux运行起来,因为没有glibc,而且编译的内核也不包含glibc。自己编译后能运行,是因为是在已经包含glibc的环境下进行的编译,所以不需要再次编译glibc。绝大多数人只是编译和升级内核,用户态的东西都是现成的,做发行版的企业都已经打包好了。
linux内核有与之匹配的glibc版本,可以到GNU网站查询,它不随
linux发布。确切地说,内核做内核的事,GNU做GNU的事,虽然双方会互相协助,但并非严格绑定。如果要探究二者的历史,GNU社区的出现比
linux内核要早,GNU社区才是开源软件的最大推动者。后来有了
linux之后,GNU开始支持
linux,但二者并非同步发展。
linux内核的初始版本并没有glibc的支持。GNU社区在寻找合适的操作系统,
linux在寻找合适的C库,然后双方发现都是开源/免费软件,于是一拍即合走到了一起。前面提到,二者并非完全绑定,glibc可以用于freeBSD,
linux也可以使用musl作为C库。只是现在制作
linux发行版的企业,都默认采用
linux + glibc的方案。如果有能力的话,可以自己编写一个操作系统,并且在系统调用层面兼容glibc,这样就得到一个用户态与
linux相似,甚至能运行一些基本
linux应用的操作系统,这个操作系统甚至可以是闭源的(只要保证用户态部分开源即可)。同样,如果能力很强,按照
linux系统调用的格式去创建一个C运行库也没问题,甚至可以做出闭源的C库,然后在
linux内核上运行(前提是要精心设计链接部分的代码)。