CSセミナー006 Linux入門

# ロードマップ

CSセミナー、第６回からはWindows Subsystem for Linuxを導入して、正規表現を使っているコマンドや言語をいじっていきます。次に、くいなちゃんが好きなHaskell言語を導入してみます。時間があれば（？）Haskell言語でKuinを実装してみることをやってみたいと思います。私はLispには詳しいですがHaskellは詳しくないので拙いコードになるかと思います。

# Linux

LinuxはWindowsが動作するマシンにおいて動作するUnixライクなOSのことです。

[Linux - Wikipedia](https://ja.wikipedia.org/wiki/Linux)

Linuxの登場前、無償のOSというものはほとんどありませんでした。そこでリーナス・トーバルズはタネンバウムのMinixをお手本にしてLinuxを開発しました。Linux登場前からPCのほとんどはWindowsマシンでした。なのでリーナスはWindowsマシンをターゲットとしてフリーのOSを作ったわけなのです。

Linuxの黎明期においては、LinuxがWindowsを席巻すると話題になりました。当時の人達はPCのOSがWindowsからLinuxに置き換わると本気で信じていたのです。しかし、実際にはWindowsがLinuxに置き換わることはありませんでした。今でもPCメーカーが搭載するOSのほとんどはLinuxではなくWindowsです。

# 古いWindows PCにLinuxをインストールする

LinuxはWindowsに比べてマシンスペックをあまり消費しないという特性があります。したがって、古いWindowsマシンにLinuxをインストールするとWindowsマシンを使い続けることができるというメリットがあります。

# WindowsとLinuxをデュアルブートできるようにする

Linuxのディストリビューションは、Linux環境がWindows環境と併存できるようにLinuxのインストーラにデュアルブートというオプションを付けるようになりました。

[マルチブート - wikipedia](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%96%E3%83%BC%E3%83%88)

デュアルブートによって、WindowsユーザーがLinuxを気軽に使用できる機会が増えました。しかし、WindowsとLinuxを同時に使用したいときにはデュアルブートではWindowsとLinuxが同時に動作しないので使いづらいというデメリットもあります。また、WindowsやLinuxの再インストールの手順を間違えるとドライブの内容をすべて削除したり、もう片方のOSを起動できなくなるといったこともありました。

# 仮想マシンを使う

たいていのWindowsマシンはPCメーカーのOEMライセンスによってプリインストールされているものなので、WindowsマシンでWindows以外のOSをインストールすることは推奨されません。ただ、VMware, VirtualBoxなどの仮想マシンをWindows上で動かすことによりLinuxをWindowsマシン上で動作させることができるようになりました。

ただ、仮想マシンは高いPCスペックと大量のストレージ容量を必要とします。また、Linux OSを起動する場合、まず、Windowsを立ち上げて、その次にLinux OSを立ち上げるという手順が必要になります。この手順はユーザーをとてもうんざりさせるものでした。

# Cygwinを使う

Windows上のエミュレータとしては、仮想マシンの他にCygwinというシステムがあります。仮想マシンはLinuxの動作を忠実に再現しますが、CygwinはWindows上にLinux環境のサブセットを実装し、そのうえでLinuxのアプリケーションを動作させるという仕組みになっています。Linux OSではなく、Linux OSの上にあるAPIを用意することによってLinuxアプリケーションを動かす仕組みです。

Cygwinは仮想マシンに比べて軽装で、立ち上げが非常に速く、動作速度も速いです。したがってWindows上でLinuxを使うという目的において仮想マシンに比べて大きなメリットがあります。

ただし、CygwinでインストールすることのできるLinuxアプリケーションはそれほど多くないです。メジャーなアプリケーションは動作させることができるので非常に重宝します。しかしLinuxのすべてのアプリケーションが動作するわけではないので仮想マシンに比べて可用性が低いです。

また、Cygwinはそのアップデートの過程などで、Cygwin自身をクラッシュさせてしまうことも多くあります。Cygwinはフリーソフトウェアであるためある意味仕方がないことなのですが、Cygwinはくせの強いシステムです。使い慣れれば使いやすいです。

# MinGW

MinGWはCygwinと同様のシステムです。ただし、Cygwinに比べて非常に軽装です。したがって、WindowsとLinuxの両方をサポートするたいていのプログラミング言語においては、そのWindows版にMinGWが含まれており、MinGW上で処理系が動作するというような構成になっています。

# Windows Subsystem for Linux

Windows Subsystem for Linux(略してWSL)は、MicrosoftとCanonicalの共同開発によって生まれた、Windows上で動作するLinuxシステムです。

[Windows Subsystem for Linux - Wikipedia](https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux)

Cygwinと同様に高速に動作しますが、Cygwinよりも多くのLinuxアプリケーションが動作するというメリットがあります。これはどういうことかというと、Linuxの主なユースケースがGUIではなくCUIであるというところに起因します。LinuxのディストリビューションではLinuxカーネルの上に巨大なウィンドウシステムが稼働することによってGUIが実現します。Windowsではすでにウィンドウシステムが稼働していますのでWindows上でLinuxのGUI機能を使うという需要があまりないのです。

CygwinではWindows上でLinuxのサブシステムを構成するという仕組みを採用していました。しかしWSLではまず、ウィンドウシステムのないLinuxを仮想マシンによって立ち上げ、その仮想マシンに対してWindowsのファイルシステムにアクセスする手段を提供します。したがってCygwinよりもはるかにLinuxシステムの再現性が高いのです。

そのかわり、WSLにはCygwinよりも使いづらい面もあります。CygwinはWindowsのアプリケーションとして動作するのでCygwinからエクスプローラを立ち上げることができました。WSLではWSLからWindowsアプリケーションを実行する仕組みはないのでCygwinよりもファイル操作が面倒になります。

# Windows Subsystem for Linuxをインストールしてみよう

WSLをインストールする手段はたくさんの人が解説していますので、WSL(Ubuntu)をインストールしてみましょう。とりあえずこの記事でOKです。

[Windows Subsystem for Linuxをインストールしてみよう！](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)

**注意：Windows Subsystem for Linuxの導入にはWindows 10以降が必要になります。Windows 7, Windows 8.1を使用されている場合はCygwinまたは仮想マシンを使うことを検討してみましょう。**