Linux 内核是否有任何成功的分叉或重构?

mas*_*mas 2 gcc gnu linux-kernel clang

谷歌搜索揭示了这个 slashdot 故事产生了这个自 2016 年以来没有提交过的 github 存储库。有关于github.com上市22602个叉,但这些都将是主要(如果不是几乎所有的),只是为发展叉托沃兹/ Linux的

我之前读过 Linux 已经变得相当笨拙。在我看来,至少在用户体验方面,Linux 比我记忆中的 10 多年前更加精致(显然这不是对内核的准确评估;我现在才阅读 K&R,从未涉足内核源代码,除了粗略一瞥会产生“哇,我无法理解这一行”,但我知道内核中有关 linux-on-the-laptop 功能的大量开发,例如) . 无论如何,我知道我已经看到 BSD 人抱怨 Linux cruft。考虑到基于 vim cruft 的 vim 的 neovim 分支,我认为类似的努力会对内核有所回报。

提示这个问题的是LWN 上的这篇文章,讨论了使用 clang 编译 Linux 的尝试。我读到内核使用了许多特定于 gcc 的怪癖/特殊功能进行优化(尽管与我的记忆相比,链接的文章似乎淡化了它们),我开始怀疑是否有人试图重构/分叉内核来制作它更便携,或者至少可以在 gnu 环境之外编译。我也明白 gcc 本身很粗鲁,Linus 自己也批评过。

我知道我个人对 RMS 和 GNU 的厌恶以及对没有 GNU 的 Linux 的兴趣并不孤单;我知道Alpine Linux不需要 gnu 工具,但内核仍然是用 gcc 编译的,不是吗?有很多关于替代工具链和用户空间软件的参考,但我特别想知道内核以及是否有消除 gcc/gnu 依赖的分叉——认为这是标题的一个附属问题——在我看来这将是一个废物单独问吧。

sou*_*edi 5

我特别想知道内核以及是否有消除 gcc/gnu 依赖项的 fork--

没有人会完成同步 clang 和 Linux 的工作,然后将其作为长期分叉进行维护。尤其是当主线有这样的兴趣和意愿时。 除非它是您会发现的大型可见项目的一小部分。(正如你所做的......)。

将此视为标题的附属问题——在我看来,单独提出它是一种浪费。

Android,如第一个答案所述。

有些部分被合并了,所以也许它没有以前那么糟糕。我不是很了解这一点。Mainline 肯定可以用于一些 ARM CPU 相关的东西,例如 BIG.little。并且Android反复基于主线版本;谷歌不会落后太多。

但它是一个长期运行的叉子。它不按照“上游优先”规则运行。他们携带了很多硬件支持。

IMO "Android" 和 "Google" 很好地指出了你需要的资源级别,这些资源证明被称为 Linux 的一个分支是合理的。

Android 也是一个问题,因为运行它的设备附带的内核包含大量(通常是数百万行)的树外代码。-- https://lwn.net/Articles/738225/


还有 RHEL 内核,截至 2018 年,它的名字很吓人,如 2.6.32-754。这些不仅仅是安全更新;它们将包括对一些新硬件的支持,同时旨在提供更接近基本内核版本的行为,例如 2.6.32。我相信 fork 是 RH 维护它所需的资源的恰当词。

在广泛的最新硬件上运行良好是昂贵的,因此很有价值。这主要是 Linux 内核项目的内容,我认为这是理解这两个分支的最重要的因素。

您可能会在 openhub.net 上比较 vim 和 Linux 的代码大小,并认为,哦,Linux 的大小“仅”约为 20 倍。然而,提交次数的差异要大得多;流失率相当凶猛。

此外,不仅仅是内核代码更难正确……虽然是……但它的硬件支持也是如此。当您看似无害的重构最终破坏了一些设备时,您需要访问这些特定设备来调试和修复问题。


硬件支持让我想到了 https://en.wikipedia.org/wiki/Embeddable_Linux_Kernel_Subset :-P。

在这个服务器虚拟化的世界中,您可能还会认为会有针对它优化的分叉,因为它们不需要跟上这么多不同的硬件。虽然我想不出任何好的例子。你可以查找“unikernels”;似乎有几个不是基于 Linux 的。


linux-rt / PREEMPT_RT也被认为是树外补丁集。这是一个补丁集,它基于连续的主线版本。200 KB(压缩)的专业代码是一个不错的补丁集。至少有一点已经合并了其中的一些大片段。