MicrosoftとUnixのお話

WSLでLinuxバイナリをサポートしたWindows、Microsoft AzureではLinuxもバッチリ動きます。ですが、それまではMicrosoftとそれ以外、「それ以外」はMacも含めてすべてUnix系という印象がありました。つまり、OSと言えばWindowsかUnixかというような構図です。

ですが、意外にもMicrosoftとUnixの関係は歴史が古いので、その歴史を振り返ってみました。

（独り言）口調の統一や誤字脱字はおいおい修正予定です（記事書くだけで疲れた）

2020年1月4日更新
2020年5月6日更新
2020年11月21日更新

## Microsoft と Unix の昔話

### Xenix

Microsoftは意外なことに初めて商用UnixOSを開発し、リリースした会社だったりします。(ほんと意外ですよね)

1981年、MicrosoftはAT&Tからライセンスを受けて、Xenixをリリースしています。これが世界で最初の商用UnixOSパッケージでとなりました。Xenixはジーニックスと発音します。

IBM-PC以外にもNECのPCで動作するバージョンがNECから販売され、AppleのLisaでも動作するバージョンもありました。対応するアーキテクチャも多く、身近なUnixとしてかなり売れていたようで、Microsoftはこの当時、世界最大のUnixベンダーだったようです。

その後、XenixはSCO社に売却され、SCO UNIX (SCO OpenServer) として長年利用されています。2015年に最後のバージョンがリリースされています。(それ以降のバージョンはFreeBSDベースで作り直されました)

1992年あたりでもMicosorfの社内ではSun Microsystemsなどのマシンで社内システムを構築し、Xenixを稼働させていたそうです。

### MS-DOS / Windows 9x系
Unixとは似て非なるOSですが、ディレクトリ(フォルダ)のTree構造、. や .. などのディレクトリの表記法、パイプによるコマンド実行結果の引き渡しやリダイレクトなどUnixをお手本に作られている部分が多々ありました。また、MS-DOSやWindows9x系OSのKernelには先に述べましたXenixとの互換性のため、Xenixのシステムコールが組み込まれていたようです。

MS-DOS / Windows9x系は、Windows2000 / WindowsXP の時代にGUIやAPIなどWindows NT系(現在のWindows)へとマージされ、単体の製品としてはWindows MEが最終リリースとなり、その役目を終えました。

### Windows NT
PC-DOS / MS-DOSの後継OSとしてIBMとMicrosoftが共同開発していたOSであるOS/2。しかし、OS/2バージョン3.0開発時代にIBMとの共同プロジェクトからMicrosoftが離脱し、独自に拡張、開発を進めることとなりました。その結果、誕生したのがWindows NTで、現在のWindows10 (Windows NT ver10.0) に至る源流です。最初のリリースは Windows NT 3.1 で、「なんで最初のバージョンが3なんだよ」とよく言われていましたが、OS/2 ver3.0からフォークしたプロジェクトだったからなんですね。それから先にあげたMS-DOSベースのWindows 3.0がちょうど発売次期と重なりブランド戦略の一貫としてもver3からスタートしたと言うのもあるかと思います。

Windows NTはDECでVMSを開発したプログラマーのディビッド・カトラーが開発に参加しています。

### POSIXサブシステム
そして、意外と知られていませんが、Windows NT4.0 からは POSIXサブシステムが搭載され、POSIXに準拠したアプリケーションを実行することができるようになりました。今の Windows Subsystem for Linux の源流のようなサブシステムですね。このPOSIXサブシステムは Windows NT4.0から搭載され、Windows2000 (NT5.0)まで標準サポート、Windows XP (NT5.1)で廃止されました。

[参考] ■ POSIX and UNIX Support in Windows (TECHNET)
https://social.technet.microsoft.com/wiki/contents/articles/10224.posix-and-unix-support-in-windows.aspx


### Windows Services for UNIX 
UNIXとWindowsの親和性を高めるため開発されたWindowsのアドオンパックで、Windows上で実行できるUNIXコマンド(grep.exe ls.exe など)やNFSサーバ、NFSクライアント、NISサーバ、TELNETサーバ、UNIXシェルなどが搭載されてパッケージ販売されていました。

### Interixサブシステム
Microsoft Services for Unix 3.0 からInterixサブシステムが搭載され、Windows NT系OSでネイティブUnix環境が提供されるようになりました。。Windows XP以降廃止されたPosixサブシステムを代替するもので、SFUをインストールするとInterixサブシステムの他、sendmailやcronなどのデーモン、ksh cshなどのUNIXシェル、viやedなどのエディタ、gccなどのコンパイラ、grepやpsなどのUnixコマンド、シェルスクリプトなどを利用することができるようになりました。また、Interixサブシステムの恩恵によりUnixやGNU/LinuxアプリケーションのソースコードをコンパイルしてWindows上で実行できるようになりました。ちなみに、このInterixですが、かなり仕様は古いのですが正式にUNIXの認証にパスしていました。

[参考] http://unix.oskp.net/sua/

##### Microsoft以外の動き

###### NetBSD / Debian / Gentoo 

|Dist|project|comment|
|---|---|---|
|Gentoo|Gentoo Prefix|Gentoo環境の移植|
|Debian|Debian Interix Port|Debian環境の移植|
|NetBSD|pkgsrc|パッケージ管理システムがInterixをサポート|

Interixへは NetBSD Debian Gentoo が独自にアプリケーションやユーザ環境の移植を進めており非常におもしろいプロジェクトでしたが、現在はすべてサポート中止です。公式サイトが閉鎖しているプロジェクトもあるようです。(2020年1月4日追記)

公式サイトが閉鎖されたDebian Interix Portですが、七誌さんの個人サイトに詳細が残されていました。これは貴重ですね。(2020年11月21日追記)

https://7shi.hateblo.jp/entry/20091214/1260719105


###### LBW (Linux Binaries on Windows)

WSLに似たプロジェクトがWSLよりはるか昔に進められていたのですが、これを知っている人はかなり少ないんじゃないかなと言うかなりマイナーなプロジェクト。NetBSD Debian GentooはInterix環境へアプリケーションの移植を進めたのに対し、LBW (Linux Binaries on Windows) は Interixサブシステム上でLinuxバイナリをそのまま動作させようという試みでした。Interixサブシステムの上にさらにラッパーをかぶせ、LinuxのシステムコールをInterixに渡すというような作りになっています。まさにWSLの原型のような感じですね。リリース当時にインストールして試したところ、lsやcd、psコマンドなどよく使うコマンド一式を一つのバイナリとして詰め込んだBusyBoxのUbuntu版バイナリがInterix上で動作しておりました。開発初期段階のものであるためまともに使えるレベルではなかったのですが、今のWSLと似たようなプロジェクトがオープンソースでひっそりと開発されていたのはなかなか面白いですね。

WSL1は2016年リリースですが、このLBWはなんと2010年に初代がリリースされています。

公式サイトに「マイクロソフトがInterixを廃止したからもう開発しないよ」と悲しげなコメントが書かれていますが、この小さな試みが今のWSLに繋がっているのかもしれません。そういう意味で意義のあったプロジェクトではないでしょうか。開発者のDavid Givenさんに敬意を示したいです。(2020年1月4日追記)

http://cowlark.com/lbw/index.html

### Subsystem UNIX-Based Apprications
Windows VISTA以降は、Windowsの標準機能としてInterixサブシステムが組み込まれることとなり、名称も Services for Unix から Subsystem UNIX-Based Apprications と変更されました。SUAはWindows8.0でインストールが非推奨となり、Windows8.1でサポートされなくなりました。Windows8.1ではInterixの代替としてCygwinが正式に推奨されていました。

### Windows Subsystem for Linux
Windows10で Bash on Ubuntu on Windows が発表され、惜しまれつつなくなったInterixサブシステムの後継的な存在として、Windows10での大きなサプライズでした。かなり盛り上がっているWSLですが、Ubuntu Debian SuSEなどのディストリビュージョンがサポートされているようで、今後も楽しみな機能です。canonical社との共同開発です。

### Windows Subsystem for Linux 2
LinuxカーネルのシステムコールをNTカーネルに変換するサブシステムWSLですが、LinuxとWindowsのカーネルの仕様上、どうしても完全に同一の機能を提供できるわけではなく、その差異が原因で動作しないアプリケーションなどがありました。それらを動かせるようLinuxカーネルそのものをWindows上に搭載してしまおうという流れで、Windows10に専用の小さなHyper-V仮想マシンを作成し、Linuxカーネルを動作させるのがWSL2のようです。

WSL1はあくまでWindowsのカーネルでLinuxバイナリが動作するネイティブ環境だったのに対し、WSL2は仮想マシンによるエミュレーションでネイティブ動作ではなくなってしまいました。Hyper-V上に構築するLinux仮想マシンとどう違うのか？メリットはあるの？と気になってしまいますが、Hyper-V上の独立したLinuxと違い、WSL2はWindowsと一体化した環境であることに意義があるのではないでしょうか。WindowsのプロセスをLinux側から操作したり、WindowsとLinuxを連携させたりと言ったことがより高度に実現できるのではないかと個人的には楽しみにしています。
(2020年1月4日追記)

### Azure Sphere OS
一般向けではありませんが、Microsoftが独自にカーネルをカスタマイズしたMicrosoft版Linuxがついに誕生してしまいました。15年くらい前を思い返すと信じられない時代です。IoT開発向けのLinuxのようで、現在もプレビューのようですね。将来の展開が楽しみです。

https://azure.microsoft.com/ja-jp/services/azure-sphere/



ここから下はアプリケーションなどのお話を書こうと思いましたが、長すぎるので簡単に・・

### Internet Explorer (Solaris / HP-UX / MacOSX)
NCSA Mosaicをもとに開発されたウェブブラウザ。MacOSがBSDベースのUnix系OSとなり、MicrosoftがUnixのアプリケーションを作る時代が来たのかと思っていたら、MacOSXのIE以外にマイクロソフトのFTPサイトにSolaris版、HP-UX版も置かれていたりして、マジかって思ったことがありました。(遠い昔)

### Frontpage Server Extention for Linux
LinuxベースのAndroidが普及し、Microsoftからもどんどんアプリケーションがリリースされていますが、Microsoftが初めて作ったLinuxのソフトウェアって何かなと考えると、MicrosoftとLinuxが水と油だった時代(20年くらい前？)にFrontpage Server ExtensionのLinux版が同じくFTPサイトに置かれていて、マイクロソフト初のLinuxのパッケージはこれかな？ってところですが、誰か詳しい人教えて下さい。

### Advanced Server for Unix
SolarisなどのUNIX OSがSMB (CIFS)ベースのファイル共有サーバとなることができるパッケージ。マイクロソフトが開発し、他社にライセンス提供。Sun Microsystems からは Solaris PC NetLink という製品名で販売されていました。

### Microsoft SQL Server (Linux / Docker)
2018年リリース。ついにMicrosoftからLinux版のサーバ製品群もリリースされる時代となりました。おもしろい時代になりましたね。

昨今ではMicrosoftはMacOSX、Android/LinuxなどUNIXベースOSにどんどんソフトウェアをリリースしていますが、その長い歴史を振り返ってみました。

(後日、加筆修正の予定)