長い間、Windowsにはネイティブに動作するOpenSSHの実装が存在しない状況が続いてきた。コンソールアプリケーションもかなりトリッキーな実装を行っている。UNIX系オペレーティングシステムでは当たり前に実現できていることが、Windowsでは実現されてこなかった。

Windowsでも結果的に同じように見える振る舞いを実現できるが、UNIX系のオペレーティングが提供している仕組みとあまりに違いすぎるため、これまでUNIX系オペレーティングで提供されてきたコンソールに関連するコマンドの移植は進んでこなかった。しかし、2018年秋のWinodws 10アップデートでこの状況が大きく変わる可能性がある。

Microsoftは現在開発を進めているWindows 10に「擬似端末(Pseudo Console)」の機能を実装するようだ。実装する機能の詳細は「Windows Command-Line: Introducing the Windows Pseudo Console (ConPTY) - Windows Command Line Tools For Developers」にまとまっている。

UNIX系オペレーティングで実装されている仕組みとよく似ており、こうした機能を利用しているコマンドの移植がこれまでと比べて格段に簡単になるものと見られる。開発者は注目しておきたい機能だ。

  • 現在のコンソール関連アーキテクチャ - 資料: Microsoft提供

    現在のコンソール関連アーキテクチャ - 資料: Microsoft

  • 擬似端末が実装されたコンソール関連アーキテクチャ - 資料: Microsoft提供

    擬似端末が実装されたコンソール関連アーキテクチャ - 資料: Microsoft

  • 擬似端末経由でもConDrv経由でも利用できる - 資料: Microsoft提供

    擬似端末経由でもConDrv経由でも利用できる - 資料: Microsoft

物理的ターミナルはキー入力の受け取りや入力されたデータのバッファリングと送信、逆に送られてくるメッセージの処理と表示といった処理を行っている。マシンの性能が向上し、マルチウィンドウシステム上で複数のターミナルアプリケーションを実行できるようになると、これまで物理ターミナルが実施していた処理をソフトウェア的に行う必要性がでてきた。この時に開発された仕組みが擬似端末だ。物理ターミナルが行っていたような処理を擬似端末が担う。

擬似端末はsshでサーバにログインする場合などにも使われている。現在であれば、sshでサーバにログインすればその分だけ/dev/pts/にファイルが生えてくることを確認できるだろう。sshでログインするとその分だけ擬似端末が使われている。こうした仕組みがあることで、ターミナルを利用するコマンドを簡単に開発できるようになっている。

これまでのWindowには擬似端末の仕組みが用意されていなかったため、Windows版のOpenSSHは以下の画面のようにWindowsで提供されている機能を使って動作を実現していた。オリジナルのOpenSSHの実装系と比べると、Windows風のコードを従来の実装に交ぜることになる。

  • 現在のOpenSSH on Windows 10の関連アーキテクチャ - 資料: Microsoft提供

    現在のOpenSSH on Windows 10の関連アーキテクチャ - 資料: Microsoft

これが、擬似端末の実装されたWindows 10では、以下の画面のように擬似端末の機能を使うことでOpenSSHを実装することができる。OpenSSHとしてもこちらの実装のほうがシンブルで自然なものになる。

  • 擬似端末を利用する場合のOpenSSH on Windows 10の関連アーキテクチャ - 資料: Microsoft提供

    擬似端末を利用する場合のOpenSSH on Windows 10の関連アーキテクチャ - 資料: Microsoft

OpenSSHのみならず、ConEmu、Cmder、Console2、ConsoleZ、Hyperといった擬似端末が存在しないために、トリッキーな手法でコンソールの振る舞いを実現してきたアプリケーションにとって、今回のMicrosoftの取り組みは喜ばしいものとなる。擬似端末の機能が利用できるため、これまでのトリッキーな実装ではなく、よりシンプルな実装で目的を達成できるからだ。現にMicrosoftは、今後はこれまでのAPIベースの実装ではなく、擬似端末を使って実装を行うことを推奨している。

WindowsでLinuxバイナリを実行するための仕組みWSL (Windows Subsystem for Linux)が導入されてから、Windowsのコンソール回りは急ピッチで開発が進んでいる。後方互換性を維持するというMicrosoftの要求を満たした上で実現していく必要があるため時間がかかっている感は否めないが、今回の実装で後方互換性を維持した上で擬似端末が実装された点は興味深い。これまでWindowsに移植されることのなかった擬似端末を利用するコマンドがネイティブにWindows 10に移植される可能性がでてきたからだ。Windows 10のコンソールがほかのUNIX系オペレーティングシステムのように豊富なコマンドに対応する可能性が出てきた。

この機能は2018年秋に予定されているWindows 10アップデートから利用できる予定だ。WSLを使ってLinuxディストリビューションをインストールすればWindows 10でも豊富なコマンドが利用できる状況になっているが、今後はWindowsネイティブのコマンドで似たような状況を実現できる可能性がある。今後の動向が注目される。