但 Windows 是一个闭源系统,没有对 Windows 系统的了解( IT 运维层面)和一定的逆向能力,就很难真正搞清楚各个组件之间的依赖关系,大多数时候只能靠猜。即便猜对了完美删除了某个系统功能,也无法保证第三方软件不会因此出问题(一些软件假定系统具备某个功能)。比如我自己遇到过,删了 Print Spooler 服务之后,Acrobat 安装的时候就直接回滚了。winutil 之前也出现过一个问题:删除 Recall 导致文件资源管理器出现问题,因此将代码回滚了,后来发现是微软犯了一个错误:
很多所谓的“大神”其实只是投入了更多时间去反复试错,积累了更多的经验。甚至有些人不懂逆向分析、不会 Windows 编程,连自动化脚本都不会写,只是重复性地在 NTLite 这类工具点点按钮、敲敲键盘,最后还说耗费了很多精力(可不吗)。其实只要掌握一点自动化工具的使用,发布新版本的精简系统并不是什么难事。
从技术的角度上来说,精简无非是保证系统不去使用某个文件,然后就可以安全地把这个文件删除或修改了。
我对精简始终保持一个怀疑态度,即便是 Windows 的开发人员也未必完全了解整个系统的组件的依赖关系。Windows 系统很复杂了,纯粹依靠经验和试错是不行的。如果定制系统禁用某个功能,就像 if (false) 一样,那是可以接受的。但如果是暴力删除文件等行为导致这个功能失效,则是非常严重的错误。尽管他们在结果上相同,但后者是不可以接受的,经验法则此时就无法区分出两种情况。
而且 Windows 的变化非常频繁,微软经常塞一堆新功能进来,想精简最新系统就必须不停追踪更新,了解每次更新新增了什么内容,怎么去除这些新组件。这就要求你经常在网络上搜索资料,在各大社区(比如 My Digital Life )追踪最新的修改方法。更别提现在很多功能都捆绑在一起了,根本无法部分移除,修改 DLL 等二进制文件吗?不太现实,数字签名也不会允许这么做。
另一个不容忽视的问题是安全。即使精简版系统的制作者主观上没有恶意,他也很难保证整个构建链条的安全性,尤其是使用了一些非官方的闭源工具的时候,一些系统封装工具可能是重灾区。我想起很旧以前用老毛桃官方 PE 重装系统的经历:那次我安装的是原版镜像,用的是官方最新版的 WinNTSetup ,但浏览器主页还是被篡改了,我发现后又立马重装了。修改主页还是可以被观测到的轻微的问题,谁知道是否还有其他更加恶劣的行为。我现在只使用官方的 PE (只有一个 CMD 窗口)——在系统安全性这件事上,再怎么小心都不为过。
如果是安装在虚拟机中,而且对安全性没有要求,比如测试一个离线运行的软件,那使用这些精简版系统其实也挺方便。有时候我也装来看看,才知道哦原来这个功能是可以关闭的啊,学习了。我自己也会做一些定制,但目的不是为了节省硬盘空间或显著提升性能,只是为了不想看到 Windows 那些乱七八糟的预装内容,眼不见为净。我不提倡暴力精简(以减少镜像体积),但我提倡定制系统来禁用不需要的功能。
我设想过做二进制可重现构建的 WIM 镜像,但发现这需要非常多的工作,尤其是在 Windows 闭源的现状下——哪怕只是挂载一次注册表、什么都不改,它的内容也会发生变化。这样我还得去理解注册表的文件结构以及为什么改变了,太累了!其实我有点羡慕 Linux ,一切都是公开的,或许哪天我会把 Linux 当成主力吧。