いまから30年前、Windowsで、Unixアプリケーションを動作させる環境としてCygwin(シグウィン)。が開発された。Cygwinは「互換レイヤー」として動作し、Windowsの実行環境(カーネル)を使い、Unixアプリケーションを動作させる。そのためには、Cygwinを使って、Unixアプリケーションのソースコードをコンパイルして実行ファイルを作成する必要がある。Cygwinで作られる実行ファイルは、Windowsの実行ファイル形式(exe形式)である。
Cygwinは、当初gnuwin32と呼ばれていたが、その後、開発者の所属する企業(Cygnus Solutions)から1999年に商用製品として出荷されたときにCygwinという名称になった。なお、Cygnus Solutionsはその後Red Hatに買収された。
今から30年前、1995年というタイミングだったのは、1つには、GNUプロジェクトのCコンパイラ(gcc)が、Windowsの実行ファイル形式のベースとなったCOFF(Common Object File Format)とx86プロセッサに対応したことが挙げられる。これにより、gccは、Windows 95/NTの実行プログラムをコンパイルできるようになった。
もう1つの理由として32 bitモードで動作するプロセッサが普及したこと。同年に出荷されたWindows 95は、32 bitプロセッサを必須としていた(表01)。32 bitプロセッサは、すでに1985年のi386として出荷されていたが、Windowsが32 bitモードに対応するのは1990年のWindows 3.0からである(1988年のWindows/386は仮想86モードを利用)。
一般向けのWindows 95(1995年)は、32 bitアプリケーションに対応した。つまり、1995年になるまでは、32 bit CPUは存在していても、一般ユーザー向けのWindowsは対応せず、32 bit環境を利用するにはWindows NTが必要だった。これに対して、UnixやLinuxは当初から32 bit対応だった。
Windows NTは、POSIX(Unix)プログラムの実行環境としてSubsystem for Unix(SFU)を持っていた。Windows 95はNTとOSの構造が異なりSFUは利用できなかった。Cygwinは、このWindows 95でUnix/Linuxアプリケーションを動作させることを可能にした。
当時でも、デュアルブート環境を作ることで、同じマシンでLinuxを利用することはできた。しかし、デュアルブートでは、WindowsとLinuxは同時には動作できないので、データ交換などが面倒になる。しかし、Cygwinを使うことで、Unix/LinuxアプリケーションとWindowsアプリケーションが、データを共有して共同作業を行うことなどが可能になった。
1998年になると、このCygwinプロジェクトからMinGW(Minimalist GNU for Windows。ミン・ジー・ダブリューなどと発音)がフォーク(分岐)する。Cygwinは、広くUnix/Linuxアプリケーションを動作させる方向性だった。これに対してMinGWは、Windows上の開発環境に徹し、gccを中心にしたGNUツールチェーンをWindows上で動作させることを主目的とした。MinGWでは、gccを使ってWindowsのアプリケーションを開発することもできた。
このMinGW用のUnix/Linuxアプリケーションの実行環境が、MSYS(Minimal SYStem)である。MSYSには、bashや標準的なUnixツールが含まれている。MSYSは、2001年に初版が登場した。
その後、Windows Vistaで64 bit CPUに対応する。2003年にAMDか最初の64 bit化されたx86アーキテクチャ(x86_64またはx64)を開発し、Athlon 64などのプロセッサを出荷すると、インテルもこれに追従した。2006年のWindows Vistaでは64 bit版が開発され、64 bitアプリケーションの実行が可能になった。この頃に登場したのが、MinGWを64 bit対応させるために分岐したMinGW-w64プロジェクトである。
MinGW-w64プロジェクトに対応したのがMSYS2プロジェクトだ。これは、2013年に最初のバージョンが登場している。また、同時期、Cygwinも64 bit対応を行う。
MicrosoftのUnix環境(Windows Subsystem for Unix Application。SUA)は、Windows 7までは動作したが、Windows 8.xには対応しなかった。しかし、2016年にMicrosoftは、Windows 10上で、Windows Subsystem for Linux(WSL)のプレビューを開始する。これは、Windowsカーネルを使ってLinuxアプリケーションを動作させるもので、仮想マシンを使わないという点では、Cygwinなどに似たものだ。ただし、IO処理などは、Windowsカーネル経由で行えるため、比較的高速に処理ができた。その後WSLには、CPUの仮想マシン支援機能を使い、Linuxカーネルを動作させるWSL2を2019年に開発する。また、2021年には、Linux GUIアプリケーションを動作させるWSLgを搭載し、GUIアプリケーションに対応、広く、Linuxアプリケーションを実行できる環境を整えた。
今回のタイトルネタは、Greg Eganの「Permutation City」(邦訳 順列都市。ハヤカワ書房)である。人格や記憶がコンピュータにダウンロード可能となり、仮想環境で「コピー」として生きることが可能になった。ネタバレになるので書きにくいが、仮想環境を演算するのに逐一計算せずに結果を得る方法が示される。ただちょっとその理論が理解しにくい、というか個人的には許容できない感がある。