Answers:
程序本身不包含依赖项的主要原因是可以轻松更新系统组件。
想象一下,五个不同的程序使用了一个依赖项。如果在该依赖项中发现了安全漏洞,则只需更新一个副本,而不是五个副本。
对于用户而言,不需要安装多个软件包都没关系-安装要安装的一个软件会自动安装其依赖项。
.deb和.exe打包之间的主要区别不是Ubuntu软件没有发布在单个文件中。主要区别在于包含软件包的软件存储库的整个概念,并且可以轻松地提供更新。
对于没有直接互联网连接的计算机,这有时可能会出现问题。有一些工具,例如APTonCD,可以帮助最小化这些困难。
那不是完全正确的。Ubuntu软件通常包含在一个.deb文件中。.deb文件非常简单(且不准确),它是Windows的相应.exe文件。所有程序,包括Windows中的程序,都使用对操作系统中其他文件的依赖(库)。在不同的操作系统中,安装过程或多或少是明确的。使用Ubuntu中的软件中心下载程序时,只会下载系统中未安装的依赖项和实际程序文件。这样可以防止系统因重复文件和重复功能而导致过载,而这些重复文件和重复功能最终会导致冲突。
信不信由你,在Windows或Ubuntu中安装程序的唯一区别是它们提供给用户的信息量。Windows认为其用户很笨,并且不希望他们在运行exe文件时知道正在安装什么。在Linux中,您可以获得该信息。.对于某些用户来说,细节太多了,但是其他(大多数)人真的很欣赏。
希望有道理。
在Ubuntu上,大多数软件的确包含在一个文件中。这是一个*.deb
debian软件包文件,可从软件包管理器下载,解压缩和安装。
Ubuntu为什么不像大多数Windows软件一样从自解压的可执行文件中安装软件?
因为自解压*.exe
文件是接受的非常危险的主张。
自解压可执行文件和打包系统(例如debian / Ubuntu软件包)之间最关键的区别是:
更详细地:
安全
在Windows世界中,您必须信任该单个*.exe
文件。如何真正确定它可以被信任?您什至不知道它安装了什么?您如何确定它不会在背后做其他事情?
在Ubuntu中,所有软件包都是经过数字签名的,因此,通过使用单独的软件包文件-软件包管理器(无论是muon,突触,智能还是什至是apt),您都可以在内容解压缩之前得到验证,更不用说安装了。当然,这假定您信任存储库。我宁愿信任Ubuntu存储库(单一权限),也不愿下载数百个通常不熟悉的不同资源。
粒度控制
使用*.exe
文件,您基本上可以做一件事:执行它。在Ubuntu中,可以在决定是否安装之前,从软件包管理器的方便性检查软件包的内容,描述,配置,单个文件,最新更改,错误修复等。
从*.exe
文件安装时,还必须信任其“卸载”挂钩(并非所有*.exe
文件都保证有一个)。在Ubuntu中,软件包管理器安装的属于标准软件包的所有文件都可以始终被卸载,因为这是软件包管理器的功能,而不是软件包本身。程序包管理器是一个独立的受信任的应用程序,它提供安装程序和卸载程序,程序包无法从您手中夺走卸载挂钩。当然,恶意软件包可以通过安装后的动作来偷偷摸摸,但这就是为什么我们拥有正式的存储库系统,并且由我们信任的人来维护它们。
透明度
更进一步。在Ubuntu上,我可以真正信任我的系统,因为我可以在多个级别上验证该软件。最终的水平是能够查看源代码。二进制程序包具有相应的源程序包。我实际上可以看一下源代码(示例:' apt-get source bash '将为您提供bash shell的完整源代码)。在* .exe文件的世界中,通常只有二进制文件,谁知道它们在幕后实际上会做什么?
就是说,规则总是有例外,但是对我来说,安全性和信任意味着我无法接受来自数百个不同来源的执行二进制文件,这些文件很难作为标准的方式在我的系统上安装来验证。
让我们尝试分享我对依赖关系的理解(是的,我知道了Ubuntu或更普遍的Linux处理软件方式的优点。我只是试图以一种集中的方式收集所有好的意见和理由,以便我可以演示一些我的朋友)。
不,几乎所有软件都依赖于其他一些软件。(除非软件是非常低级的并且可以直接与硬件对话,例如操作系统本身)。微软的软件并非没有依赖性。因此,重要的问题是:他们如何处理?
答:他们以自己的传统方式处理此问题。假设他们的大多数用户是愚蠢的,他们只需将所有依赖项放在一个文件中,就可以得到更大的软件(1档)。
例如,请参阅为Microsoft发布的游戏。尽管用户可能已经更新了DirectX设置,但几乎每个游戏都包含DirectX设置。
这是我在Google上发现的有关为什么每个游戏都包含DirectX的内容。
即使已经安装了更高版本的二进制文件,也无法使用该版本,即使您的DirectX安装是最新的,因为您运行的是安装程序的较新版本,也不能保证已安装所有版本。之前的版本。更糟糕的是,如果为x86安装了某个版本,则不能保证为x64安装了同一版本,因此64位和32位游戏可能需要运行相同的确切安装程序版本,但运行时会针对不同的平台。
单击此处查看全文。显然,他们在处理依赖性方面做得不好。
在大多数情况下,无论是否已经存在依赖项,他们都会(为了方便用户)提供它来简化操作。另请参阅多少主题软件包含.NET运行时组件。
我的经验中的另一个示例:下载并安装了MS软件之后。对此过程感到满意后,我单击了图标以打开软件,然后它告诉我“我需要运行Java”。通过Linux的程序包管理,这种情况在Linux世界中永远不会发生。(除非您尝试从存储库站点下载.deb文件,然后以MS方式双击安装)。
好吧,Linux或Ubuntu并没有掩盖一个事实,即您必须安装依赖项才能使用该软件(与Microsoft方式不同)。但是,当您安装这些组件时,依赖于同一组件的另一种软件将使用先前安装的已安装视点(与包含所有组件的MS软件不同)。