
次期Windowsの名称がWindows 10になった理由は? 137
ストーリー by headless
新型 部門より
新型 部門より
あるAnonymous Coward 曰く、
/.J記事のコメントでも話題になっていたが、次期Windowsの名称が「Windows 9」ではなく「Windows 10」になった理由について憶測が飛び交っている(BusinessNewslineの記事、 Engadget日本版の記事、 本家/.)。
一つは悪評高いWindows 8を継承する数字としての「9」を避けたというもの。一つ飛ばした「10」という数字にすることでWindows 8の良くないイメージを断ち切り、新たなOSであることを打ち出しているというのだ。
もう一つは/.Jでも指摘されていた、OSバージョンをWindows 95/98と誤判定する古いコードがあるという理由だ。Microsoftの開発者を名乗るユーザーによるredditへの投稿では、「if(version.StartsWith("Windows 9"))...」のような形でOSバージョンを判定するサードパーティーソフトウェアが数多くあり、現実的な回避策として「Windows 10」になったと社内で噂されているという。searchcodeで「if(version.StartsWith("Windows 9"))」を検索すると相当数がヒットするので、バージョン判定コードの問題は次期OSの命名に少なからず影響したのではないかと思われる。
この件に関するMicrosoftの回答は「Windows 10は物事を行う上での新しい方法を推進するWindowsを意味します。数字が増えたのではなく、さらに多くのユーザーに力を与える新しいWindowsです。」といった内容で、謎を謎のままにするものだという(Gizmodoの記事)。
Microsoft が内部バージョンの偽装をするのが諸悪の根源 (スコア:5, 参考になる)
プログラム開発者にとって、Windows の内部バージョンは下記のように合理的な管理となっていることから、一見使いやすいように思えます。
Ver. 5.0 … Windows 2000
Ver. 5.1 … Windows XP (32bit)
Ver. 5.2 … Windows Server 2003、Windows XP (64bit)
Ver. 6.0 … Windows Vista
Ver. 6.1 … Windows 7
Ver. 6.2 (6.2.9200) … Windows 8
Ver. 6.3 (6.3.9600) … Windows 8.1
V er.6.4 (6.4.9841) … Windows 10 (Technical Preview)
そのため、わざわざブランドバージョン (Windows 7, Windows 8, Windows 8.1 など) の数値を取り出してきて文字列処理するコードを書く人を糞プログラマー扱いする人が居ますが、Microsoft が内部バージョンを偽装するのが諸悪の根源 なのです。
例えば、Windows 8.1 で、GetVersionEx() API を用いると、6.2.9200 (Windows 8 と同じ) という偽装された値が返ってきます。
また、Windows 10 の Technical Preview 版で、GetVersionEx() API を用いると、6.3.9600 (Windows 8.1 と同じ) という偽装された値が返ってきます。
何故、Microsoft がこういうことをするかというと、「Windows 8 を Windows 8.1 に変更したら、今まで動いていたアプリが動かなくなった」というクレームを受けたくないからでしょう。
しかし、プログラマーとしては、Windows 8.1 での動作確認が済むまでは「あなたがご利用のOSは、このソフトウェアではサポートしていません。」とエラーを出して強制終了する動作にしたかったりするわけです。動作を確認していない OS で動かしたことにより不具合が発生して、重大な経済的損失が発生することもあるのですから。
だからこそ、GetVersionEx() などの API を使わずに、ブランドバージョンを取得して文字列比較するといったコードを書いたりするのです。このような Microsoft の対応は、ウイルスバスターの連続誤検出問題で話題となった「いじくるつくーる」の作者さん [inasoft.org]なども疑問視しています。
もちろん、他の API を使う [livedoor.jp] だとか、マニフェストの宣言によって API による内部バージョン偽装を阻止する [inasoft.org] といった方法もあります。後者については、Windows 8.1 で起動させないようにするために、Windows 8.1 に対応しているというマニフェストを書かないといけないのが不合理に感じます。
これからのアプリは、上位互換を保障するべき (スコア:5, 参考になる)
ちょっと調べたら、GetVersionExは、既に非推奨になってますね。
で、「互換モード」を設定すると、GetVersionExが偽装される仕組みになってると。
つまり、Win8.1は「Win8.0互換モードが標準」って事です。
逆に言えば、「Win8.0で動くのにWin8.1じゃ動かない」なら「M$が悪い」って言い切れば良い訳です。
実際問題として、SP等が入ると、GetVersionExは変わらないのに機能がごっそり変更されたりします。
だから、機能を個別に認識して動作するのが本来の姿なんでしょう。
ついでに言えば、「動作未確認だからサポート外」ってのは、ソフト屋の甘えだと思います。
現実に、「アプリが未サポートだからXPから移行出来ない」って問題がありました(多分まだ在る)。
最近の攻撃状況から見ると、古いOSの脆弱性に起因するセキュリティ問題は、使用者だけでは無く、他者も巻き込む重大懸念事項です。
だから、動作未確認の環境でも「一応動作する」様に作りこむべきだし、リリース後は至急サポート対象にするのが、今後のソフト屋に望まれる姿勢かと。
「そんな費用何処から出すんだ?」って問題は、「サポートを売りつける」モデルを採用すれば解決出来ます。
もう、売りっぱなしじゃ済まない時代になってるんじゃないでしょうか。
-- Buy It When You Found It --
検証していない環境をサポートするのは不可能 (スコア:3, すばらしい洞察)
笑っちゃうほどおかしな話ですね。
どれだけコストを掛けても、未知のAPI変更に対応することなんて不可能です。
動くかどうか判らないものをサポートするには、お金がかかるかからない以前の問題です。
「20年後も、このテレビが映るようにしてくれ」ということと同じですよ。
放送の方式が変わるかもしれないし、補修部品を作成していた会社がなくなるかもしれない。
テレビ等は方式が公開されていて多数の会社が製作できますが、Windowsはたかだか一企業が作成しているOSです。
コストをかければプレリリース版等で早くから情報を掴んで、新しい対応バージョンを前もって用意することはできるでしょうし、
問題が起きたらすぐに直すように待機部隊を用意したりすることも当然できるでしょう。
ただそれは、本来サポートできるか、新しいOSに対応できるかどうかとはまた別の話です。
未知の変更に必ず対応できるという保証は誰にもできません。
Re:これからのアプリは、上位互換を保障するべき (スコア:2)
> 逆に言えば、「Win8.0で動くのにWin8.1じゃ動かない」なら「M$が悪い」って言い切れば良い訳です。
これでお客さんが納得してくれるなら良いんですけどね。
「だったら非対応って書けや!」とか「確認くらいしろよ!」、「おたくはろくに確認もせずに『対応』と言い張るんですか?」と文句がくるのは確実で、すぐに信用問題に発展しますよ。
お客さんが企業ユーザーでもエンドユーザーでも。
Re:これからのアプリは、上位互換を保障するべき (スコア:1)
実際問題として、GetVersionEx()を使ったハックで、「Win8.0で動くのにWin8.1じゃ動かない」って例があるんですかね?
そもそも、GetVersionEx()は非推奨APIなんだから、これでバージョン判定するアプリは、「本当はWindows8非対応だけどなんとなく動いてる」状態だと考えるべきかと。
(MSDNの記述通りに、キチンと各機能の有無を個別に判定すれば、GetVersionEx()の偽装は問題にならない)
-- Buy It When You Found It --
Re:これからのアプリは、上位互換を保障するべき (スコア:2)
実際問題があるかどうかはあまり関係無いですよ。
Windows 8.0対応のプログラムを開発しているときには、8.1でも全て正常に動作するなんてことは保証出来る訳ないんですから、万一を考え
このスレッドの大元のコメントにあるような
しかし、プログラマーとしては、Windows 8.1 での動作確認が済むまでは「あなたがご利用のOSは、このソフトウェアではサポートしていません。」とエラーを出して強制終了する動作にしたかったりするわけです。動作を確認していない OS で動かしたことにより不具合が発生して、重大な経済的損失が発生することもあるのですから。
という話になる訳です。決して技術的な話じゃないですよ。ソフトウェア開発元が責任やリスクをどう考えるかの問題です。
Re:これからのアプリは、上位互換を保障するべき (スコア:3)
逆に、「Win8を8.1にアップデート(半ば自動で行われる)したらアプリが起動しなくなった」リスクも存在する訳です。
で、そのような状況への対応には「GetVersionEx()を使ったハックを使うべきでは無い」のです。
何しろ、MSDNで使用が非推奨なのだから、非互換に起因する責任は、ソフトウェア開発元が負う事になります。
そして、厳密に「Win8.0でだけ動作」させるなら、マニフェストに明記するべきです。
半端に「8.0以上8.1未満(多分)に対応」と指定するから、GetVersionEx()を使ったハックが必要になる訳なので。
-- Buy It When You Found It --
Re:これからのアプリは、上位互換を保障するべき (スコア:2)
>そういうコストをかけるより、OSのバージョンを見て有無が判別できるなら、そちらを選ぶ開発者の方が多いと思う。
うん、私も多分そうする^^;。
でも、これは、将来のリスクと現在の開発コストとの折り合いの問題。
すぐに対応出来る体制なら「手抜き実装も有り」だし、将来メンテ不能になることが分かっていて、且つ、キチンと対応しないと自身の信用問題になるなら、「コストは掛かっても手抜きは厳禁」とするべき。
ま、「どうせ切り捨てられるから、真面目に実装なんてしてられない」って人が多いのが実情で、同時にソフトの信頼性を低下させてる原因だと思うが。
-- Buy It When You Found It --
Re:これからのアプリは、上位互換を保障するべき (スコア:1)
未確認なのにどうやって?
なるべくレガシーな機能や特殊な機能を使わない等ある程度は考慮するにしても、
突然のOSの仕様変更にあらかじめ対処するのは無理ってものだろう。
Re:これからのアプリは、上位互換を保障するべき (スコア:3, 参考になる)
http://msdn.microsoft.com/ja-jp/library/cc429835.aspx [microsoft.com]
>オペレーティングシステムの特定の機能が存在するかどうかを判断することを目的としている場合、現在(開発時点で最新)のオペレーティングシステムのバージョン番号だけを指定する方法は、通常は最善とは言えません。再配布可能な DLL という形で、新しい機能が追加されている可能性もあるからです。このようなことを目的としている場合、GetVersionEx 関数を使ってオペレーティングシステムのプラットフォームまたはバージョン番号を判断する代わりに、その機能が存在するかどうかをテストしてください
ここ見る限り機能検出を推奨してるように見えるが
Re:これからのアプリは、上位互換を保障するべき (スコア:1, 荒らし)
>サポートできる状態を維持するコストが永続的にペイできるわけがない
当然です。
だから、年額方式の様なサポート体制にしろって言っているのです。
顧客のシステムも永続する訳ではないのだから、帳尻は合います。
-- Buy It When You Found It --
Re:これからのアプリは、上位互換を保障するべき (スコア:1)
何のためにPreview版があるのかと小一時間
Windows 8 のテクニカルプレビューを試用したことがある人ならば、このような意見が机上の空論であることがわかるはず。
Re:Microsoft が内部バージョンの偽装をするのが諸悪の根源 (スコア:2)
「あなたがご利用のブラウザは、このWebサイトではサポートしていません。」とエラーを出して使わせてくれないWebサイトも大目に見てあげよう。;-)
Re:Microsoft が内部バージョンの偽装をするのが諸悪の根源 (スコア:1)
言わんとすることは理解できるけど、このストーリーの主題である、startwithで比較するような糞コードはどんな理由でも擁護できないですね
Re:Microsoft が内部バージョンの偽装をするのが諸悪の根源 (スコア:1)
糞なのは名前と比較していることではなくて、前方一致で比較していることですよ。
本当に動作検証した環境だけサポートしたいのであれば、完全一致で比較するべきです。
ところでGetVersionExが正しいバージョンを返さない仕様は、私もかなり疑問です。
depricated扱いにされちゃっているので、「今回はマニュフェストがあれば通してるけど、次はもっと頑張っても正しいバージョンは得られなくするかもよ。」というMSの意図を感じます…
Re:Microsoft が内部バージョンの偽装をするのが諸悪の根源 (スコア:1, 参考になる)
そろそろ我慢できなくなってきたから言うけど、MSはドキュメントでVerifyVersionInfo(またはそのラッパーマクロ)を使えと明言しているのに、わざわざ怪しげな方法 [livedoor.jp]を探し出してくるお前らみたいなバカのせい。
ちなみにMSがVerifyVersionInfoを推奨するのはこういうバカ [srad.jp]でも「バージョンx.y以降」を正しく判定できるから。
Re:Microsoft が内部バージョンの偽装をするのが諸悪の根源 (スコア:2, おもしろおかしい)
GetVersionExはNT3.5・95以降で使用可能。
VerifyVersionInfoは2000以降で使用可能。
移行期はVerifyVersionInfoを確実に使うにはGetVersionExで2000以降なのを確認した上で、GetProcAdressでVerifyVersionInfoのアドレスを取得しなきゃいけないのが余計な手間がかかるから嫌がられたんでしょうな。
あとは「先人の知恵」を拝借する習慣の繰り返し。
どうして一次資料を見ないのか? (スコア:2, 参考になる)
先頭に、別のAPI使えって書いてあるし、
ちゃんとサンプルコードの例示もあるのになー
http://msdn.microsoft.com/ja-jp/library/cc429835.aspx [microsoft.com]
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms724451(v=vs.... [microsoft.com]
野良情報を読むなとは言わないが、合わせて1次情報を必ず参照するのは基本中の基本だよね。
ググって野良情報を鵜呑みにするとか最低。
それならググらない方がまだマシ。
Windows8.1はWindows8SP1 (スコア:1)
GetVersionExで同じ値が帰るなら、「内部バージョンは変更されていない」と解釈するのが本筋でしょう。
つまり、商業上の理由で8.1と言っているが、実はSP1って事です。
XPでも、SP2等で「GetVersionExで同一バージョンが帰るが内部的には別物」となった実績(?)がありますし。
SP1だと解釈すれば、「バージョン番号の偽装」では無いですよね。
実際、今後のWindows8の方針として、8.1だけがサポートとなり、8.1へのアップデートが必須となる様ですし。
XPのSPでは、「アプリ側での対応が当然」と看做されていた様に思います。
で、実際の所としては、「COMを使った機能の確認」や「DLLのバージョンを判定しての処理」がM$の推奨手順で、GetVersionExでの代用は出来ない旨の記述がMSDNに明記されてます。
元々、GetVersionEx自体がWindowsAPIだから、他のWindowsAPIで機能を明示してその動作を認識する実装が「正当な方式」なんです。
「ブランドバージョンを取得して文字列比較する」実装も、結局はダーティハックであり、DLLのバージョン変更(WindowsUpdateで常用される)に対応出来ない欠陥があります。
実の所、Windowsは「単一バージョンの判定処理」だけでは対応出来ない面倒なシステムとなってます。
「使用する機能を明示して、その機能のバージョンを取得する」実装が正当と言うのも、その事に由来してます。
アプリケーションマニフェストも、(非常に記述が面倒だが)機能を個別に指定する仕組みが入ってます。
バージョン番号で全体の動作を切り替えるのでは無く、機能個別でバージョン毎に動作を最適化する実装が必要なんですよ。
その点を端折って責任問題が云々ってのは、開発側の手抜きかと。
(無論、個別での動作変更は凄く処理が面倒だから、そのコストを何処かに転化する必要は在りますが)
-- Buy It When You Found It --
検索 (スコア:5, 興味深い)
> OSバージョンをWindows 95/98と誤判定する古いコードがあるという理由だ
プログラムの検索もそうですが、
GoogleやYahoo!の検索、ヘルプなどの検索でも
Windows 9の情報が欲しいのに、Windows 95/98の情報が出てきてしまうのでは?
って話は7が出たころから言われていました。
問題にするべきはそこじゃない (スコア:2, 参考になる)
if(osName.startsWith("Windows 9")|| osName.equals("Windows ME")) {
...
これがWindowsバージョンを調べる、ほぼ慣用句と化したコードだという点。
正にJava厨は無能という説を体現したようなコードだ。
# Javaは脆弱性の塊だと思ってきたが、まさかJavaプログラマー自体もそうだったとは・・・・。
# osName.startsWith("Windows 9")でググってコードがわんさか出てくる時点で、もはやJavaプログラマー(笑)。
Re:問題にするべきはそこじゃない (スコア:2)
Write once, run anywhereとは何だったのか
Javaのプログラムは普通にGNU/Linuxでも動いたりするのに,もったいないですね
Re:問題にするべきはそこじゃない (スコア:1)
その例示を見て疑問なのは、95/98 を 9 でまとめてるのに、なぜ Me を判別するのには M と書かなかったのかだな。
Re:問題にするべきはそこじゃない (スコア:1)
Re:問題にするべきはそこじゃない (スコア:1)
Metroと言うのが出てくると予言されていたんじゃないの?
/*
ここは、MSが支配するデスクトップOS市場を奪おうとする某社が・・・という展開がおもしそうだけど話が思い浮かばん。
だれが話を作ってちょうだい。
*/
Re:問題にするべきはそこじゃない (スコア:1)
その問題については、最初から「Windows9」じゃなくて「Windows009」とかにしとけば良かったんですよ。
これでも999までいくと「Windows1000」問題は発生するが、まあそこまで保てば十分じゃね。
Re:問題にするべきはそこじゃない (スコア:1)
010以降は敵になってしまう
Re:問題にするべきはそこじゃない (スコア:1)
今、検索して確認した。まいった。
Re:問題にするべきはそこじゃない (スコア:1)
それが、009 にした理由をちゃんと伝承しなかったので、0010 とかしてしまうに1票。
もう一つ、かなり手前に問題があるような (スコア:1)
Javaを触ったことがないんで的外れだったら済まないんだけど、記事中の検索結果を見るとどうもアプリケーションのソースらしきものが幾つもあるのがとっても気になる。"Write once, run anywhere"などと高らかに謳ってたのに仮想マシンでなくアプリ側でOSの違いをチェックしなきゃならなくなってるってのが、そもそもの問題なんじゃないのかしら。
Re:もう一つ、かなり手前に問題があるような (スコア:1)
"Write once, run away"かな。
Re:問題にするべきはそこじゃない (スコア:2)
Windowsにはちゃんとあるよ。
IsWindowsVersionOrGreater
http://msdn.microsoft.com/en-us/library/windows/desktop/dn424964(v=vs.... [microsoft.com]
GetVersionEx
http://msdn.microsoft.com/ja-jp/library/cc429835.aspx [microsoft.com]
Re:問題にするべきはそこじゃない (スコア:1)
単にWindows側に判定ロジックが付随してない
なんで無いって思っちゃったの?
もうバカは引っ込んでろとしか。
Re:問題にするべきはそこじゃない (スコア:1)
Javaのバージョン判定ならまだしも、JavaでOSのバージョンに依存するようなコードを書くのがそもそもおかしい。
Javaはそう言うのに向いてないんだから。
Oneにそろえたかった (スコア:1)
http://www.gizmodo.jp/2014/10/9windows_10.html [gizmodo.jp]
Windows X (スコア:0)
Windows X になるのを期待してた人はこちらへどうぞ。
Re:Windows X (スコア:4, おもしろおかしい)
Windows OS Ⅹ ○○(ネコ科の動物)
Re:Windows X (スコア:1)
もしかして: windows xp
Re:Windows X (スコア:1)
MSのX好きっていつの間にか終了していた?
Re:Windows 1で判定するコードを書けば (スコア:1)
なぜWindows 8はWindows 8.1を阻止しなかったのか
Re:Windows 1で判定するコードを書けば (スコア:1)
もう、Xindows、Yindows、Zindowsとかでいいんじゃね?
Re:Windows 1で判定するコードを書けば (スコア:2)
Windows 2000があるので,次はWindows 30ですね!
Re:マンションの号室と同じで (スコア:1)
向こうの人なら13だから、Visual Studioの次期バージョンは14です。これはMSの中の人の証言も得られてる。
W9TPI(Re:経緯が気になる) (スコア:5, 参考になる)
今回のTechnicalPreviewのURLのパス中に
W9TPI(Windows 9 Technical Preview Index/Inventory?) ってディレクトリがあります。
相当最近まで9の積もりだったんじゃないかな。
Re:W9TPI(Re:経緯が気になる) (スコア:1)
マイクロソフトの中の人たちも、Thresholdより9のほうが言いやすかったってことじゃないかなっと。
けれどwindows9より別の名前にした方が、こーいうふうに話題が続くと見越して10にしたとか?
Re:W9TPI(Re:経緯が気になる) (スコア:1)
TechnicalPreviewをインストールするとデスクトップに貼られる
TechnicalPreviewサイトへのショートカットがありますが、
踏んだ先のURLにも &os=win9 という心温まるパラメータがありますね。
Re:経緯が気になる (スコア:2)
ちゃんとテストしてるからiOS8みたいなバグだらけのゴミになってないんでしょ
Re:7 8 9 (スコア:2)
どっかの記事でMSの人が言ってたから、これでしょう。
Re:7 8 9 (スコア:1)
外国の冗談は解説いれようよ....
"7 ate 9"(7は9を食った)ってやつだよね。
Re:2進数の可能性 (スコア:1)