在说之前,机哥得先给机友们,简单回顾一下啥叫「千年虫」。
在2000年1月1日,全世界的电脑差点集体宕机。可能是计算机出现以来,最大的一次bug了。
但引发这个bug的原因,却是一件不起眼的小事。
上个世纪,电脑的存储空间非常小,所以大家尽可能节省数据量。
比如记录年份时,全世界约定俗成只保留后面两位数字。像「1996年」,只记下「96」。
来到2000年1月1日00:00,问题就出现了:
在电脑的世界,它不知道「00」是「2000年」还是「1900年」。
这就可能导致,某些特定程序计算出来的结果不对,更严重的会让电脑宕机。
而当时的电脑,已经应用在水、电等跟生活密切相关的行业,搞得大家慌得一匹。
还好有些程序猿提前想到了这问题,最终不至于闹到全世界出大bug。
机哥本以为,以现在的科技水平,不会再出现同样的事情,现在看来还是高估了这些大公司。
就在最近,谷歌发出警告称:谷歌Chrome、微软Edge、火狐Firefox,今年(2022年)可能会出现,某些网站无法正常运行的情况。
吓得机哥手一哆嗦,如果某些装满学习资料的网站打不开的话,可咋整?
搞得大家这么紧张,是因为这三家浏览器加起来的市场份额,足足占了全世界72%。
国内的情况也差不多,像第一名的谷歌Chrome浏览器,2021年还有45%的人用着。
它们要是出什么毛病,这影响可不小,怪不得被网友称作「千年虫危机2.0」。
只是这好端端的,怎么会出现这种情况?
当深入了解后,机哥发现背后的原因,让人忍俊不禁。
目前这三个浏览器的版本,如果以最新测试版来计算的话,分别是:
Chrome 97
Edge 98
Firefox 97
它们一般情况下,每6个星期就会进行一次大版本更新。
So,按时间推断,将会在今年上半年,到达版本号100。
像谷歌更是已经公布,Chrome 100将在2022年3月发布。
但问题就出在这里。这是这些浏览器有史以来,第一次出现三位数版本号的情况。
可能有机友会好奇,版本号多了一位,也不至于闹得很多网站不能运行吧?
这次的事情奇葩就奇葩在,很多网站在很多年前开发时,会使用「Duda」来开发,机友们只用知道它是一个网页设计工具包就行。
可能当时也没考虑这么多,只设定了读取浏览器前两位版本号。
比如说机哥这台电脑,有些网站会先搜索「Chrome/」关键词,然后读取它后面的「96」版本号。
所以,一旦变成「Chrome/100」,这些网站只会看到「10」,一下子变成古老的版本。
是的,就是这么简单的一个原因,酿出了大祸。
接下来,更加好笑的事情来了。
在好多年前,Duda把Chrome 40以及之前的版本号“封杀”了。只要检测到浏览器版本号低于40,网站就没办法正常打开。
所以说,Chrome 100,在它们眼中就是不该存在的玩意啊,赶紧杀掉杀掉。
搞得这段日子,在谷歌的开发者论坛上,很多开发者在“嘲笑”这种逻辑。
经过测试,无论是「99」还是「999」,它都能正常运行。但无论是「100」还是「10」,都会报错。
这不就是一个大乌龙么……
(这是一个特定程序,403为报错,200为正常)
于是前不久,机哥看到有网友质疑,这难道不是当初网站设计的时候,程序猿偷懒了,没考虑到日后的事情吗?
这里,情况或许比较复杂。
过去这么多年来,都没出过大事故,是因为Chrome上一次多出一位版本号,从9升到10,已经是2011年的事情了。
这10年来,一直保持两位数的版本号,自然相安无事。
机哥今天掐指一算,Chrome从2008年到2011年,只迭代了10个大版本,平均一年更新3个。按照这个速度,其实需要很久才能达到「100」。
而从2011年到2021年,谷歌仿佛打了鸡血。
十年时间更了差不多90个大版本,平均一年更新9个。
怪不得网友们都在吐槽:谁让你们乱刷版本号的,没有啥大更新,就敢升一个版本号。
但现在木已成舟,有没有法子解决这个事情呢?
不然明年搞得大家都上不了网,就非常可笑了。
机哥看到,目前谷歌想出了两套解决方案。
第一个是,赶紧在今年3月之前,找到那些会崩溃的网站……所以现在Chrome、Firefox、Edge都在不断联系相关的开发者。
甚至谷歌还在开发者网站,给开发者们做了个小工具,强制把浏览器版本号变成「100」,看看网站会不会崩掉。
只是,机友们想想也知道,这个方案的工作量有多大,短短时间要检测辣么多网站。
所以,谷歌还整了一套Plan B:
简单来说就是,以后版本号开头都是99,然后把主版本号放到后面。
比如说,Chrome 99.100、99.101、99.102……
这操作,高通骁龙8 Gen1直呼内行。
就像这位网友说到的,谷歌完全可以考虑99 Gen1、99 Gen2嘛。
不管怎么说,能解决事情就好……机哥上一次这么无语,还是上一次。
搞得几个科技巨头同时如此头疼的事情,可不多见。
所以很多网友,把这次事件称为「千年虫危机2.0」。
实际上,因为一个小小的原因导致bug的事情,这几年陆陆续续也出现了好几回。
像之前,有人把iPhone的日期调回1970年1月1日或之前,手机一旦重启就会变砖。
这是因为,1970.1.1是苹果系统的时间原点。
一回到那个时候,系统内部的时间值会得出一个「0」。再往前的日期,就是负数了,然后手机就傻了。
或许,设计出来的时候,也没想过有人这么闲得蛋疼,把时间调回去半个世纪以前吧。
后来苹果的解决办法倒也简单,把iOS系统的时间设置,锁定在2001年1月1日之后。
(苹果:通过系统更新解决)
所以说,手机、电脑这些精密仪器,还有跑在上面的App,我们用起来很简单,背后却一点都不简单。
很多时候,在设计时可能会带有时代的局限性,没把十几年后,甚至几十年后,也考虑进来。
或许,随着技术的发展、我们对数字世界认知越来越多,类似的事件才会减少吧。