正如我们所知,一个非常基本的软件工程原理是松耦合。但是我们知道类 UNIX 操作系统中的程序是极其耦合的。如何解释/证明这一点?
我的意思是从极度耦合,程序之间的很多依赖项,即使你想安装一个简单的应用程序,你也必须考虑很多依赖项(如你在应用程序管理器中看到的),有时甚至你无法更新程序,因为它会破坏一些依赖程序。确实,Linux 的美丽世界中很少有独立软件(与其他操作系统相比)。
ckh*_*han 10
这样做是合理的,因为替代方案——总体而言——是更多的工作,以获得更少的收益。
几乎所有的计算系统(可以争论:所有系统,句号)都是分层构建的。每个平台都会对其下方的内容做出假设。ls
假设会有一个 C 标准库。假设会有一个内核。假设会有计算硬件。假设会有稳定的电压等。
通过做出这些假设:我可以更快地编写代码。我可以做更多。我不在乎捆绑 C 库、zip 库或加密库:其他人会这样做。当其他人决定改进或升级这些组件时,我会受益匪浅。共享该代码的所有其他程序也是如此。在一个连贯的系统中,它更快、更干净、更小、更好。
但是,正如您所指出的,它更具依赖性。如果加密以不兼容的方式升级,我就会崩溃,并且包管理变得困难。为了真正解耦那些使包管理变得困难的 deps,组件需要内联它们的 deps。他们需要在他们下面包含更多的堆栈。这就是问题的关键:要创建一个依赖更少的程序,我们需要一个理解更多的构建系统。这不是开发人员想要(或应该)花时间的地方。
您将当前的困境描述为“极端耦合”。人们已经尝试过让一切都独立: checkout stali,一个旨在保持所有二进制文件静态链接的 Linux 发行版。但是极端的解耦同样会让人衰弱:想象每个程序都有一个 VM。
我们行业的惊人增长很大程度上归功于我们能够在过去的基础上快速发展。无论从字面上还是比喻上,我们都站在巨人的肩膀上。也许在未来,我们会吞下一个巨人,作为让一个人更高的第一步。不过,就目前而言,妥协似乎大致正确:让我们继续攀登,并确保我们下面的巨人玩得开心。