Windows ? + Internet Explorer 10

从2004到20.04,兼谈遗留产品

凡是正经地在开发的软件产品,都会更新版本的。而非常正经地在开发的软件产品,都会定期发布更新版本的。从软件产品的版本管理,很能够看出研发团队的管理成熟度。版本管理不仅决定了研发的节奏,而且划定了迭代的边界。版本更新的背后,是软件重构。重构到一定的程度,量变造成质变,产品不再是原来的那个产品,重起炉灶并从头迭代。这在软件行业来说,并非不常见。但是,软件产品的质变版本命名,不同的研发团队有不同的策略,这一点挺有意思的。大多数的软件产品,是采用所谓的“主版本号递增”的方式来处理。比如说,用0.x来表示“产品还处于探索期”、1.x表示“产品的基本功能已经具备”,2以上的主版本号则代表产品的重要功能增加或重大改进等。当然,也有一些产品在主版本号递增以后也看不出有什么特别重大的变化,属于高冷型,比如VMware的产品就很难说清楚主版本号和次版本号的递增到底有什么区别,好像都是新增一些功能、修复一些缺陷而已。

还有一些软件产品,是以时间为依据来定义质变版本边界的。最典型的就是Ubuntu Linux。从很早的版本开始——如果我没记错的话,应该是2004年10月开始(其实在此之前是有更早的发行版本的,但官网上没有释出),它就是在每年的4月和10月各会发布一次新的主版本,而且版本的命名也非常用心:除了有一个形如yy.mm(公元纪年年份数字后两位和用04和10表示的月份数字,仅有一次例外,即06.06)版本号以外,还每次都有一个使用“偏正式吉祥物名”,即用一个形容词加一种动物名字,作为版本代号。而且,这个形容词和动物名字会每次使用相同的首字母,而且这种组合一般都非常具备赛博朋克风。比如,就在本月发布的Ubuntu Linux最新版本的代号就是“Focal Fossa”,意思是“位于焦点的马岛灵猫”——本篇博客,也正是在新鲜出炉的该版本上撰写的。

马岛灵猫是一种生活在马达加斯加岛上生活和在《马达加斯加》电影上出现的的少见狸猫

最高级的是微软,它的主要操作系统产品——Windows的质变版本号命名方式前后改变了四次。

  • 第一次,是从Windows 1.0到3.x,这个阶段就是用主版本号递增的方式,平凡而且枯燥。
  • 第二次,是从Windows 95到Windows 2000,这个阶段采用年份来命名版本,当然,当中也出过像Windows Millennium这样的妖蛾子(但其实这个词的意义“千年”表明它仍然是以年份为命名依据)。不过,这段时间也是Windows内核走向统一为Windows NT的阶段,这个阶段以Windows 2000为告一段落的标志。也就是说,Windows 2000以降,所有的Windows都是NT内核了。
  • 第三次就分裂了:Windows的桌面版采用代号来命名主版本,而服务器版继续采用年份命名法。这个阶段的桌面版其实只经历了两个主版本——Windows XP和Windows Vista,而服务器版则从2003开始每过几年迭代一次。而且从Windows Server 2003开始,“Server”一词被放在年份之前,而不再使用Windows 2000中把“Server”一词放在年份之后的做法。这个改变其实用意也很明显,它表示“Windows Server”从该版本起作为一个整体,用于命名产品,而年代是它的版本号。换句话说,Windows 2000是最后一个,可能也是唯一一个桌面版和服务器版的产品名字一致的Windows产品。从此以后,桌面版Windows的产品名字就固定为“Windows”,而服务器版Windows的产品名字就固定为“Windows Server”,这样可以有效地避免“不同的产品使用相同的名字”带来的认知混淆。说得再明确一点就是:Windows 2000桌面版(专业版)的后续版本的产品名字不再是Windows 2000,而是变成了Windows,其版本代号是XP;Windows 2000服务器版(服务器版、高级服务器版和数据中心版)的后续版本的产品名字也不再是Windows 2000,而是变成了Windows Server,其版本代号是2003。所以,表面上看只是“Server”一词的位置变化,背后还是涉及产品名字的重新设计,包含着产品管理原则的重大变化。事实上,Windows Server产品正是在这个阶段进行的企业架构重组中被整合到了Windows Server and Tools Business(简称STB)团队,而今天的微软CEO——సత్య నాదెళ్ల,正是从STB团队中涌现出来的新星。可以说,这段时期也是微软乃至整个桌面和服务器软件产业最跌宕、最动荡的精彩时段,移动互联网也是在这一时段,随着iPhone发布进入和占据软件产业的主流。这个变化,无疑反过来大大地刺激了以微软为代表的传统桌面和服务器软件巨头,它们并非没有意识到自己正在被革命,也多少做了一些反扑的尝试。但是,基因的力量是可怕的,没有那个基因,真的无可奈何。好在其实这场革命其实并非像互联网对于传统媒体的打击那样致命,人们总还是需要桌面和服务器软件的,并且这种需求也是难以替代的,但微软不可能不做任何事情、仅仅延续此前的做法而不大受损害。而从现在来看,新的微软印度裔CEO确实是做了正确的事,他一改此前微软的封闭,转而拥抱移动互联网和开源世界——并不是以侵略和打击的方式,而是切实地以共生的方式来发挥微软的优势,所以微软可以说是重获新生,甚至可以说是浴火重生,在变得更加强大的同时也更可爱了。这样的变化也反映在Windows的第四次,也就是沿袭至今的版本命名上。
  • Windows 7是一个极其优秀的Windows桌面版版本,但从版本的意义上它当然远远不如Windows 10来得大。它的主要意义在于,它标志着微软重新回归了初心,不再采用口号式的版本代号,而是回头采用了最朴素的主版本号递增的方式命名。在经历了8和8.1版本后,从Windows 10开始,微软又做出了一个重大的决定,不通过升级主版本号而是转而采用像Ubuntu Linux的年代和月份组合来标识主版本升级。这个改变的意义是影响深远的,这在本质上相当于宣布Windows桌面版进入了免费发行模式。要知道,根据微软的产品销售策略,只要主版本不变,一切更新都是免费提供的。此前所有的Windows主版本最多提供两三年的更新,尤其是会提供若干个称为Service Pack的升级汇总,然后就会升级主版本,并要求用户再次付费才能升级。比如说,之前使用的是Windows Vista,如果想要升级到Windows 7或Windows 8.1就得另外付费购买一套全新的系统,或是付所谓的升级费用,其实后者是难度非常高的操作,非专业用户如果贸然自行操作会遇到大量问题,甚至会有丢失数据的风险。可是Windows 10的做法相当于只要买一次就可以无限升级主版本,甚至可能根本不用买——当然,升级的风险还是一样的,但是至少不用花钱了。说回版本号的问题,这意味着现在的Windows桌面版主版本升级,已经不再改变Windows 10的这个部分,而是看它作为版本号的发布时间。有趣的是,它也是一年发布两次主版本,时间也是在4月和10月前后。不过在主版本之外,它还会针对主版本发布一些次要版本,比如2019年9月发布了一次主版本,后面它又在2019年12月和2020年1月分别针对这个主版本发布了两次次要版本更新。习惯上,微软会把这些主版本也是用“yymm”的形式来指称,比如前一句提到的这个主版本称为Windows 10的1909版本,表示其发布时间为2019年9月(实际上该版本的正式发布日期是2019年12月,微软的发布策略分成若干通道,相当复杂,此处不详述)。也可以用在年份后两个数字加上在“上半年”或“下半年”发布来区分,上半年发布的称为“H1”,下半年发布的称为“H2”,比如也可以把Windows 10的1909版本称为19H2版本。要精确地指称次要版本,就不那么容易了,一般都是说它们的构建号(build number),这就涉及到专业的软件研发知识了,不再展开。最新的Window桌面版,预定将于今年5月12日或13日发布

今年是很有意思的一年,在很多意义上都是如此,但我想说的是它最字面意义上的有意思。按照公元纪年法,今年的序号是2020,所以,按照很多软件产品以年份来进行版本命名的做法,取今年年份数字的后两位是20,如果再在其后加两位月份数字(如果不足两位在前面补零),看起来像是一个很近的年份数字。比如采用这种命名法来表示“2020年4月”就是“2004”,是不是感觉就像不久前的2004年一样?而这正是Ubuntu Linux的第一个公开发行版本发布的年份,故有此“从2004到20.04”一说。2019年和2021年都不会有这种好玩的现象。因为1912年是遥远的过去,那个时候世界上还没有软件产品,而2101年是遥远的未来,那个时候我们应该已经不在。说起来,人类也确实是非常健忘的种族呢——本世纪初,刚刚花费了天大的代价来解决千年虫问题,本质上就是把公元纪年的年份数字从只用后两位表示提升为用全部四位(如果要真正地面向未来,其实应该是全部位数而无论几位)。可这才过了几年,就又开始重蹈覆辙,在版本号表示法上回到了问题解决以前的状态。

主版本号升级除了意味着带来了产品的一个从头开始迭代的全新版本,同时也意味着带来了产品的一个基本不再迭代的遗留版本。当然,一般来说,软件供应商不会在全新版本甫一发布就立即宣布旧版本的死刑,都会留一个时间窗口——有时是相当长的时间窗口——让用户升级,而在该时间窗口内会对旧版本继续提供美其名曰的技术支持。而一般我们也是只对于那些停止了技术支持的版本,或者用更装的术语称为软件生命周期结束的版本,才称为遗留版本(或遗留产品,legacies)。对于遗留版本,研发团队几乎肯定不会再为其增加新功能,即使会再针对它们开发和发布更新——这种工作一般称为持续性工程(sustainability engineering)——也肯定只是会在考虑到用户基数的前提下进行一些不得不做的或顺手可做的更新,比如安全性更新。愿意投入资源来开展持续性工程的企业一般都是有海量用户并极端重视商誉的一线大厂,因为任何正经的研发工作哪怕改动再小的地方都是要整个走一遍流程的,对于大型软件来说需要投入甚高成本。

微软为可持续性工程投入了巨量的资源,时至今日仍然能够正常打开和运行近20年前发布的更新网站

IT产业有着结构复杂的链条,一个边缘应用能够在它所处的软硬件系统上成功运行,决非表面上那般容易。举个非常简单的例子,现在的大多数网站,就不能在比较老旧的浏览器,比如Internet Explorer 8上打开。明明操作系统也能正常运行,浏览器也能正常运行,可是网站就是打不开,为什么呢?因为现在大多数的网站出于安全性考虑已经不再允许在连接时使用已经被证实存在重大安全隐患的加密通信协议——这包括SSL协议的所有版本,以及TLS协议的1.0和1.1版本——转而使用TLS协议的1.2及以上版本,而IE8只支持SSL协议的2.0和3.0版本以及TLS协议的1.0版本。更不用说,底层的HTTP协议也已经升级到了2.0版本并为大量的现代网站所采用,HTTP协议的3.0版本也已经呼之欲出,而IE8只支持HTTP协议的1.0和1.1版本。还有一个虽然不大但决非无关细要的细节,就是现代的SSL证书(是的,现在已经几乎没有人在SSL协议中使用它,但它还是叫SSL证书)分为两种类型——RSA和ECC,其背后使用了完全不同的非对称加密算法,而IE8只支持前者。只要加密通信协议版本、HTTP协议版本和SSL证书这三个条件中有一个不满足,连接都建立不起来,从而也就根本谈不上怎么解析网站内容这一步——尚未登堂,何谈入室!看到了吗?就是打开一个网站这样看起来人畜无害的事项,后面也是需要诸多的支撑条件才能成功完成。所以,类似地,有很多新的应用软件产品只能运行在新的系统软件产品上。因为在今天的遗留软件产品尚未被淘汰之时,它并不可能预见未来会添加怎么样的新功能,更不可能预见未来需要为怎么样的配套协议等做适配。因而,它们不能为那些从一开始就针对其后续版本开发的软件提供支持,也就毫不奇怪。

不仅软件,硬件也是如此。比如,苹果公司就为其发布的何种机型能够运行何种系统版本有明确的规定。iPhone 5C就最高能运行iOS 10.3.3版本,而同一世代的iPhone 5S却最高能够运行iOS 12.4.6版本。我现在手里的两台MacBook Air,购买时间相差不到一年,较早那台已经不能运行macOS Mojave版本,而较晚那台却能够完美运行目前最新的macOS Catalina版本。而且,针对每一种在应用商店中注册了的应用软件,苹果都规定了在某种遗留的iOS或macOS版本上能够运行的最新版本,后面再更新的版本就无法运行了。

遗留产品并非一无是处,正因为针对它的开发已经基本上冻结了——所以有的时候,遗留产品也称为冻结产品——所以,从另一个角度来看,它本身能够运行的条件和在其中能够运行的软件最新版本将不再发生变化。换言之,不再发生变化意味着完全的可预测性,而这一点,对于很多用户来说是求之不得的。在IT产业还没有起飞之前,大多数的硬件和电子产品都不具备任何的客制和更新能力。那样的一个世界已经和我们渐行渐远,可是现在还是有些人会怀念。其根本原因就在于,当时的产品的可预测性非常高,这意味着使用产品时只需要掌握跟产品相关的若干具象的、操作性的概念即可,而不必去考虑诸如版本适配这样的抽象概念。而厂商在做测试和售后服务时,也相对要简单太多。那么,如果是对于不想折腾的用户来说,其实是可以采用一些版本较新的遗留产品,这样就很少会再有需要进行版本升级和更新的麻烦了。而对于比较古老的遗留操作系统产品,能够找到一整套软硬件环境将其运行起来,并在上面运行一些同样古老的的应用软件产品(往往是一些古老的游戏),也是怀旧党们的热衷之事。

最后还是留一个包袱:大家都知道,在不同主版本的Windows上,能够运行的最新Internet Explorer版本是不同的。比如,Windows XP和Windows Server 2003上能够运行的最新Internet Explorer是Internet Explorer 8,而Windows 7和Windows 10上则是Internet Explorer 11。我留的问题是:哪个版本的Windows上能够运行的最新Internet Explorer是Internet Explorer 10?能答对此问题者,有机会得到送出的《信息简史》一本——当然,不一定是最新版本。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据