Linux有很多发行版。然而,所有这些都有一个共同点:内核。 Linux程序遍及所有这些程序。如果我从内核进行简约分发,那么为Linux运行的当前程序会运行吗?什么定义了分布的差异?我是这个东西的初学者,如果这是一个愚蠢的问题,不要苛刻。谢谢
答案 0 :(得分:1)
是的,有警告。
你需要确保你有完整的C支持,我的意思是像glibc安装或安装,或者你不能为你的最小安装构建程序。如果你可以在Linux上安装和编译C程序,那么你实际上可以从头开始构建其他所有东西。
如果您希望能够下载二进制文件并运行它们,则不同的是,二进制文件可能需要它们在为其构建的系统上拥有的共享库。除非您拥有这些库,否则无法运行您在线找到的现有二进制文件。
什么定义了分布的差异?
每个发行版中都有很多定义因素。如果我们忽视像......这样的事情。
我认为最大的定义因素是包管理,即yum / rpm vs apt / dpkg以及如何在机器上管理基本配置。当我改变发行版时,这肯定是我似乎使用最多并且错过最多的东西。内核本身很少出现在我的脑海中,这在很大程度上取决于它的成功。
大多数人都喜欢ISO Linux并获得可引导CD,但即便如此,您通常也会选择基本发行版。如果你想创建一个大量工作的基础发行版。看看这个linux系列树的精彩信息图片
如果你看看Debian / Ubuntu,这些发行版设置的基础设施数量是非常惊人的。他们拥有数百万甚至数十亿行代码,所有代码都设计为在其支持的版本上运行。您可以从其中一个中获取二进制文件并在Redhat上运行它,但除非行星处于对齐状态,否则它可能会失败。有些人认为这实际上是一件坏事
https://en.wikipedia.org/wiki/Ingo_Moln%C3%A1r#Quotes
免费Linux桌面的基本失败是,它是不恰当的,不是免费的 足够......
桌面Linux发行版试图“拥有”2万个 由超过十亿行代码组成的应用程序包 围绕它们创建了平行的,大部分是封闭的生态系统...... Linux包 管理方法系统在企业中运作良好(这是一个 在大多数情况下,分层的,集中规划的组织),但桌面Linux 另一方面,10年前,在1000个包装限制中停止了扩展...
答案 1 :(得分:1)
如果我从内核进行简约分发,那么当前为Linux运行的程序会运行吗?
很少有程序直接使用内核。他们还需要一个libc,它负责实际实现程序本身或运行其代码的VM使用的大多数C例程。
可以将libc静态链接到程序,但这会使程序的大小膨胀,并且无法在不重建整个程序的情况下修复链接库中的安全问题。
答案 2 :(得分:1)
嗯,某些程序需要特定版本的内核。通常这些程序充当"驱动程序"对于系统的其余部分(例如nvidia专有驱动程序:其中一些在内核空间中运行,而另一些在用户空间中运行,但需要非常特定的内核模块,因此需要非常特定的内核构建)。
更严格的情况是程序需要内核的特定功能。例如,几乎所有现代Linux虚拟化系统都依赖于cgroups功能。因此,要使用它们,您需要有一个相当新鲜的内核。
然而很多内核API都很稳定,所以你可以依赖它。但通常程序不会直接调用内核例程。使用内核函数的典型方法是调用包含和利用内核API的对应库例程。这种主要的,最基本的库是libc
。
从技术上讲,为libc
版本(以及其他共享库)编译的程序可以与略有不同版本的通讯库一起使用。例如,很多人在完全不同的Linux发行版中使用为SuSE编译的Skype。 Skype是一个相当复杂的应用程序,有许多库被链接等等,但它仍然没有任何重大问题。因此,对于许多其他专有程序而言,这些程序无法针对给定的分发甚至是给定的安装进行编译。但有时只是发生了糟糕的事情:)这些二元不可能性非常罕见,但它们不时发生。