我已经认识到,用ubuntu更新软件比windows和android需要更多的数据传输。例如,今天我将firefox 88更新为firefox 88.0.1。在ubuntu中,它下载了大约55 MB的数据,在windows 10中,将firefox 88更新到Firefox88.0.1占用了大约15 MB或更少的数据下载。或者,在ubuntu中将chrome从90.x.x.1更新到90.x.x.2将下载大约88 MB的数据,而在windows 10中下载的数据大约为10 MB或更少。另外,在android系统中,它更类似于windows,与ubuntu相比,它需要更少的数据来更新软件。
那么,为什么会存在这种差异呢?这背后有什么逻辑吗?如果没有,是否有计划使软件更新更好?
发布于 2021-05-11 20:34:30
在一些平台上,出了名的大型软件似乎是逐步更新的。这是有道理的:互联网浏览器是巨大的,他们经常更新,但二进制差异可能没有那么大。
https://wiki.mozilla.org/UpdateGeneration
这样做的优点是节省了带宽,但成本是在服务器端的版本之间产生二进制差异。如果用户跳过一个或多个更新,那么无论是从一个旧版本到下一个版本的每个不同版本都必须保留在服务器上,或者该用户无论如何都会得到完整的包,在这种情况下,与总是复制大的完整包没有任何优势。因此,服务器需要至少保留每个包的两个版本:最新的diff和完整的包。在实践中,它可能会更多。
Linux包管理器的工作方式不同:他们不仅通常会传输整个新包,而不仅仅是差异。它们还允许在过程中执行脚本:
例如,这可用于将现有数据库从旧格式转换为较新格式,或从正在运行的系统收集信息(例如硬件信息),并将其存储在该包的配置数据库中;或在包最终卸载时安全地删除其中的任何数据库。
升级到较新的包版本意味着卸载旧版本并安装新版本;因此,在这种情况下,将执行所有四个脚本(如果包定义了它们)。
但是,在增量升级的情况下,这变得更加复杂:不再需要更干净地卸载旧包,以便删除所有旧文件;必须保留这些文件,以便能够应用传入的二进制差异。因此,这些脚本中的任何一个都不能再依赖这些文件中的任何一个存在或不存在;它们必须应对更多的场景。
随着当前将所有东西打包成快照或平面文件的趋势,情况会变得更糟:在这种情况下,您不仅会得到新的包,而且会得到它周围的一切;基本上是底层操作系统的更好的部分,至少是所有使用的库(直接和间接的依赖关系)。
我不知道那些包罗万象的包格式是否能处理增量升级;如果不能,那么考虑一下可能是值得的。
https://askubuntu.com/questions/1337616
复制相似问题