Microsoftは、UnixコマンドをWindows上でネイティブに実行できる「Windows CoreUtils」をリリースした。これは、uutilsプロジェクトのCoreUtilをベースに、Windows向けに改良を加えたもので、GitHub上で公開されている。これにより、ユーザーはcmd.exeなどのWin32コマンドラインインタプリタ上で、Unixコマンドを直接実行できるようになる。
XENIXからWindows CoreUtilsまでの道のり
MicrosoftとUnixの関係は古く、1981年に8086用のUnixとして「XENIX」を開発したことに始まる。XENIXのフィードバックはMS-DOSにも反映され、標準入出力やAPI、ファイルシステムのディレクトリ構造などにUnixの影響が残っている。しかし、AT&TがUnixをビジネス化し、商用ライセンスを販売し始めると、Microsoftは競争が難しいと判断。1985年にIBMとOS/2開発で提携し、XENIXから撤退、SCO(Santa Cruz Operation)社に譲渡した。
これにより、PC向けUnixの普及は頓挫したが、一方で68000などの16ビットCPUとUnix、グラフィックスディスプレイを組み合わせたUnixワークステーションが台頭。これらは主に開発環境や業務用システムに使われ、企業向けの価格帯だったが、多くのユーザーがUnixに触れる機会となった。また、カーニハン著「Software Tools」がUnixコマンドの普及に貢献。同書はUnixの主要コマンドをRATFORで記述し、その考え方を解説。MS-DOS上で同様のコマンドを実装した「Software Tools」も登場した。
LinuxとGNUツールの登場
その後、LinuxカーネルにGNUツール群を組み合わせたLinuxディストリビューションが普及し、Unixコマンドが広く使われるようになった。Unix/Linuxの魅力は、標準入出力を駆使したコマンド群にあり、テキスト情報を小さな機能のコマンドを組み合わせて処理できる点にある。MS-DOSにもそのエッセンスはあったが、多くの作業にはサードパーティ製ユーティリティや自作プログラムが必要だった。
MicrosoftはWSH(Windows Scripting Host)を提案したが普及は限定的で、その後.NETの普及に伴いWindows PowerShellを投入。Windows 11ではWSL(Windows Subsystem for Linux)によりLinuxを実行可能だが、ファイルパスの違いやエスケープ文字の問題など、使い勝手に課題があった。また、MSYS2などのWin32上のUnixコマンド実装も存在するが、コマンドラインインタプリタがbashになるため、cmd.exe内部コマンドの起動が面倒だった。
Windows CoreUtilsの特徴
こうした背景の中、MicrosoftはuutilsのCoreUtilをベースにWindows CoreUtilsを開発した。uutilsは、GNU Core UtilitiesをRustで再実装するプロジェクトであり、Windows版も存在していたが、Microsoftはそれを改良。最大の改良点は、find.exeやsort.exeなどWindows標準のコンソールコマンドとの衝突を解決したことだ。Windowsではオプション文字にスラッシュを使うが、Unixコマンドはハイフンを使う。この違いを利用して、Windows版とUnix版の動作を切り替えられる。また、bashではスクリプトからの起動かコマンドラインからの起動かを区別できるため、挙動を切り替えることが可能。引数なしのsort.exeなど判定が困難な場合でも、結果がほぼ同一であるため影響は少ない。結果が異なる場合、デフォルトと同じオプションを指定することで振る舞いを強制できる。
Windows CoreUtilsは、MicrosoftのGitHubリポジトリからダウンロード可能で、ドキュメントも提供されている。これにより、WindowsユーザーはネイティブなUnixコマンド体験を得られるようになった。



