Windows - WOW64の行く末を考えてみる

## はじめに

「〇〇だから、Windows で 32bit ソフトがサポートされなくなる」と __狼が来るぞ!!__ 的な意見を幾度か聞かされたことがあります。
そんなことを思い出したので、Windows での 32bit ソフトの終焉（WOW64サポート終了）について考えてみることにします。


## Microsoft Copilot に聞いてみる

まずは、直球で Microsoft Copilot に聞いてみます。

:::note
Microsoft は WOW64 をいつまでサポートしますか？

Microsoftは、WOW64（Windows 32-bit on Windows 64-bit）をサポートする予定は特に発表されていません。しかし、Microsoftのサポートライフサイクルに従えば、サポート終了日は通常、製品のリリースから10年後となります。例えば、Windows 10は2025年10月14日にサポート終了が予定されています。

もし特定のバージョンについて知りたい場合は、教えてください。詳細を調べるお手伝いをします。
:::

まぁ、想定範囲内の回答ですね。

## トピックス

Windows 32bit ソフト（WOW64サポート）の行く末について、何らかの見解に結び付くトピックスを時系列であげてみます。

### VB.NET 登場

2002年に VB.NET が登場した際、Microsoft は、Visual Basic 6.0 サポート中止を試みました。
しかし、欧米では Visual Basic 6.0 に絶大な人気があったようで、ソフト資産継承を望む声（圧力？）によって、Microsoft は Visual Basic 6.0 ランタイムサポートを表明して、現在にいたっています。
Visual Basic 6.0 に対する意見としては、下記が記憶に残っています。

https://developers.srad.jp/story/12/06/12/079206/

Visual Basic 6.0 は、当然 32bit なので、64bit OS では WOW64 上で動作します。
Visual Basic 6.0 ランタイムサポート = WOW64 サポートであり、Microsoft にとって、Visual Basic 6.0 は、WOW64 サポートに対するひとつの大きな足かせだと思っています。

### Windows 64bit OS 登場

Windows XP Professional、Windos Server 2003 の 64bit OS が 2005年にリリースされました。

64bit OS では、ドライバーは 64bit モジュールである必要があります。
アプリについては、64bit OS 上で 32bit ソフトを動作させる WOW64 で、32bit ソフト資産継承を可能としました。

### Windows Hyper-V Server リリース

Windows Server のサブセットとして、Windows Hyper-V Server がリリースされました。
Hyper-V を動作させることだけを目的としているので、不必要な WOW64 は搭載されていません。


__狼が来るぞ!!__
Windows Hyper-V Server に WOW64 が搭載されていないことを、フルセット Windows Server での WOW64 搭載有無に話を広げるのは勘弁してください。


### Windows 32bit OS 終焉

Windows Server 2008、Windows 10 (2022) で Window 32bit OS は終焉を迎えました。

__狼が来るぞ!! 狼が来るぞ!!__
WOW64 で 32bit ソフト資産継承ができていて、32bit ソフトを動作させる上でも、64bit OS のメリットが大きいので、Windows 32bit OS は終焉を迎えたと思っています。
ハードウェアベンダーとしても、32bit ドライバーの終焉で、64bit ドライバーのみを用意すれば良いので、効率的な終焉と思っています。


### macOS Catalina

macOS は、Catalina（2019年）で、32bit ソフトを切り捨て、64bit ソフトのみの動作となりました。

__狼が来るぞ!! 狼が来るぞ!! 狼が来るぞ!!__
もともと mac は執筆業・デザイナーの利用が多く、一般的なビジネス用途としては、WEBシステム以外は、そもそも mac は対象外とされることが多々ありました。
ビジネス用途が主流でベンダー・自社開発のソフトを多数利用している Windows とは立ち位置が異なるので、同じテーブルに乗せることは勘弁してください。

### time_t オーバーフロー

https://ja.wikipedia.org/wiki/2038%E5%B9%B4%E5%95%8F%E9%A1%8C

VC6 time_t は 32bit のため、2038年1月18日以降にオーバーフローしてしまいます。

VC6 は既にサポート終了していますが、Visual Basic 6.0 ランタイムは、VC6 ランタイムを利用しています。
Visual Basic 6.0 ランタイムサポートは、結果的に VC6 ランタイムサポートも成し遂げているとも言えます。

Visual Basic 6.0 で VC6 ランタイムを利用していることから、VC6 time_t オーバーフローは、一部かもしれませんが、Visual Basic 6.0 アプリへの影響があるかもしれません。
Visual Basic 6.0 アプリ運用に対して、致命的な影響がおよぶなら、WOW64終焉の契機となるかもしれません。

## 考察

### Visual Basic 6.0

Visual Basic 6.0 ランタイムサポートが、ひとつの足かせという観点で、Microsoft ライフサイクルに関する FAQ での記載を確認してみます。

https://learn.microsoft.com/ja-jp/lifecycle/faq/developer-tools#microsoft-visual-basic-6-0--------------------------

:::note
Microsoft Visual Basic 6.0 のライフサイクル ポリシーはどのようなものですか？ 

Microsoft は、現在サポートしている Windows と Windows Server のバージョンで実行される既存の Visual Basic 6.0 アプリケーションをサポートすることに取り組んでいます。 こちらに記載されているように、コア Visual Basic 6.0 ランタイムは、Windows オペレーティング システムの全サポート期間にわたり、深刻な不具合や重大なセキュリティの問題を回避できるようにサポートされます。

Visual Basic 6.0 は以下の主要な成果物で構成されます。
- Visual Basic 6.0 IDE (統合開発環境) は 2008 年 4 月 8 日以降サポートされていません。
- Visual Basic 6.0 ランタイム — VB6 アプリケーションを実行するために使用する基本ライブラリおよび実行エンジン。
- Visual Basic 6.0 ランタイム拡張ファイル - 一部の ActiveX コントロール OCX ファイル。
:::

英文ですが、下記情報もあります。

https://learn.microsoft.com/ja-jp/previous-versions/visualstudio/visual-basic-6/visual-basic-6-support-policy

Microsoft Copilot にも聞いてみましょう。

:::note
Microsoft は Visual Basic 6.0 のランタイムサポートをいつまでサポートしますか？

MicrosoftはVisual Basic 6.0のランタイムサポートを2025年7月11日まで提供します。この日付を過ぎると、MicrosoftはVisual Basic 6.0のランタイムに対するサポートや更新を提供しなくなります。

何か他に知りたいことがありますか？
:::

おやおや、Microsoft ライフサイクルに関する FAQ とは異なる回答です !!
いつの間にか Visual Basic 6.0 ランタイムサポートの終焉をアナウンスしていたんですかね。


。。。チョイ確認してみましたが、当該情報にはたどり着けませんでした。
Microsoft Copilot が「VBScript の無効化、廃止」などと混同している可能性もありますね。
Microsoft Copilot の回答が事実だとしたら、WOW64 サポートの足かせがひとつ外れたことになりますけど。

### VC++

IDE が 2008年にサポート終了している Visual Basic 6.0 とは異なり、Visual Studio 2022 でも、VC++ 32bit モジュール生成ができます。
VC++ 32bit ソフトを 64bit 化するメリットも少ないので、現状もかなり現役で稼働していると思います。

まだまだ、32bit ソフトは健在という感じてです。

### C#

Visual Studio 2022 でも、.NET Framework - EXE 生成時の対象プラットフォーム既定値は、「Any CPU - 32bit 優先」となっています。

:::note

.NET Framework の EXE が Any CPU の場合、64bit OS では 64bit 動作、32bit OS では 32bit 動作と定義されています。
Visual Studio での.NET Framework - EXE 生成時の既定値は、Any CPU となっていたため、64bit OS で意図せず 64bit 動作するアプリとなり、32bit dll 利用でクラッシュとなることがありました。
このため、32ibt 優先というフラグが追加され、EXE 生成時の既定値が「Any CPU - 32bit優先」となりました。
:::

こちらでも、まだまだ、32bit ソフトは健在という感じてです。

### まとめ

Visual Studio 2022 でも、32bit ソフトは健在です。
ARM 版 Windows 用では、これまでの x86/x64 向けアプリを動作させられるエミュレータが用意されています。
これは、Microsoft として、ソフト資産継承を命題としたプラットフォームであることを、最大の価値として考えているからだと思います。
既存ソフト資産が全く使えなくなった Windows となった場合、Windows が選択されつづけるかは微妙ですから。

:::note warn
ソフト資産継承という観点で、時に Microsoft は、互換性のない仕様変更や、機能を非推奨→廃止とすることもあり、ソフト開発者を悩ませることがあります。
このため、ソフト維持コストの範囲で、評価・対応を行うことが、ソフトをリリースしているベンダーの責務となっています。
:::

Visual Basic 6.0 ランタイムを長期にわたってサポートし続けている歴史から、自社開発 32bit ソフトをサポートし続けるであろうと思われます。

このようなことから、「Windows で 32bit ソフト（WOW64）は、まだしばらくサポートされ続けるであろう」を、今回の結論とさせて頂きます。