Bash/WSLとWindows Consoleの新機能と変更点(前編)
ご存知の通り、「Windows 10」向け大型アップデートである「Windows 10 Creators Update」がリリースされました。「Micorsoft」の公式ブログにて、「Windows 10 Creators Update」における「Bash/WSL」と「Windows Console」の新機能と変更点が紹介されています。
WSL登場から約1年
初めて「WSL」が提供されたのは、2016年4月6日にリリースされた「Windows Insider Preview Build 14316」でした。その後2016年8月2日にリリースされた「Windows 10 Anniversary Update」にて、「WSL」は一般ユーザー向けにも提供が開始されました。
この時点では「WSL」の出来は完成からは程遠く、node.jsやJavaといった人気の開発ツールが動作しないなど、互換性は不十分でした。
Windows 10 Creators Updateのリリース
そして初登場から約1年後、「Windows 10 Creators Update」にて数百の改善と修正が行われた「WSL」が一般ユーザー向けにも提供されました。ここで紹介する内容は、「Windows 10 Anniversary Update」から見た「Windows 10 Creators Update」の新機能や変更点です。
「Insider Preview」利用者はすでに、「Windows 10 Creators Update」の新機能や変更点を「Windows 10 Creators Update」リリース前に享受してます。
前編では「WSL」に関する新機能と変更点を紹介します。
後編では「Windows Console」に関する新機能と変更点を紹介します。
まだβ版
「WSL」が登場してから約1年が過ぎましたが、「WSL」はまだベータ版です。まだまだサポートしていない機能や不具合があり、今後も改良や改善に向けて開発が行われていきます。
「WSL」に関する不具合を見つけたら、「Microsoft/BashOnWindows」へ報告してください。
新機能を提案したければ「Command Prompt / Console / Bash on Ubuntu on Windows」に投稿してください。
1.互換性の向上
「WSL」は「Linux Kernel」相当の機能を提供する仕組みです。この「WSL」上で「Ubuntu」が動作します。
「WSL」は多くのシステムコールをサポートし、またシステムコールの互換性が大幅に向上しました。
これにより、今まで動作しなかった「Ubuntu」のソフトウェアの多くが動作するようになります。
例えば以下のソフトウェアは、期待通りに動作するようになりました。
コアツール
- apt
- sed
- grep
- awk
- top
- tmux
- ssh
- scp
シェル
- Bash
- zsh
- fish
開発ツール
- vim
- emacs
- nano
- git
- gdb
言語及びプラットフォーム
- Node.js & npm
- Ruby & Gems
- Java & Maven
- Python & Pip
- C/C++
- C# & .NET Core & Nuget
- Go
- Rust
- Haskell
- Elixir/Erlang
システム及びサービス
- sshd
- Apache
- lighttpd
- nginx
- MySQL
- PostgreSQL
補足
上記はあくまで一例です。上記には含まれていない多くのソフトウェアが動作するようになっています。
GUIアプリについて
ユーザーの中には「WSL」上の「Ubuntu」でGUIアプリケーションの動作に挑戦している人もいるかと思います。現在「WSL」は、ユーザーが必要とするすべての開発CUIツールのサポートに焦点をあてて開発に取り組んでおり、GUIアプリのサポートは行っていません。
とは言え、GUIアプリの動作を意図的に妨げるような実装は行われていません。
2.Ubuntu 16.04のサポート
「Windows 10 Anniversary Update」では、「Ubuntu 14.04」が採用されていました。「Windows 10 Creators Update」では「Ubuntu 16.04」がサポートされ、デフォルトで「Ubuntu 16.04」がインストールされます。
「Ubuntu」のバージョンを調べるには、以下のコマンドを実行してください。
lsb_release -a
以下のように、「Release」に「Ubuntu」のバージョンが表示されます。
自動的にアップグレードは行われない
「Ubuntu 14.04」から「Ubuntu 16.04」へ自動的にアップグレードは行われません。「Ubuntu 16.04」を利用するには、以下のいずれかの方法を実行してください。
- 再インストール(推奨)
- アップグレード
1.再インストール
推奨される方法です。一旦「Ubuntu 14.04」をアンインストールしてから、「Ubuntu 16.04」を新規にインストールする方法です。
再インストールする場合は、必ず事前に自分が作成したファイル群をバックアップしておいてください。
バックアップは、Windowsのボリューム(DrvFs)上にファイルをコピーしておくと良いでしょう。
「/mnt/c」など「/mnt」以下にマウントされているディレクトリーがWindowsのボリュームです。
「Ubuntu」の再インストール方法は、以下を参照してください。
2.アップグレード
「Ubuntu 14.04」から「Ubuntu 16.04」へアップグレードする方法です。環境を引き継ぎながら「Ubuntu 16.04」へアップグレードできます。
ただし再インストールと異なり、クリーンな環境にはなりません。
アップグレード方法は「Ubuntu」の作法と同じです。
以下を参考にしてください。
3.ネットワーク接続列挙のサポート
「Windows 10 Anniversary Update」では、ネットワーク接続を列挙するための機能が実装されていませんでした。そのため「ifconfig」や「gulp」、及び「npm」といったツールが正常に動作しませんでした。
「Windows 10 Creators Update」ではこの機能がサポートされ、上記のツールが動作するようになりました。
例えば「ifconfig」を実行すれば、以下のようにネットワークインターフェース及びその情報が列挙されます。
4.Ping及びICMPのサポート改善
「Windows 10 Anniversary Update」では、ログインユーザー(非管理者)から起動したBashでは、「ping」が実行できませんでした。「Windows 10 Creators Update」ではこの点が改良され、ログインユーザーでも「ping」が実行できるようになりました。
5.inotifyによるファイル変更通知のサポート
「Windows 10 Creators Update」では「inotify」がサポートされ、ファイル変更通知がサポートされました。- Inotifyとファイルシステムの変更通知のサポート
- Build 14926の変更点まとめ・PingやInotifyのサポート改善・Linux Test Projectのテスト結果
- Build 14942の変更点まとめ・pivot_rootシステムコールのサポートやソケットオプションの実装
この機能により、アプリはファイルの変更を監視できるようになりました。
例えば他のアプリでファイルの内容が変更された場合、ファイルを監視しているアプリに変更通知が届きます。
この通知を受け取ったアプリは、自身が表示しているファイルの内容を更新するなど、ファイルの変化に応じた動作を行えるようになります。
「inotify」は、「VolFS」及び「DrvFS」のどちらにあるファイルでも利用できます。
6.WindowsとLinuxの相互運用性の改善
「Windows 10 Anniversary Update」では、Windows環境とUbuntu環境の相互運用性が不十分であり、お互いの環境を行き来することは困難でした。「Windows 10 Creators Update」では相互運用性が大幅に改善され、BashからWindowsアプリを起動したりその逆を行うなど、利便性が向上しています。
- WindowsからLinuxコマンドを呼び出すコマンドの実行例
- BashからWindowsコマンドを呼び出すコマンドの実行例
- WindowsとBashの相互運用
- WindowsとUbuntuの相互運用の仕組み(前編)
- WindowsとUbuntuの相互運用の仕組み(後編)
7.UNIX及びNetlinkソケットのサポート改善
「Windows 10 Anniversary Update」では、UNIX及びNetlinkソケットのサポートが不十分でした。「Windows 10 Creators Update」では、UNIX及びNetlinkソケットとオプション及びプロパティーのサポートが行われ、様々なIPCの仕組みが動作可能になりました。
8.TCPソケット及びIPv6のサポート改善
「Windows 10 Creators Update」では、WSLチームとWindows Core Networkingチームが連携して作業を行い、TCPソケット及びIPv6のサポートやソケットオプション及びプロパティーのサポートの改善が行われています。これにより、ネットワークソケットの機能やIPv6を利用するアプリが動作するようになります。
9.その他の改善
「WSL」に関するその他の改善点です。Linuxプロセスがタスクマネージャーに表示されるようになった
LinuxプロセスがWindowsプロセスを列挙する仕組みの対象になったため、タスクマネージャーにLinuxプロセスが表示されるようになりました。セキュリティーソフトがLinuxプロセスを認識できるようになった
アンチウイルスソフトやファイアーウォールなど、セキュリティーソフトがLinuxプロセスを認識・識別する仕組みが追加されました。この仕組みを活用するかどうかはセキュリティーソフト次第です。