软件的升级、更新是个怎样的过程?

标签: 软件 升级 更新 | 发表时间:2014-07-13 08:00 | 作者:姚冬
出处:http://www.zhihu.com
感谢 @ 胡 锦 涛邀请,这个不敢不答啊,说不定已经有数十个快递员在我家门外蓄势待发呢。

在互联网不太普及的时代,很多软件公司还是会发布离线更新包,这种更新包其实就是个安装程序,只是安装的内容是更新的部分,没有变化的文件直接用已经安装的版本的。此外这些安装程序还会修改一些系统配置以适应新版本的功能,比如注册COM组件,修改注册表等。

现在互联网已经十分普及,几乎所有软件都采用在线升级,具体实现上,有下列几种做法。

1. 比较简单的,通过http协议,检测是否有更新,就是把本地版本号发给服务器,服务器会返回一个配置文件,里面表明是否有新版本,并且带有新版本的下载地址,更新程序按照URL下载新版本的安装程序,然后执行这个安装程序,用户根据安装程序提示进行更新。

2. 再进化一步,每次都重新安装太麻烦,更新程序下载一个新版本的压缩包(zip/7z),然后帮用户解压缩到安装目录。现在客户端都追求简单设计尽量降低和系统的耦合,基本都是复制文件就算安装的那种绿色软件,所以把新版本的文件一更新就能用。

3. 如果某个软件体积已经比较大了,比如大于10MB,每次都下载一个完整的新版本的话,下载就太慢,安装也慢。既然本地已经有个安装版本了,每次更新其实变化的东西也不是很多,那么有个软件就下载一个更新文件的压缩包,然后解压缩到安装目录覆盖旧文件。

4. 有的软件更大,更新也频繁,每次更新的exe dll模块大多都有更新,所以还是要下载很大的更新包,于是有人用 bsdiff算法求新版本和旧版本的二进制差异,如果新版本就是修了bug改了几行代码,那么bsdiff生产的补丁也就几KB,下载的二进制补丁用bspatch来更新本地版本。bsdiff的算法库很小,大约才30+KB很容易集成到更新程序里。

5. 有的软件更更大,即使用bsdiff产生的补丁还是很大,有人搞出了更给力的补丁算法,Chrome的方法, http://dev.chromium.org/developers/design-documents/software-updates-courgette
从介绍看,它比bsdiff生成的补丁还要小一个数量级,这个想法相当巧妙,对于那种代码模块为主的程序尤其有效。很多时候我们只改了几行代码,但是DLL模块却改变了很多,主要是因为代码优化链接时重排造成的,如果比较汇编代码差异就会很小,Courgette就把DLL反编译成汇编码,然后和旧版本的汇编码比较得到差异,更新的时候把旧版本也反编译打补丁然后再编译成DLL。这样的话如果只改了几行代码,那么生成的补丁可能就几十个字节。

6. 随着更新包越来越大,更新下载和安装的时间也越来越长,造成用户长时间等待,有的软件采用了后台下载后台更新的方式。所谓后台下载就是无论用户是否点了立刻更新,只要有新版本就在后台偷偷给用户下载下来,有点流氓,但这也是为了用户体验呢。那么后台更新呢,正在运行的程序,每个文件都是被占用的,是不能更新的。还是Chrome想出来的,双目录更新,把就版本先复制到另一个目录,然后更新这份新复制的,下次用户启动的时候就直接启动新版本。
比如 Chrome有如下的目录结构
   Chrome
    +Application
        +35.0.1916.153
        +35.0.1916.114
         chrome.exe 

它用版本号做目录名,每次升级的时候更新新版本,旧版本在另一个目录运行不受影响。下次启动的时候 Chrome.exe永远加载最新版本的dll运行就好了。chrome.exe是个很小的程序,里面的逻辑就是检测下版本号加载最新版本的dll,这样简单的程序本身几乎不需要更新。


在需求的推动下,现代客户端的升级程序已经相当复杂了,包括了支持灰度放量的新版本检测,http断点续传下载,MD5完整性校验,bsdiff/courgette 二进制补丁更新,双目录迭代升级等技术。到了移动app时代,以上这些技术都用不到了,操作系统垄断了升级机制,只能通过操作系统检测下载安装更新,iOS做得相当彻底,Android还给app留了条自己下载apk安装的路,但是二进制补丁完整性校验等就彻底不需要app开发者自己操心了。

— 完 —
本文作者: 姚冬

【知乎日报】 你都看到这啦,快来点我嘛 Σ(▼□▼メ)

此问题还有 1 个回答,查看全部。
延伸阅读:
有哪些工具或者软件堪称神器?
国内软件盗版流行的原因是什么?

相关 [软件 升级 更新] 推荐:

软件的升级、更新是个怎样的过程?

- - 知乎每日精选
感谢 @ 胡 锦 涛邀请,这个不敢不答啊,说不定已经有数十个快递员在我家门外蓄势待发呢. 在互联网不太普及的时代,很多软件公司还是会发布离线更新包,这种更新包其实就是个安装程序,只是安装的内容是更新的部分,没有变化的文件直接用已经安装的版本的. 此外这些安装程序还会修改一些系统配置以适应新版本的功能,比如注册COM组件,修改注册表等.

【紧急更新】泄密事件再次升级 , 17173 ISpeak 库泄漏 | 小众软件 > 日志

- Stephanie - 小众软件
全民修改密码的时代已经到来,继 CSDN 、 178 、天涯等数据库泄漏之后,17173 、ISpeak 数据库也泄漏,现在正通过各种渠道被下载,但数据真实性尚未确认,初步认定准确性较高,请各位自行判断是否需要更改密码. 再给大家回顾一下到目前为止所泄漏的主要库:. ©2011 root for 小众软件 | 原文链接 | 42 留言 | 加入我们 | 投稿 | 订阅指南.

Android 增量更新和升级

- - CSDN博客推荐文章
在年初的时候,尝试了一把热修复技术,当时选择的是阿里的andfix,使用起来也很简单,这里就不在多少,如果你对andfix有兴趣请链接: 点击打开链接. 虽然网上将热修复的文章很多,不过我还是想说原理,然后配合代码,我想这样大家理解更加深刻. 其实就是用ClassLoader加载机制,覆盖掉有问题的方法.

Fastjson 安全更新,建议升级到 1.2.28 或更新版本

- - 开源中国社区最新新闻
最近发现 fastjson 在 1.2.24 以及之前版本存在高危安全漏洞,为了保证系统安全,请升级到 1.2.28 或者更新版本. 通过 maven 配置更新,使用最新版本,如下:. 1.2.28版本下载地址  http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.28/.

更新nginx版本upstream升级http1.1解决多TIME_WAIT问题

- - 五四陈科学院
以下内容由 [五四陈科学院]提供. 在使用java web container的时候,我们都在前面挡一层nginx,方便使用各种nginx的功能,设置成代理. 访问特别多的时候发现,服务器上存在大量的TIME_WAIT状态的连接. 经分析,可能是nginx早期版本的upstream还是使用的1.0的短连接代理,java container老是以1.0的方式主动断开进入TIME_WAIT状态,浪费了大量的连接.

英特尔再次提供CPU软件升级服务

- alang - Solidot
芯片巨人再一次提供了CPU软件升级服务,上次是解锁额外的L3缓存和超线程功能,这次主要是增加处理器频率. 英特尔升级服务为三款第二代Core处理器提供了三种不同升级:Intel Core i3-2312M升级到Core i3-2393后增加频率和缓存,i3-2102可升级到i3-2153,Pentium G622可升级到G693,这两款处理器都是增加频率.

谷歌升级手机翻译软件 新增12个语种

- 韬光养晦 - cnBeta.COM
网易科技讯 10月14日消息,据华尔街日报网站报道,谷歌13日发布了升级版的手机翻译软件,在继支持英语――西班牙语之间口语翻译之后,又增添了包括中文普通话在内的12个语种. 报道称,在推出移动翻译软件之前,谷歌就一直提供文本翻译和语音转换文字的翻译. 今年1月份,谷歌翻译增添了一项实验性新功能-------让手机即时翻译用户间的通话,但仅限于英语和西班牙语.

一些更新了的翻墙软件

- ap - 细节的力量
来源:http://igfw.tk/archives/1740. WallProxy   官方网址:https://code.google.com/p/wallproxy/. 下载地址:http://wallproxy.googlecode.com/files/wallproxy-win.7z. ASProxyWing 官方网址:http://asproxywing.sourceforge.net/.

可牛杀毒宣布将停止更新 用户升级至金山毒霸

- oky - cnBeta.COM
金山网络今日首次对旗下两个品牌进行调整:可牛杀毒将升级到金山毒霸2012版,并于8月12日停止更新. 据了解未来金山毒霸将专注于安全领域,而可牛将以影像、图形处理为主. 可牛杀毒开发小组今日向用户发布公开信,称即日起将把可牛杀毒全面升级到永久免费的金山毒霸2012,并在8月12日停止可牛杀毒的更新.

提供更多保护 微软免费杀毒软件MSE 2.1引擎升级

- ZeeJee - cnBeta.COM
微软免费杀毒软件MSE(Microsoft Security Essentials)本周迎来了一次版本更新,这之前几次相同,这也是一次常规更新,并不涉及功能方面和用户界面的改变,MSE 2.1用户会受到最新的反病毒引擎的保护.