その昔、Microsoftは、Unixのライセンスを受け、1981年に8086用のUnixである「XENIX」を開発した。そのフィードバックが一部、MS-DOSにも反映された。標準入出力や関連するAPI、ファイルシステムのディレクトリなどである。このため、WindowsのCMD.EXEには、Unix風なところが残っている。
マイクロソフトは、1985年にIBMとOS/2開発で提携し、XENIXから手を引き始める。これは、AT&TがUnixをビジネスとし、コンピュータメーカーに商用ライセンスを販売し始めると、Microsoftには勝ち目がないと判断し、IBMと本格的なオペレーティングシステムを独自に開発したほうが良いという判断に傾いたからだと言われている。XENIXは、SCO(Santa Cruz Operation)社に譲渡された。
これでMicrosoftによるPC Unixの普及という方向性かなくなってしまい、のちにUnix陣営側が何度かクライアントPC用Unixを計画したものの普及には至らなかった。
一方で、68000などの16 bit CPUとUnix、そしてグラフィックスディスプレイを組み合わせたUnixワークステーションが台頭する。これは、おもに開発環境や業務用システム構築などに使われ、企業で利用する機器の価格帯となり、個人利用ではなかった。しかし、これにより、Unixに触れたユーザーも少なくなかった。Unixワークステーション以前、VAXなどの高性能なマシンに端末を接続してUnixを使うというのが一般的だった。
もう1つ、Unixのコマンドを著名にしたものに、カーニハンが書いた「Software Tools」という書籍がある。これは、Unixの主要コマンドをRATFOR(Radical FORTRAN)で記述したもので、Unixコマンド体系や基本的な考え方を解説した。この本に感化され、MS-DOSなどで同様のコマンドを開発したものも「Software Tools」と呼ばれることがあった。
また、Linuxカーネルに、GNUのツール群を組み合わせた「Linuxディストリビューション」でも、Unixコマンドが利用できた。最近では、LinuxでUnixコマンドに触れたという人も少なくないだろう。
Unix/Linuxの魅力の1つは、標準入出力を駆使したコマンド群にある。テキストで表現された情報を、小さな機能を持つコマンドを組み合わせて処理していく。これまでBASICなどでプログラミングが必要だった作業をコマンドの組み合わせで実行でき、コンピュータに指を半分突っ込んで、動かしている感じがあった。
MS-DOSにもエッセンスはあったものの、作業の大半をサードパーティやパブリックドメインのユーティリティ、あるいは自作プログラムなどが必要だった。
マイクロソフトは、こうした状況に対して、WSH(Windows Scripting Host)を提案したが、普及は限定的だった。その後、.NETの普及に対してWindows PowerShellを投入した。
Windows 11に対しても、Unixコマンドを切望する声はある。WSLでLinuxを動かすことが可能で、cmd.exeなどのWin32コマンドラインからWSL経由でUnixコマンドラインを実行することは可能になった。ただ、同じファイルに対して、WSLとWin32で同一ファイルへのパスが異なること、Win32側、WSL側2つのエスケープ文字を使う必要があるなど、ちょっと面倒なところもある。
MSYS2などのWin32上にUnixコマンドを実装したものがあるが、コマンドラインインタプリタがWindows版のbashになっているため、cmd.exeなどの内部コマンドの起動が面倒になる。 こうした中、登場したのが、uutilsのCoreUtilをMicrosoftがWindows用に移植したWindows CoreUtilsだ。
・Windows CoreUtils
https://github.com/microsoft/coreutils/releases
・ドキュメント
https://learn.microsoft.com/ja-jp/windows/core-utils/commands
このWindows CoreUtilsでは、UnixコマンドがすべてWindowsの実行ファイル(exeファイル)として実装されている。これにより、Win32側のコマンドラインインタプリタ上でUnixコマンドを直接実行できる。
uutilsのCoreUtilは、Linuxディストリビューションで使われているGNU Core UtilitiesをRustで再実装するプロジェクトだ。実は、uutils側にもWindowsの実装があるのだが、今回Microsoftはこれをベースに改良を加えたものとしてWindows CoreUtilを開発した。幸いなことに、Windows 11のコンソールには、標準入出力やパイプラインなどMS-DOSで取り込まれたUnixの機能がまだ生きている。
Windows CoreUtilの改良点とは、find.exeやsort.exeなどWindows標準のコンソールコマンドとの衝突を解決したこと。Windowsでは、オプション文字にスラッシュを使うが、伝統的なUnixコマンドはハイフンを使う。このオプション文字で、Windows版とUnix版の動作を切り替えられる。また、bashでは、コマンド自身が、スクリプトからの起動か、コマンドラインからの起動かを区別できることなどから、Windows版、Unix版の挙動を区別することは可能と考えられる。また、sort.exeの引数なしなどコマンドラインで判定が困難な場合もあるが、どちらで実行しても結果が同じ(あるいは差が非常に小さい)ため、影響は少ないと思われる。結果が異なる場合、デフォルトと同じオプション指定を追加するなどして、Windows版、Unix版の振る舞いを強制することもできる。
今回のタイトルネタは、エディ・ロブソン(Eddie Robson)の「人類の知らない言葉」(創元SF文庫。原題“Drunk On All Your Strange New Words”)である。秀逸な日本語タイトルからは、神妙なSFを思い浮かべるが、実際には軽く読める作品。ちょっと、どんでん返しが強すぎて、ミステリというよりは、最後にパトカーが突っ込んでくるドリフのコントに近いものがある。
