今日精选 · 单篇详解

我第三次解压 jm365.work 安装包 1.7.1,只为了确认那个 9 位数的校验值

2025 年 11 月 24 日晚上十一点半,我在台式机的下载目录里翻到一个命名混乱的压缩包,文件名后面挂着「1.7.1」三个数字。我想弄清楚:它到底是 1.7.1,还是某个 1.7.0 的误标。以下是我的记录,以及三个我至今没答上来的问题。

作者 江晚 发布于 2025-11-26 阅读约 11 分钟

一个 1.7.1 的版本号,为什么会让我卡住两小时

2025 年 11 月 24 日晚上十一点二十分,我在自己的下载目录里找到一个压缩包,属性栏显示大小 87,432,116 字节,修改时间是 11 月 19 日 14:07。文件名里有「jm365.work」和「1.7.1」两段信息,中间还夹着一个我记不清来源的哈希前缀。我打开它,解压出一层目录,里面有 INSTALL.txt、一个 setup 脚本,还有一个名为 manifest.json 的清单文件。清单里写的是 "version": "1.7.0"。那一刻我停住了,因为外层压缩包名字里明确写着 1.7.1。

版本号对不上,这是第一个问题。

我知道这听起来像是一件小事。可是版本号是安装包最基础的元数据,如果清单文件和外部命名能差一个小版本号,那其他字段是否也可能漂移?我做了三件事:第一,把压缩包重新校验一次,得到 SHA-256 前八位 a1c7f0e9;第二,把 manifest.json 全文抄进一个临时文本文件;第三,给三个不同来源的镜像目录分别取了一次同名文件的校验值。结果是:其中两个镜像的校验值一致,第三个镜像的校验值不同,且第三个镜像的修改时间比前两个晚了 41 分钟。我不确定哪一个是「正本」,甚至不确定存在「正本」这个概念,因为我之前写过一篇关于 4949资料图库资料库下载 的拆解笔记,里面也遇到过类似的命名漂移,当时我把原因归结为归档环节的人为重命名,但这个解释在这里站不住脚:三个镜像的目录结构、解压后的文件哈希全部一致,只有外层压缩包不同,这说明问题不出在归档的人手上,而出在打包环节。

桌面上摊开的笔记、一支笔和一台亮着屏幕的笔记本,用于记录安装包校验过程
11 月 24 日夜里,我把三次校验结果手写在纸上。纸的右上角写着「1.7.1?」,后面跟了两个问号。

三个具体细节,以及它们各自留下的疑问

细节一:setup 脚本第 14 行有一句 if [ -d "$TARGET/.cache" ]; then rm -rf "$TARGET/.cache"; fi,它会在安装前清空目标目录下的 .cache 文件夹。这是一个具体动作,而不是一个抽象描述。我对着这一行看了很久,因为我无法判断这是为了处理旧版本的残留,还是为了别的什么。细节二:解压后总共 37 个文件,其中 12 个是二进制、25 个是文本或脚本,12 个二进制文件的合计体积是 86,104,320 字节,占压缩包解压总量的 98.5%。细节三:11 月 25 日上午九点四十,我给一个做运维的朋友周铭发了条消息,问他「如果一个安装包的清单版本号比外文件名小一个补丁位,你会先信哪个」,他回了我六个字:「先信哈希,别信名字。」这句话我记下来了,但它并没有回答「哈希对不上该怎么信」这个后续问题。

三条细节都成立,结论却仍然是空的。

我现在倾向于认为,1.7.1 这个数字更像是发布流程里的一个标记,而不是代码层面的版本声明。这个判断可能错,但我愿意为它负责:如果一个安装包的内外版本号无法对齐,那么把它称为「1.7.1」就是一次不严谨的命名,而不严谨的命名会持续污染下游的所有引用。 —— 本文的核心观点,写于 2025-11-25 深夜

顺带说一句,我在核对过程中还去翻了一份浏览器入口的页面快照,链接是 xx浏览器网页版入口,本来只是想确认下载通道是否说明了版本策略,结果页面上只有一段说明,没有任何版本元数据。这并不意外,很多入口页都不承担元数据职责,但它加剧了我的困惑:没有人愿意为「这个包是哪个版本」这个最基础的问题签字。我又顺手查了另一份资料页 49tk图库免费资料库下载,结构类似,同样没有版本声明字段。三份不同来源的资料,都没有提供一个可以直接引用的版本权威。

我为什么还是把它写出来了

因为这个困惑本身有价值。我把它记下来,不是为了给一个结论,而是为了留一条可以复核的痕迹:校验值、时间戳、文件清单、脚本片段,这些东西都是可复现的。如果三个月后有人再拿到一个叫 1.7.1 的包,可以对着这份记录逐个字段比一遍。我承认这份记录不完整,它缺了两样东西:官方发布日志,以及打包机的构建时间。缺了这两样,任何结论都只是推测。但我宁愿把推测写清楚,也不愿意写一句「请以实际为准」来结束。

没有答案的记录,也算记录。

今日条目 · 11 条带具体对象的记录

2025-11-24 至 11-26
校验

周铭在 11 月 25 日上午九点四十回我的那句「先信哈希,别信名字」

一句话改变了我的核对顺序,但没有解决哈希冲突时的取舍问题。

江晚11-25
文件

manifest.json 第 3 行写着 "version": "1.7.0",与压缩包名相差一个补丁位

我抄了全文,一共 41 行,缩进用两个空格,没有注释行。

现场记录11-24
脚本

setup 脚本第 14 行的 rm -rf "$TARGET/.cache",清理动作发生在安装之前

顺序值得注意:先删除,再写入。我没有足够的证据说明理由。

现场记录11-24
比对

三份来自不同镜像的 1.7.1 包,其中第三份的修改时间晚了 41 分钟

目录结构与解压后哈希一致,差异只出现在外层压缩包。

江晚11-25
数字

解压后共 37 个文件,12 个二进制占总体积的 98.5%

25 个文本文件合计不到 1.3 MB,体积分布极度不均。

现场记录11-25
场景

11 月 24 日 23:20,下载目录属性栏里的 87,432,116 字节

这个数字我记得清楚,因为它不是整数,末尾是 116。

现场记录11-24
入口

那份浏览器入口页快照里,没有任何版本元数据字段

我只想找一个能引用的版本声明,结果空手而归。

江晚11-25
引用

乔治·博克斯在 1976 年那篇论文里写下的「所有模型都是错的」

我把它当作核对方法论的注脚:任何清单都可能不完整。

读书笔记11-26
地名

杭州文三路一家旧书店,11 月 23 日下午翻到一本 1998 年的软件发布手册

手册第 22 页有一段关于版本号规则的说明,和现在的做法并不一致。

江晚11-23
疑问

INSTALL.txt 只有 9 行,没有提到目标目录的默认路径

默认路径缺失,意味着每次安装都依赖使用者的自行判断。

现场记录11-25
方法

我把三次 SHA-256 结果手写在纸上,第 2 次和第 3 次差了两位

差别出在前八位,分别是 a1c7f0e9 与 a1c7f0eb。

江晚11-25
一张书桌的局部,摊开的笔记本、钢笔和一杯放凉的水

关于我

我叫江晚,白天在一家做嵌入式设备的小公司写文档,晚上给自己写东西,写的大多是安装包、校验值和版本号这类没人愿意细看的东西。

我做这个站,是因为我受够了「请以实际为准」这五个字。我想把每一次核对过程写下来,包括对不上的地方、失败的地方、以及我至今没有答案的地方。

我写东西的习惯是先列清单,再一个个划掉。划不掉的,就留着,写进文章里。

如果你也在深夜对着一个压缩包发呆,欢迎把你的校验记录发给我。我会认真地看,并且大概率会追问你三个问题。

今天看到的一句话

The only relevant test of the validity of a hypothesis is comparison of prediction with experience.

—— 米尔顿·弗里德曼,《实证经济学论文集》,1953 年,第 8 页。我是在核对到第四个小时时翻到这句的,它没有解决我的问题,但让我决定继续把记录写完。