Android 与 Linux 标准库兼容吗?

Android 与 Linux 标准库兼容吗?

从 Stack Overflow 移过来,我意识到这是偏离主题的,因为它要求提供来源 - 据我所知,规则禁止那里但不在这里。

我知道 Android 中的内核现在主要是 Linux 内核,除了一些例外,例如唤醒锁(如约翰·斯图尔茨描述.) 但它是否足够接近 Linux 标准库? (或者就 POSIX 和/或单一 Unix 规范而言?)

我正在一篇学术学期论文中写到这个问题,所以除了答案本身之外,如果有一个相对可靠的来源我可以引用它那就太好了:经过同行评审的文章或书籍将是理想的,但来自谷歌的东西开发人员文档或有信誉的人(Torvalds、Andrew Josey 等)就可以了。

答案1

最低有效位,POSIX,以及单一 UNIX 规范全部都显着涉及用户区。仅仅使用一个内核(也被用作“类 UNIX”、“大部分兼容 POSIX”操作系统的基础)——GNU/Linux——不足以让 Android 也成为这样的操作系统。然而,也有一些 *nix 风格的元素,例如贝壳,这是一个“很大程度上兼容”的 Korn shell 实现(在 4.0 之前,它实际上可能是 ash shell,通过 busybox 在嵌入式 GNU/Linux 系统上使用)以及与之配套的各种 POSIX-y 命令行实用程序。然而,大多数人并没有从“类 UNIX”世界中识别出完整的集合。

它是否足够接近 Linux 标准库?

LSB 的核心是文件系统层次结构,Android 不使用它。 LSB 确实为 POSIX 添加了一些东西,而且由于 Android 还远没有达到这一点,因此它距离 LSB 兼容还很远。这非常明确不是我相信这是该平台的目标。使用Linux内核是因为它本身的特性,而不是因为它可以用作POSIX系统的核心;由于这两个原因,它最初被 GNU 采纳。

为了澄清关于面向用户空间的规范(例如 POSIX、Unix 或 LSB 扩展)的这种区别,请考虑以下一些事项POSIX不得不说一下原生C库。这就是我们遇到特定于平台的事情的地方,例如网络和大多数系统调用,例如read()--read()事实上,它不是标准 C。从历史上看,它是 Unix 的事情。 POSIX 确实将这些定义为接口但它们是在用户态 C 库中实现的,那么其他一切都使用这个库作为基础。 GNU/Linux 上的 C 库是 GNU C Library,完全独立于内核的工作。尽管这两件事作为操作系统的核心一起工作,但这里讨论的标准都没有说任何事物关于这必须如何发生以及实际上,他们没有说明内核是什么或必须做什么。他们说了很多关于 C 库是什么以及必须做什么的事情,也就是说,如果你编写了一个 C 库来与给定的内核一起工作——任何内核,无论形式或特征如何——并且该库提供了满足 POSIX 规范的用户界面 API,您有一个兼容 POSIX 的操作系统。

我认为,LSB 确实有一些关于/proclinux 提供的内核接口的事情。然而,这个(例如)是由内核直接提供的事实并不意味着 LSB 说它必须是——它只是说这个应该/可能可用,如果是的话,信息的性质是什么。

答案2

“Linux”这个词有两个含义。到目前为止,最常见的含义是Linux操作系统,也称为GNU/Linux 或 GNU/X11/Apache/Linux/TeX/Perl/Python/FreeCiv,这是对Unix操作系统的模仿。 “Linux”这个词也可以表示Linux内核, 哪一个是核心Linux 操作系统的。

Android是一个完全不同的操作系统,它恰好也使用Linux内核。这Linux 标准库是操作系统的规范。它仅适用于Linux操作系统,不适用于Android。 Android 不符合 LSB1。 LSB 不适用于内核,因为普通应用程序代码不会直接与内核交互,只能通过标准库和目录等接口进行交互/proc;原则上,除了 Linux 之外的内核也可以遵守 LSB(尽管实际上有很多功能需要模拟)。

Android 也不符合 POSIX 等 Unix 规范;安卓不是一个类Unix操作系统。 Linux 基本上符合 POSIX(一些发行版的几个版本已被正式认证为兼容)。

¹可以将 Linux 系统与 Android 一起安装并从同一内核运行。但这样你就不再运行“Android”,而是同时运行 Android 和 Linux。

相关内容