なぜ次世代Windowsが9ではなくて10なのか?前方一致で95/98をチェックするコードが蔓延してるから説の出典
次世代Windwosの正式名称が「Windows 10」であるとマイクロソフトが発表し、なんで9じゃなくて10なの?とちらほらと話題になっています。
そんな中、次のツイートが数多くリツイートされ、9にしなかった理由の本命か?という声も出ています。
Windows8.1の次が10になった件は、バージョン判別しようとしてOS名を取得して前方一致で"Windows 9"だったら95/98系と見なすという糞コードが蔓延しているので避けたという話をFacebookで見かけた。説得力ありすぎる。
— digitalcat (@digitalcat) 2014, 10月 2
ただ、ちょっと出典が曖昧でなんとなく都市伝説化?しそうだったので調べてみました。
まず、この説の初出はアメリカのソーシャルニュースサイト「reddit」です。
[–]cranbourne
Microsoft dev here, the internal rumours are that early testing revealed just how many third party products that had code of the form
if(version.StartsWith("Windows 9"))
{ / 95 and 98 /
} else {
and that this was the pragmatic solution to avoid that.
新しいWindowsのバージョンはなんで10なの?というスレッドで、マイクロソフトの開発者を名乗るcranbourneさんが
「内部の噂では、if(version.StartsWith("Windows 9"))…みたいなコードを使っているサードパーティ製品がどれだけあるかを早期テストで明らかにしていて、9じゃなくて10にしたのはそういったコードに影響がでるのを避けるための実用的な解決策だった、ってことだよ(超適当意訳)」
と書き込んでいます。
これに対して、カーネルのバージョン(下記)で判別するだろうから影響ないでしょ?この説はウソじゃないか?といった(と読める)やり取りがありますが、
Kernel version 3.1 = NT 3.1
Kernel version 3.5 = NT 3.5
Kernel version 4.0 = NT 4.0
Kernel version 5.0 = Windows 2000
Kernel version 5.1 = Windows XP
Kernel version 6.0 = Windows Vista
Kernel version 6.1 = Windows 7
Kernel version 6.2 = Windows 8
Kernel version 6.3 = Windows 8.1
「彼らはバージョンでチェックしないんだよ、OSでチェックするんだ。これを見て泣けよ。」と次の通り一蹴されていました。
They don't check the version, they check the OS. Run this search:
Search for if(version,startswith("windows 9") | source code search engine
read it and weep.
紹介されているリンクの先には「if(version.StartsWith("Windows 9"))」の検索結果が並んでいて、それなりにそういったコードがあることを裏付けています。
Search for if(version,startswith("windows 9") | source code search engine
その後、このredditの書き込みを紹介するMikko Hypponenさんのツイートが話題になり、この説が更に広まっていったようです。
A Microsoft developer explains in a Reddit thread why Windows 10 is called Windows 10. pic.twitter.com/qJFi8yJEJg
— Mikko Hypponen (@mikko) 2014, 10月 1
この時点で、cranbourne=マイクロソフト開発者が確定のように扱われていますが、どうなんでしょうか。ちょっと調べて限りではわかりませんでした。
ということで、ソースはredditの書き込みです。いまのところ以下のことを確認するのは難しそうですので、そのつもりで話のネタにする分にはいいんじゃないかなと思います。
- cranbourneはマイクロソフトの開発者なのか?
- マイクロソフトはif(version.StartsWith("Windows 9"))…みたいなコードを使っているサードパーティ製品がどれだけあるか調査したのか?
- その結果、「バージョン判別しようとしてOS名を取得して前方一致で"Windows 9"だったら95/98系と見なすという糞コードが蔓延して」いたのか?
- それによって、9でなくて10にしたのか?