たいていのコンピューティング・プラットフォームには、自身のOS名やバージョンを得るための機能が搭載されている。たとえば、Linuxなら、unameコマンドでカーネルのバージョンやOS名を得ることができ、/etc/os-releaseでディストリビューションに関連する情報を得ることができる。
Androidでは「設定」アプリの「電話情報」などで、Androidのビルド番号やハードウェアに関する情報を、プログラムからはandroid.os.Buildクラスでバージョン情報を得ることができる。Linuxから派生したAndroidでは、デバッグ用シェル(adb shell)内ではunameや/proc/versionが使える。
Windowsにもバージョンを表示するWinVer.exeや設定 ⇒ システム ⇒ 詳細情報 ⇒ Windowsの仕様、といった機能がある。しかし、Windowsでは、それ以外にもさまざまな方法でWindowsのバージョンなどを調べる方法がある(表01)。これが全てではなく、現在でも利用できるが、Windows 10で非推奨と決定したVersion Helper APIなどは前記の表からは省いてある。
ところがWindows 11でバージョン情報を取得しようとすると、いくつかの方法ではバージョン番号として“10”が返ってくる。場合によっては、もっと前のWindows 8のバージョンが返ってくることもある。こうした「混乱」は、今に始まったことではない。MS-DOSの時代からMicrosoftはバージョン番号で苦しんできており、バージョン情報を取得する機能は、さまざまな形式で提供され、その結果、複数の方法が残り、さまざまなバージョンを返すようになった。
過去には、少なくないアプリケーションがバージョンを等号で判定していた。たとえば、「if(Version==5)」としていたら、バージョンが5.1になったときには成立しない。だったら5以上ならすべてOKにしておけばいいのではないかと思われるかもしれないが、まだ登場してもいない製品の互換性など誰も保証してくれない。万一、将来バージョンで動作させたのが原因でユーザーのデータを破壊したらアプリケーションのメーカーは責任を取らざるを得ない。
このためWindowsは互換性を維持しているにもかかわらず、バージョン番号が増えると、アプリケーションが動かない、インストールできない、といった問題が多発した。本来はアプリケーションのメーカーに言うべき問題なのだろうが、おそらくMicrosoftには「新しいバージョンには互換性がない」といった苦情が殺到したのであろう。
MS-DOSには、setverというコマンドがあって、アプリケーションプログラムごとに報告するバージョンを任意に指定することができた。これは、16 bitアプリケーション専用でWindows Meあたりまで搭載されていたと記憶する。現在のWindowsにも、アプリケーションの互換設定で、アプリケーションのインストーラーなどに過去のWindowsバージョンを報告するといった機能がまだ残っている。
そもそも、アプリケーションがWindowsのバージョンを判定する理由の1つは、Windowsがサポートする機能の有無を知りたいからだ。本当はバージョンの問題ではないのだが、機能が存在していないことを致命的なエラーを起こさずに調べることは難しい。このため、大雑把に、Windowsのバージョンで判定するしかなかった。
さて、Windows 11だが、少なくともメジャーバージョンは10、マイナーバージョンは0で、これは、Windows 10とまったく同じだ。違いは、ビルド番号で、これでしかWindows 11と10の区別ができない。
Windows 11は、いまのところ22000のみだが、今年の秋に登場予定のWindows 11 Ver.22H2のビルド番号は、少なくとも25000よりは小さい値になる予定だ。なぜなら、通常リリースとは無関係のWindows Insider PreviewのDev Channelで配付されているプレビュー版が、ビルド25115と25000以上になっているのに対して、Beta Channelで配付されているVer.22H2のプレビュー版のビルド番号は原稿執筆時点で22621である。つまりビルド番号が22000以上はいまのところWindows 11である。Windows 10は、2015年の最初のリリース(TH1)のビルド番号が10240で、現在のWindows 10 Ver.21H2が19044であり、ビルド番号10240以上22000未満がWindows 10になる。
前掲の表にある一部の機能は、“Windows 11”という文字列を返すが、それらはバージョンではなく「OS名」やCaptionという名前のプロパティになっている。つまり、“Windows 10”や“Windows 11”はWindowsのバージョンなのではなく「名前」なのである。
今回のタイトルの元ネタは、映画にもなった「薔薇の名前」(Il Nome della Rosa,Umberto Eco,1980)である。この小説のタイトルは、小説が描く時代にあった「普遍論争」を背景にしたものだと言われている。庭に生えている薔薇が実在していることは誰もが承知するが、すべての薔薇が持つ概念(普遍概念)については、存在を肯定する実念論(あるいは実在論)と、「薔薇」という名詞だけが存在し普遍概念は存在しないという唯名論がある。この2つの論争が普遍論争だ。世界は、クラス継承のオブジェクト指向、Prologのような述語理論のどっちでプログラムされているのか? みたいな感じである。この唯名論の論客の一人がオッカム(Occam。地名)のウィリアムで、映画「薔薇の名前」(1986年)と同じ頃、この名前にちなむ“Occam”が並列プログラミング言語の名前として使われ奇妙な一致を感じた。もっとも、普遍論争自体は、小説や映画では表だって扱われていない。映画や小説で扱われるのは「清貧論争」で、映画ではキリストの衣服はキリストの所有物なのか、で大激論(というより罵り合い)していたのが印象的である。