@
loqixh @
ly841000 @
jun4rui 三位关于Windows和Linux内核支持实时补丁的讨论实在让我刮目相看,尤其是 @
ly841000 提到他居然选修了“Linux内核”这个高深的科目之后,更是令我虎躯一震——这是需要多大的勇气才能坚持并且完成的任务啊!
好了,玩笑归玩笑,我实在是觉得大伙在讨论这种“事实判断”之前,最好Google一番找找相关资料。关于“事实判断”,最简单的证明方法就是找到官方或者权威人士的资料或数据了。这个和“PHP是最好的编程语言”不一样,不是大家吹牛逼就好了。
我大概Google了一下,微软在Windows Server 2003 SP1的时候引入的HotPatching。参见这篇文章:
http://jpassing.com/2011/05/01/windows-hotpatching/ 此文作者是Johannes Passing,他是Windows内核方面的权威,目前在德国做咨讯服务,相关经历参见此人LinkedIn:
https://www.linkedin.com/in/johannespassing 从这一点看,@ly841000 的说法确实是有依据的。但是仔细看就会发现,微软所谓的HotPatching并不能让所有补丁都实时地打上。原文中的说法是:“it is, however, not applicable to all kinds of code fixes. Generally speaking, it can only be used for fixes that merely comprise smallish code changes but do not affect layout or semantics of data structures. A fix for a buffer overflow caused by an off-by-one error, however, is a perfect example for a fix that could certainly be applied using the Hotpatching infrastructure.” 这段描述则符合 @
jun4rui 的说法。而且从这些描述看,和Linux的Live Patch好像还是有区别的,但是微软没有公开这个特性的实现细节,所以不好判断。
在微软的官方页面上,HotPatching只在Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2上有:
https://technet.microsoft.com/en-us/library/cc781109(v=ws.10).aspx 换句话说,@loqixh 说的Windows XP也支持那就无从谈起了。而且从支持的列表上看新版本的Windows系统早就不支持这个特性了。
如果你认真读一下我前面给出的Johannes Passing的那篇博客就知道,微软早就放弃HotPatching这个特性。原文是:“In the months after the release of SP1, a certain fraction of the hotfixes issued by Microsoft were indeed hotpatch-enabled and could be applied without a reboot. Interestingly, however, I am not aware of a single hotfix issued since Server 2003 SP2 that supported hotpatching!” 从我前面给出的支持列表里看,之后的操作系统也的确没有支持Htopatching这个特性了。部分原因是出于安全考虑,比如这个:
http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Sotirov.pdf有意思的是,在HN上之前也讨论了Linux内核的这个特性
https://news.ycombinator.com/item?id=9028389 。那里在讨论到windows和其他操作系统的特性的时候,总会有个发言者给出了连接或者特性的名称方便大家搜索。真心建议大家在讨论这种事实判断之前,先去找找事实。我个人真的很不喜欢拿在讨论中资历去压人,更何况这个资历是“曾经选修了Linux内核“……