ちょろげ日記

日々のちょろっとしたことを

なぜ次世代Windowsが9ではなくて10なのか?前方一致で95/98をチェックするコードが蔓延してるから説の出典

次世代Windwosの正式名称が「Windows 10」であるとマイクロソフトが発表し、なんで9じゃなくて10なの?とちらほらと話題になっています。

そんな中、次のツイートが数多くリツイートされ、9にしなかった理由の本命か?という声も出ています。

ただ、ちょっと出典が曖昧でなんとなく都市伝説化?しそうだったので調べてみました。
 
 
まず、この説の初出はアメリカのソーシャルニュースサイト「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"))」の検索結果が並んでいて、それなりにそういったコードがあることを裏付けています。

f:id:tyoro_ge:20141002230616j:plain

Search for if(version,startswith("windows 9") | source code search engine  
 
 
その後、このredditの書き込みを紹介するMikko Hypponenさんのツイートが話題になり、この説が更に広まっていったようです。

この時点で、cranbourne=マイクロソフト開発者が確定のように扱われていますが、どうなんでしょうか。ちょっと調べて限りではわかりませんでした。  
 
 
ということで、ソースはredditの書き込みです。いまのところ以下のことを確認するのは難しそうですので、そのつもりで話のネタにする分にはいいんじゃないかなと思います。

  • cranbourneはマイクロソフトの開発者なのか?
  • マイクロソフトはif(version.StartsWith("Windows 9"))…みたいなコードを使っているサードパーティ製品がどれだけあるか調査したのか?
  • その結果、「バージョン判別しようとしてOS名を取得して前方一致で"Windows 9"だったら95/98系と見なすという糞コードが蔓延して」いたのか?
  • それによって、9でなくて10にしたのか?