11種類のオペレーティング・システムについてまとめてみた

# TL;DR
「オペレーティングシステム？知ってるよ。WindowsとかMacのことだよね」というぐらいの知識だった私が、二週間ほどひたすらWikipediaでインプットしまくったクソ浅い情報を共有します。

# 最初の動機　「Go言語が対応しているアーキテクチャってなんだろ？」

Go言語には環境変数をコンパイラに渡すことで、出力されるバイナリの対応するOSとアーキテクチャを変えることができます。

`GOOS` がオペレーティングシステム(OS)、 `GOARCH` がアーキテクチャです。

```
$ GOOS=linux GOARCH=ppc64 go build
```

こんな感じにビルドすると、 `linux` というオペレーティングシステムで、 `ppc64` というアーキテクチャに対応したバイナリが出力されます。

なるほど。
じゃあ、 **Go言語が対応しているOSとアーキテクチャって何があるの？** と疑問が湧いてきますね。

その疑問に応えるコマンドが `go tool dist list` です。実際に叩いてみます。

```bash:

$ go version
go version go1.14.2 darwin/amd64

$ go tool dist list
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/386
darwin/amd64
darwin/arm
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
```

びっくりするくらいたくさん出てきました。

私は、このリストを見て若干絶望感を抱きました。なぜなら、 **「こんなOS多いんかいな・・・」** と思ったからです。

`windows` や `linux` `android` ぐらいは聞いたこともあるし、普段触ってもいます。
しかし、他のOSは説明できるほど全く知りません。

（ちなみに、 `js` はもちろんOSではありませんが、  `js/wasm` を設定してあげると、Web Assembly のバイナリを出力することができます。）

## Go言語で対応しているOS一覧

今回の記事では `js` を除きます。
すると、１１種類のOSが以下の通り残ります。

```
- aix
- android
- darwin
- dragonfly
- freebsd
- illumos
- linux
- netbsd
- plan9
- solaris
- windows
```

## 毎回調べるの、辛いわ。絶対忘れるし

こう考えた私は、 **１１種類のOSたちを地道に一個ずつ調べていくことを決意しました**。

調べ方に関しては、ご存知の通り Wikipedia を活用しましたが、適宜補足のために他のページを参照しながらやりました。
私は以前から英語版の Wikipedia の方が日本語版より（内容的に）充実していると考えているため、主に英語版の Wikipedia を用いています。

やり方が決まった後は単純作業です。英語版Wikipediaを開いてひたすらDeepLで翻訳しながら自分で作ったノートにまとめていく作業です。

この作業をしばらく続けていくと、**無秩序に感じられたOSたちが、実は面白い歴史的背景や特徴を持っている**ことがわかってきました。

寝る前にノートを見直すことで記憶の定着しやすい勉強を心がけています（受験生かな？）

今回の記事では、あえてOSの分類などせず、調べた順番通りに辞書的にまとめていくことにします。

# この記事の内容について
いくつか注釈があります。
この記事は、[英語版Wikipedia(en.wikipedia.org/)](https://en.wikipedia.org/)の本文を [DeepL](https://www.deepl.com/translator)で翻訳しながら作成したノートを元にして書いています。
引用元の記事へのリンクは必ず明記した上、引用部分は Blockquotes を用いて私の書いた部分と区別できるようにしています。

自分用のノートでは記事にある表もコピーしていますが、そのまんま載せて記事にするのは私の道徳が許さなかったので、リンク先に飛んで確認してください。

また、DeepLの翻訳精度は使っていても感動するほど高いのですが、「ですます」や「である」などの口調の統一ができていない点はご了承ください。
(アプリを入れるとCommand+cを二回押すだけで翻訳されます→超便利）

# （知っとくと読みやすい）そもそもOSってなんやねん
https://en.wikipedia.org/wiki/Operating_system

> オペレーティングシステム（OS）とは、コンピュータのハードウェア、ソフトウェア資源を管理し、コンピュータプログラムの共通サービスを提供するシステムソフトウェアのことである。

![img](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Operating_system_placement.svg/324px-Operating_system_placement.svg.png)

要するに、大雑把にいうと次のような関係があります。

- **ユーザ**は **アプリケーション** を使う
- **アプリケーション** は **OS** の機能を使いながら動作する
- **OS**は **ハードウェア**といい感じに通信する

つまり、OSの役割は、 **ユーザが使うアプリケーションを実行できるようなインターフェイスを兼ね備えた上で、裏ではハードウェアと連携することで、ユーザやアプリケーションから具体的なハードウェアを隠蔽してくれるソフトウェア** といったところでしょうか（意訳）。

実は、OSがソフトウェアだからと言って、アプリケーションからOSの全てを実行できるわけではありません。
大雑把にいってユーザが使うアプリケーションが直接実行できる **ユーザ空間** と、そうではない **カーネル空間**に分けることができます。

# （知っとくと読みやすい）カーネルってなんやねん
https://en.wikipedia.org/wiki/Kernel_(operating_system)
> カーネルとは、コンピュータのオペレーティングシステムの中核をなすコンピュータプログラムで、システム内のすべてのものを完全に制御します。カーネルは、あらゆるオペレーティングシステムの不可欠な部分です。カーネルは、「常にメモリに常駐しているオペレーティングシステムのコードの一部」です。これは、ハードウェアとソフトウェアのコンポーネント間の相互作用を促進します。ほとんどのシステムでは、起動時(ブートローダの後)に最初にロードされるプログラムの1つである。ソフトウェアからの入出力要求をデータ処理命令に変換し、中央処理装置のためのデータ処理命令に変換するだけでなく、残りのスタートアップを処理します。メモリやキーボード、モニタ、プリンタ、スピーカーなどの周辺機器を処理します。

![img](https://upload.wikimedia.org/wikipedia/commons/8/8f/Kernel_Layout.svg)

さっきOSがあった場所に Kernel があるのでややこしいのですが、OSの中でも最もハードウェアに近い部分（といっていいぐらいな場所）が カーネル です。
あくまで、**カーネルはOSの一部分です**。

カーネルの実装は、CPUのようなアーキテクチャにバリバリ依存します。（この辺はまた別記事でやるかも。）

このカーネルとアプリケーションの通信が、システムコールの発行という形で行われ、カーネルがよしなにハードウェアと通信してくれます。
これによって、アプリケーションに直接ハードウェアとのやり取りを実装する必要がなくなるのです。
この辺は システムプログラミング などの分野ですね。I/Oスケジューリングとか面白いよ。

例えば、標準Cライブラリの `printf` やPythonの `print` なんかも最終的にはカーネルに対してシステムコールを発行し標準出力への書き出しを命令しているんです。
ちょっと違った景色が見えてきますね。

あと、カーネルがOSの一部分ということは、**OSによって利用するカーネルが一般的には異なる**わけです。
さらにいうと、カーネルは単一のプログラムである場合もあれば、複数のカーネルを組み合わせたハイブリッドカーネルにしたOSなんかもあります。

カーネルはOSの特徴を表します。

これからOSがどういうカーネルを使っているかを紹介していきます。
**なぜこのOSはこのカーネルを使っているのか**などと考えながら勉強してみると面白いと思います。
（別にこの記事に答えはない）


# OS一覧

現在も開発されているOSだけでもこの図のようにたくさんあります。
ここからは、１１種類のオペレーティング・システムをアルファベット順で並べたものを紹介していきます。

この図に本記事で紹介するほとんどのOSが含まれているため、読み終わった後、もしくは読んでいる最中に参照してみると理解の助けになるかと思います。

![img](https://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Unix_timeline.en.svg/500px-Unix_timeline.en.svg.png)

[Linux(en.wikipedia.org)](https://en.wikipedia.org/wiki/Linux)より引用

## 1. AIX
[IBM_AIX(en.wikipedia)](https://en.wikipedia.org/wiki/IBM_AIX)

> AIX（Advanced Interactive eXecutive、発音は/ˌeɪaɪˈɛks/）は、IBMが開発し、そのコンピュータプラットフォームのいくつかのために販売しているプロプライエタリなUnixオペレーティングシステムのシリーズである。元々はIBM RT PC RISCワークステーション用にリリースされたが、AIXは現在、IBM RS/6000シリーズとそれ以降のPOWERとPowerPCベースのシステム、IBM System i、System/370メインフレーム、PS/2パーソナルコンピュータ、およびApple Network Serverを含むハードウェアプラットフォームの多種多様をサポートしているか、またはサポートしている。

> AIXは、4.3BSDと互換性のある拡張機能を持つUNIX System Vをベースにしています。これは、The Open GroupのUNIX 03標準に認定されたバージョンを持つ5つの商用オペレーティングシステムの1つである（他はmacOS、Solaris、HP-UX、およびeulerOSである）。

> AIXファミリーのオペレーティングシステムは1986年にデビューし、1990年の発売と同時にRS/6000シリーズの標準オペレーティングシステムとなり、現在もIBMによって積極的に開発されています。現在、IBM iやLinuxと並んでIBM Power Systemsでサポートされています。

> AIXはジャーナリングファイルシステムを持つ最初のオペレーティングシステムであり、IBMは、プロセッサ、ディスク、ネットワークの仮想化、ダイナミックなハードウェアリソース割り当て（小数プロセッサユニットを含む）、メインフレームの設計から移植された信頼性エンジニアリングなどの機能を備えたソフトウェアを継続的に強化してきました。

AIXは、IBMが開発し、2019年11月にもリリースが行われていたり現在も積極的に開発が行われているOSです。C言語で書かれており、いわゆる `Unix` の系譜に入ります。

`商用オペレーティングシステム` の一つであることもあり、普段あまり馴染みがありません。
どこで使われているのだろうと調べていると、セキュリティや高可用性、信頼性が要求されるサーバやクラウド環境を実現するために企業に使われているようです。

この辺りの詳細は、[IBM AIXオペレーティング・システム](https://www.ibm.com/jp-ja/it-infrastructure/power/os/aix)などを参照して見てください。

ソースコードは公開されていません。

## 2. Android

[Android_(operating_system)(en.wikipedia)](https://en.wikipedia.org/wiki/Android_(operating_system))

> Androidは、主にスマートフォンやタブレットなどのタッチスクリーンモバイル機器向けに設計されたLinuxカーネルやその他のオープンソースソフトウェアの改変版をベースとしたモバイルオペレーティングシステムである。Androidは、Open Handset Allianceとして知られる開発者のコンソーシアムによって開発されており、主な貢献者と商業的な販売者はGoogleである。

> 当初は2005年にGoogleが買収したAndroid Inc.が開発していたが、2007年にAndroidが発表され、2008年9月に初の商用Android端末が発売された。現在の安定版はAndroid 10で、2019年9月3日にリリースされた。Androidのコアとなるソースコードは、Androidオープンソースプロジェクト（AOSP）として知られており、主にApacheライセンスの下でライセンスされています。これにより、Androidの亜種は、ゲーム機、デジタルカメラ、PCなどの他の様々な電子機器上で開発され、それぞれに特化したユーザーインターフェースを持つようになっています。よく知られている派生製品には、テレビ用の「Android TV」やウェアラブル用の「Wear OS」などがあり、いずれもグーグルが開発したものだ。

> Androidは2011年からスマートフォンで、2013年からタブレットで世界で最も売れているOSです。2017年5月現在、月間アクティブユーザー数は20億人を超え、あらゆるOSの中で最大のインストールベースとなっており、2020年1月現在、Google Playストアには290万件以上のアプリが掲載されている。

Androidは、モバイルオペレーティングシステムと表現されている通り、主に Google と Open Handset Alliance(OHA) により開発されている、スマホやタブレット向けに設計されたOSです。UIはJavaで書かれており、コアな部分はCやC＋＋で書かれているそうです。

OHAってなんやねん？となったのでこちらも調べました。

### Open Handset Alliance(OHA)

[Open_Handset_Alliance(en.wikipedia)](https://en.wikipedia.org/wiki/Open_Handset_Alliance)

> Open Handset Alliance (OHA)は、モバイル機器のオープンスタンダードを開発する84社のコンソーシアムです。メンバー企業は、HTC、Sony、Dell、Intel、Motorola、Qualcomm、Texas Instruments、Google、Samsung Electronics、LG Electronics、T-Mobile、Sprint Corporation、Nvidia、Wind River Systemsなどである。

> OHAは、2007年11月5日にGoogleが中心となって設立され、携帯端末メーカー、アプリケーション開発者、一部の携帯キャリア、チップメーカーなど34社が加盟しています。同アライアンスの主力ソフトウェアであるAndroid（2007年にGoogleが初めて開発）は、オープンソースライセンスに基づいており、Apple（iOS）、Microsoft（Windows Phone）、Nokia（Symbian）、HP（旧Palm）、Samsung Electronics / Intel（Tizen、bada）、BlackBerry（BlackBerry OS）のモバイルプラットフォームと競合してきた。

> 統一されたAndroidプラットフォームを推進するための努力の一環として、OHAのメンバーは、競合するAndroidのフォークをベースにしたデバイスを製造することを契約上禁じられています。

メンバーの一覧を見てみるとなかなかいかついメンツが集まっているコンソーシアムでした。
[OHAのHP](https://www.openhandsetalliance.com/)を見てみると、比較的簡素な印象は受けつつも、Android開発者用のSDKや、Androidそのもののソースコードへの案内などが載っています。

Androidは Linuxカーネル を利用しています。

## 3. Darwin

[Darwin_(operating_system)(en.wikipedia)](https://en.wikipedia.org/wiki/Darwin_(operating_system))

> Darwinは、2000年にApple Inc.によって最初にリリースされたオープンソースのUnixライクなオペレーティングシステムです。Appleが開発したコードと、NeXTSTEP、BSD、Mach、その他のフリーソフトウェアプロジェクトから派生したコードで構成されています。

> Darwinは、macOS (以前はOS XとMac OS X)、iOS、watchOS、tvOS、iPadOSのベースとなっているコンポーネントのコアセットを形成しています。DarwinはほとんどがPOSIXと互換性がありますが、それ自体はPOSIXのどのバージョンとも互換性があると認定されたことはありません。Leopard以降、macOSはSingle UNIX Specification version 3 (SUSv3)との互換性が認定されています。

Darwinは、macOSやiOSなどのベースになっているOSです。

**あれ？macOSがOSじゃないの？** と思った方は鋭いですね。

それでは、macOSのページも見てみましょう。

### macOS
[MacOS(en.wikipedia)](https://en.wikipedia.org/wiki/MacOS)

> macOS（/ˌmækoʊˈɛs/; 以前のMac OS Xとそれ以降のOS X）は、2001年以来、アップル社によって開発され、販売されているプロプライエタリなグラフィカルなオペレーティングシステムのシリーズです。これは、AppleのMacコンピュータのための主要なオペレーティングシステムです。デスクトップ、ラップトップと家庭用コンピュータの市場内で、そしてウェブの使用によって、それはマイクロソフトのWindowsに次いで2番目に広く使用されているデスクトップOSです。

確かに macOSもOSの一種らしいです。では、 **macOSとDarwin**の関係とはなんなのでしょうか？

### macOSとDarwinの関係とは？

> macOSの中核をなすのは、XNUカーネルの上に構築されたPOSIX準拠のオペレーティングシステムで、コマンドラインインターフェイスから標準的なUnixの機能を利用できる。Appleはこの一連のソフトウェアをDarwinという名前のフリーでオープンソースのオペレーティングシステムとしてリリースしました。Darwinの上に、AppleはAquaインターフェイスやFinderを含む多くのコンポーネントを重ね、GUIベースのオペレーティングシステムであるmacOSを完成させました。

つまり、Darwinとは、**Appleがフリーでリリースしたオープンソース**のOSです。CUIでUnixの機能を使うことができ、XNUカーネルとよばれるカーネルを利用しています。
一方、macOSは、**オープンソースのDarwinにFinderなどのGUIコンポーネントを加えたクローズドソース**のOSです。

コアなCUI部分はオープンソースにして多くの開発者の協力を募り質の向上を図った上で、GUI部分はしっかりブランド価値を高めるためにクローズドにするAppleの賢い戦略が見えてきます。

### Darwinのカーネル＝ハイブリッド！
さて、話をDarwinに戻します。Darwinのカーネルである **XNUカーネル**は、**ハイブリッドカーネル**です。 [Hybrid kernel](https://en.wikipedia.org/wiki/Hybrid_kernel)によると、

> ハイブリッドカーネルとは、コンピュータのオペレーティングシステムで使用されるマイクロカーネルとモノリシックカーネルアーキテクチャの側面と利点を組み合わせようとするオペレーティングシステムのカーネルアーキテクチャのことです。

モノリシックカーネル？マイクロカーネル？こちらも調べて見ましょう。

[モノリシックカーネル](https://en.wikipedia.org/wiki/Monolithic_kernel)

> モノリシックカーネルとは、オペレーティングシステム全体がカーネル空間で動作するオペレーティングシステムアーキテクチャである。モノリシックモデルは、それだけでコンピュータハードウェア上の高レベルの仮想インターフェースを定義するという点で、他のオペレーティングシステムアーキテクチャ（マイクロカーネルアーキテクチャなど）とは異なります。プリミティブやシステムコールのセットは、プロセス管理、同時実行、メモリ管理などのすべてのオペレーティングシステムサービスを実装します。デバイスドライバはモジュールとしてカーネルに追加することができます。

[マイクロカーネル](https://en.wikipedia.org/wiki/Microkernel)

> コンピュータサイエンスでは、マイクロカーネル（μカーネルと略されることが多い）とは、オペレーティングシステム（OS）を実装するために必要なメカニズムを提供することができる最小限に近いソフトウェアのことを指します。これらのメカニズムには、低レベルのアドレス空間管理、スレッド管理、およびプロセス間通信（IPC）が含まれる。

> ハードウェアが複数のリングまたはCPUモードを提供する場合、マイクロカーネルは、一般的にスーパーバイザまたはカーネルモードと呼ばれる最も特権的なレベルで実行する唯一のソフトウェアである可能性があります。デバイスドライバ、プロトコルスタック、ファイルシステムなどの従来のオペレーティングシステムの機能は、通常、マイクロカーネル自体から取り除かれ、代わりにユーザ空間で実行されます。

> ソースコードのサイズという点では、マイクロカーネルはモノリシックカーネルよりも小さいことが多い。例えば、MINIX 3マイクロカーネルは約12,000行のコードしかありません。

つまるところ、モノリシックカーネルとは、 **OS全体が使えるように全てのサービスを実装するカーネル** です。
一方、 マイクロカーネルとは、**OSの実装のために必要最低限なメカニズムだけを提供できるカーネル** です。

そして、ハイブリッドカーネルとは、 **モノリシックカーネルとマイクロカーネルの利点を組み合わせたカーネルアーキテクチャ** です。

DarwinのカーネルであるXNUについて深掘りましょう。

### XNU

[XNU(en.wikipedia)](https://en.wikipedia.org/wiki/XNU)

> XNUとは、Apple Inc.で1996年12月からmacOS用に開発されたコンピュータ・オペレーティング・システム（OS）カーネルであり、Apple TVソフトウェア、iOS、iPadOS、watchOS、tvOSの基盤となっているDarwin OSの一部としてフリーでオープンソースのソフトウェアとしてリリースされている。XNUはX is Not Unixの略称である。

`X is Not Unix(XNU)` というネーミングセンスはよくわかりませんが、Darwinと同様にフリーでオープンソースのソフトウェアです(Darwinの一部なので当たり前)。

> 元々は NeXT によって NeXTSTEP オペレーティングシステム用に開発された XNU は、カーネギーメロン大学で開発された Mach カーネルのバージョン 2.5 と 4.3BSD のコンポーネントを組み合わせたハイブリッドカーネルであり、ドライバキットという名前のドライバを書くための Objective-C のアプリケーション・プログラミング・インターフェース (API) を組み合わせたものでした。

> XNU はモノリシックカーネルとマイクロカーネルの両方の特徴を含むハイブリッドカーネルであり、マイクロカーネルのメッセージパッシング能力によりモジュール性が向上し、OS の大部分がメモリ保護の恩恵を受けられるようになり、いくつかの重要なタスクではモノリシックカーネルの速度を維持できるようになるなど、両方の技術を最大限に活用しようとしています。
> XNU カーネルの基盤は、Open Software Foundation Mach カーネル (OSFMK) 7.3 を大きく修正した (ハイブリッドな) ものです。そのため、オペレーティングシステムのコアを分離したプロセスとして実行することができ、大きな柔軟性があります (Mach コアの上に複数のオペレーティングシステムを並行して実行することができます)。

どうやら、XNUは **Machカーネル（の派生物）** と、 **BSD** を組み合わせたハイブリッドカーネルのようです。

### Machカーネル
[Mach Overview - Apple Developer](https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KernelProgramming/Mach/Mach.html)を参照してみると、Machカーネルは、 **抽象性、拡張性、柔軟性**に優れている点が挙げられています。
Machカーネルの主な役割は次のとおりです。

> ・オブジェクト参照としての通信チャネル(ポートなど)を持つオブジェクトベースのAPI
・プリエンプティブスケジュールされたスレッドや SMP のサポートを含む高度な並列実行
・リアルタイム利用をサポートした柔軟なスケジューリングフレームワーク
・メッセージング、RPC、同期、通知を含む IPC プリミティブの完全なセット
・大規模な仮想アドレス空間、共有メモリ領域、永続的なストアにバックアップされたメモリオブジェクトをサポート
・命令セットアーキテクチャや分散環境などでの拡張性と移植性が実証されています。
・セキュリティとリソース管理を設計の基本原則とし、すべてのリソースを仮想化

macOSの品質や性能を上げるために Apple は Machカーネルを修正・拡張してきたようです。

### BSD

> カーネルのバークレー・ソフトウェア・ディストリビューション (BSD) の部分は、ポータブル・オペレーティング・システム・インタフェース (POSIX) アプリケーション・プログラミング・インタフェース (API、BSD システムコール)、Mach タスクの上にある Unix プロセスモデル、基本的なセキュリティポリシー、ユーザおよびグループ ID、パーミッション、ネットワークプロトコルスタック (プロトコル)、仮想ファイルシステムコード (ファイルシステムに依存しないジャーナリング層を含む) を提供しています。

一方で、 **BSD**は、POSIXに準拠したシステムコールAPIや、プロセス管理といったカーネルの基本的な機能を提供しています。

もちろん、これらはオープンソースなので私達でもソースコードを見ることができます。

[XNU - 6153.61.1](https://opensource.apple.com/source/xnu/xnu-6153.61.1/) をみてみると、 `bsd/` というフォルダがあり、実際にBSDを利用していることがわかります。
（ちなみにこのXNUはmacOS 1.15.2でリリースされているもの）

#### BSDカーネル

[Berkeley_Software_Distribution(en.wikipedia.org)](https://en.wikipedia.org/wiki/Berkeley_Software_Distribution) 

> バークレー・ソフトウェア・ディストリビューション (BSD) は、カリフォルニア大学バークレー校のコンピュータシステム研究グループ (CSRG) によって開発・配布された Research Unix をベースとしたオペレーティングシステムでした。今日では、「BSD」は、FreeBSD、OpenBSD、NetBSD、または DragonFly BSD のようなその子孫や、それらの子孫をベースにしたシステムを指すことがよくあります。

BSDカーネルを利用した **FreeBSD**、 **OpenBSD**、 **NetBSD**、 **DragonFly BSD** などの子孫をひっくるめて **BSD**と呼ぶことが多いようです。

[公式HP]()によると、BSDカーネルは以下のような役割があるようです。

> BSD カーネルは、プロセススケジューリング、メモリ管理、対称マルチプロセッシング (SMP)、デバイスドライバなどを処理します。

> - システムの基本APIであるCライブラリ
- BSD Cライブラリは、GNUプロジェクトではなく、バークレーのコードに基づいています。
- シェル、ファイルユーティリティ、コンパイラ、リンカなどのユーティリティ
- ユーティリティの中にはGNUプロジェクトから派生したものもあれば、そうでないものもあります。
- グラフィカルな表示を扱うX Windowシステム。

(**追記：@taraijpn さんの[コメント](https://qiita.com/zawawahoge/items/2ec3b638422c7c8cac8f#comment-e56a145a677e98061d60)に基づき、「BSDカーネル」の項目を追加し、誤解をなくすようにしました。ご指摘ありがとうございます。**)

## 4. DragonFly BSD

[DragonFly_BSD(en.wikipedia)](https://en.wikipedia.org/wiki/DragonFly_BSD)

> DragonFly BSD は、FreeBSD 4.8 からフォークされたフリーでオープンソースの Unix ライクなオペレーティングシステムです。1980 年代後半から 1990 年代初頭の Amiga の開発者であり、1994 年から 2003 年まで FreeBSD の開発者であった Matthew Dillon は、2003 年 6 月に DragonFly BSD の開発を開始し、2003 年 7 月 16 日に FreeBSD のメーリングリストで発表しました。

> Dillon は、FreeBSD 5 で採用されているスレッド処理や対称型マルチプロセッシングの技術が、 パフォーマンスの低下やメンテナンス上の問題につながると考えて DragonFly を始めました。彼は FreeBSD プロジェクトの中でこれらの予想される問題を修正しようとしました 。彼のアイデアの実装を巡って他の FreeBSD 開発者と対立したため、彼が直接コードベースを変更する能力は結局取り消されました。にもかかわらず、DragonFly BSD プロジェクトと FreeBSD プロジェクトは今でも一緒に作業しており、 バグ修正やドライバの更新、その他の改善点を共有しています。

> FreeBSD 4.x シリーズの論理的な継続として意図されていた DragonFly は、軽量カーネルスレッド (LWKT) やカーネル内メッセージパッシングシステム、HAMMER ファイルシステムを実装するなど、FreeBSD から大きく乖離しています。

> 開発中のカーネルメッセージングサブシステムは、Mach のようなマイクロカーネルに見られるものに似ているが、設計上はそれほど複雑ではない。しかし、DragonFly はモノリシックなカーネルシステムを使用しています。DragonFlyのメッセージングサブシステムは、同期または非同期のいずれかの方法で動作する能力を持っており、与えられた状況で可能な限り最高のパフォーマンスを達成するために、この能力を使用しようとしている。

DragonFly BSDは、 **FreeBSDからフォークされたOS**です。元々 FreeBSDの開発者だった Dillon がFreeBSDで採用された技術に対し「音楽性の違い」で決別し、異なるプロジェクトとしてDragonFly BSDを始めたようです。

DragonFly BSDは、Darwinとは異なり、モノリシックなカーネルを使用しているようです。

続いては、大本の FreeBSD について見てみましょう。

## 5. FreeBSD

[FreeBSD(en.wikipedia)](https://en.wikipedia.org/wiki/FreeBSD)

> FreeBSD は、Research Unix をベースにした Berkeley Software Distribution (BSD) をベースにしたフリーでオープンソースの Unix ライクなオペレーティングシステムです。FreeBSD の最初のバージョンは 1993 年にリリースされました。2005 年には、FreeBSD は最も人気のあるオープンソースの BSD オペレーティングシステムであり、 インストールされているすべての単純な許可制の BSD システムの 4 分の 3 以上を占めています。

> FreeBSD は Linux と似ていますが、 範囲とライセンスに大きな違いがあります。すなわち、Linux がカーネルとドライバのみを提供し、システムソフトウェアをサードパーティに依存しているのに対し、FreeBSD プロジェクトは完全なシステムを維持しています。

> FreeBSD プロジェクトには、基本配布物に含まれるすべてのソフトウェアを監督するセキュリティチームが含まれています。広範囲のサードパーティ製アプリケーションは、 pkg パッケージ管理システムや FreeBSD Ports を使ってインストールしたり、 ソースコードをコンパイルすることでインストールすることができます。

> 
そのライセンスにより、FreeBSD のコードベースの多くは、Apple の Darwin (macOS, iOS, watchOS, tvOS の基盤)、FreeNAS (オープンソースの NAS/SAN オペレーティングシステム)、そして Sony の PlayStation 3 や PlayStation 4 のシステムソフトウェアなど、他のオペレーティングシステムの不可欠な部分となっています。

BSDファミリーの中でも4分の３を占めるほどの人気なOSが FreeBSD です。
同じくフリーでオープンソースなOSである Linux は似てる部分もあれば大きく異なる点もあります。
特に、FreeBSDとLinuxの大きな違いの一つが **ライセンス** にあります。

### BSDとLinuxのライセンスの違い

[BSD vs Linux: The Basic Differences](https://helpdeskgeek.com/linux-tips/bsd-vs-linux-the-basic-differences/) から引用します。

> ほとんどの人は気にしないかもしれませんが、ライセンスの違いは実際には重要です。LinuxはGNU一般公衆ライセンス(GPL)を使っています。これは開発者が好きなようにLinuxカーネルに新機能を変更したり追加したりできることを意味します。唯一の問題は、新しく開発されたソースコードは、開発者が望むか否かにかかわらず、すべて公開しなければならないということです。

> BSDは独自のBSDライセンスを使っており、開発者はソースコードを公開しなくても、BSDカーネルやディストリビューションのいずれかに新しい機能を変更したり追加したりすることができます。つまり、オープンソースのBSDは、開発者がその気になればクローズドソースと宣言することができます。開発者は誰に対してもソースコードを公開する義務はありません。

つまり、LinuxはGNUライセンスを使っているので、Linuxカーネルに変更を加えた場合、 **公開しなければならない** という決まりがあります。
一方、BSDは、独自のBSDライセンスを使っているため、 **必ずしもオープンソースにする必要がない** です。

> BSDはLinuxとは異なり、完全なオペレーティングシステムです。BSDはカーネルでもあり、オペレーティングシステムのコアとして使われます。BSDの開発者はこのカーネルを使ってさまざまな種類のプログラムを追加し、完全なディストリビューションとしてユーザに提供します。つまり、BSDオペレーティングシステムは、FreeBSDやNetBSDのように、カーネルとその上に追加されたプログラムを一つのダウンロード可能なパッケージとして配布しているのです。

また、BSDのOSは、それ自身が完全なディストリビューションとして提供されるため、LinuxのようにUbuntuやDebianなどのディストリビューションを必要としないのが特徴です。

## 6. illumos

[Illumos(en.wikipedia)](https://en.wikipedia.org/wiki/Illumos)

> illumosはフリーでオープンソースのUnixオペレーティングシステムです。System V Release 4 (SVR4)とBerkeley Software Distribution (BSD)をベースにしたOpenSolarisをベースにしています。illumosはカーネル、デバイスドライバ、システムライブラリ、システム管理のためのユーティリティソフトウェアで構成されています。LinuxカーネルがさまざまなLinuxディストリビューションで使われているのと同じように、このコアは現在、さまざまなオープンソースの illumosディストリビューションのベースとなっています。

illumosは、 **System V Release 4 (SVR4)** とBSDをベースにした OpenSolaris をベースにしている、とあります。

そもそも、 **System V** とはなんでしょうか？

### UNIX System V

[UNIX_System_V(en.wikipedia.org)](https://en.wikipedia.org/wiki/UNIX_System_V)

> Unix System V (発音: "System Five") は、Unix オペレーティングシステムの最初の商用バージョンの一つです。最初は AT&T によって開発され、1983 年に最初にリリースされました。システムVの4つの主要バージョンがリリースされ、番号は1, 2, 3, 4でした。System V Release 4 (SVR4) は商業的に最も成功したバージョンで、Unix System Unification として販売され、主要な Unix ベンダーの協力を求めた努力の結果でした。このバージョンは、いくつかの一般的な商用 Unix の機能の源となりました。System VはSysVと略されることもある。

> 2020年現在、AT&T由来のUnix市場は、System Vの3つの亜種に分かれている。IBMのAIX、Hewlett-PackardのHP-UX、OracleのSolarisです。

UNIX System V は **Unix OSの商用バージョンの一つ** です。本記事最初のAIXなども System V の亜種として現存しています。

ちなみに、AT&Tは電話を発明したグラハム・ベルによって設立された会社がそのスタートで、今や世界最大の電気通信会社です。

### System V Release 4 (SVR4)

[System V Release 4 (SVR4)](https://en.wikipedia.org/wiki/UNIX_System_V#SVR4)は、System Vのリリースバージョン4です。以下の４つを組み合わせたものです。

- SVR3
- 4.3BSD
- Xenix
- SunOS

### SunOS

> SunOSは、Sun Microsystemsがワークステーションおよびサーバーコンピュータシステム用に開発したUnixブランドのオペレーティングシステムである。SunOS の名前は通常、BSD をベースにしたバージョン 1.0 から 4.1.4 までを指すためにのみ使用され、バージョン 5.0 以降は UNIX System V Release 4 をベースにしており、Solaris というブランド名で販売されています。

**SunOS** は既に開発終了していますが、後ほど出てくる **Solaris** という商用OSに引き継がれています。

## 7. Linux
[Linux(en.wikipedia)](https://en.wikipedia.org/wiki/Linux)

> Linux (/ˈlɪnəks/ (このサウンドリッスンについて) LIN-əks)は、LinuxカーネルをベースにしたオープンソースのUnixライクなオペレーティングシステムのファミリーであり、1991年9月17日にLinus Torvaldsによって最初にリリースされたオペレーティングシステムカーネルである。 Linuxは通常、Linuxディストリビューションにパッケージされている。

> ディストリビューションには、Linuxカーネル、それをサポートするシステムソフトウェアやライブラリが含まれ、その多くはGNUプロジェクトによって提供されています。多くのLinuxディストリビューションは名前に "Linux "という言葉を使っていますが、フリーソフトウェアファウンデーションはGNUソフトウェアの重要性を強調するためにGNU/Linuxという名前を使っており、いくつかの論争を引き起こしています。

さて、かの有名なLinuxまでやってきました。
Linuxというと、OSのいち種類のような気がしますが実はそう言ってしまうと少し語弊があります。
あくまでLinuxは、 **Linuxカーネルを利用するオープンソースOSのファミリー** として捉えたほうが良いです。
それを踏まえた上で **Linux** と呼ぶようにしたいですね。

![img](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Linux_kernel_ubiquity.svg/2880px-Linux_kernel_ubiquity.svg.png)

この画像を見るとわかるように、Linuxカーネルは、左側にあるハードウェアと通信しながら、右側にある様々なアプリケーションとのやり取りもこなします。デスクトップUIのようなGUIはカーネルの外にあり、Linuxカーネルには含まれません。

### Linuxカーネル
[Linux_kernel(en.wikipedia)](https://en.wikipedia.org/wiki/Linux_kernel)

Linuxカーネルは特に重要なので細かく見ていきましょう。

> Linux カーネルは、フリーでオープンソースのモノリシックな Unix ライクなオペレーティングシステムのカーネルである。パーソナルコンピュータ、モバイルデバイス、メインフレーム、スーパーコンピュータ から、ルータ、ワイヤレスアクセスポイント、個人用支店交換、セットトップボックス、FTA受信機、スマートテレビ、パーソナルビデオレコーダ、NASアプライアンスなどの組み込みデバイスに至るまで、多種多様なコンピューティングシステム上に展開されています。その可用性と継続的な開発とサポートにより、多くのオペレーティングシステム・ディストリビューション（一般的にはLinuxとも呼ばれる）が生まれました。

> デスクトップコンピュータのオペレーティングシステムにおける Linux カーネルの採用率は低いものの、Linux ベースのオペレーティングシステムは、タブレットコンピュータ、スマートフォン、スマートウォッチ用の Android オペレーティングシステムでの Linux カーネルの使用を含め、コンピュータの他のほぼすべてのセグメントを支配しています。


Linuxカーネルは、パソコンやスパコン、ルータなどありとあらゆるデバイスに展開されています。WindowsやmacOSに比べてPCでの利用こそ比較的少ないですが、その他のデバイスでは圧倒的シェアを誇ります。

> Linux カーネルは、1991 年に Linus Torvalds によって彼のパーソナルコンピュータ用に考案され、作成されましたが、クロスプラットフォームの意図はありませんでした。Linuxは急速に開発者やユーザを魅了し、他の自由ソフトウェアプロジェクトのカーネルとしてLinuxを採用しました。特にGNUオペレーティング・システムは、自由で非独占的なオペレーティング・システムとして作られ、Unix戦争の戦果の副産物としてUNIXをベースにしています。

> Linuxカーネルは世界中の貢献者によって開発されており、フリーでオープンソースのソフトウェアの代表的な例です。 日々の開発の議論は、Linuxカーネルのメーリングリスト（LKML）で行われています。Linuxカーネル全体は、COPYINGファイルに明記されているように、GNU General Public License version 2 (GPLv2)でリリースされていますが、他の互換性のあるライセンスのファイルもいくつか含まれており、User-space APIヘッダファイル(UAPI)のアドホック免除もあります。

最初は有名な Linus Torvalds によって1991年に開発されましたが、魅力的なプロジェクトである上、フリーでオープンソースであるため、多くの貢献者によって日々開発が行われています。

Linusのgithubリポジトリ([torvalds/linux](https://github.com/torvalds/linux))でなんと91万コミットもあります。
私はこれをローカルにcloneしようとしましたが、めちゃくちゃ時間がかかり断念しました（zipダウンロードでmasterのスナップショットだけダウンロードした）。
興味がある人はダウンロードしてみてください。

せっかくなので、**Linuxカーネルを利用したLinuxのOS**をいくつか見てみます。

### Debian
[Debian(en.wikipedia)](https://en.wikipedia.org/wiki/Debian)

> Debian (/ˈdɛbiən/)  は、Debian GNU/Linux とも呼ばれ、1993 年 8 月 16 日に Ian Murdock によって設立された Debian プロジェクトによって開発された、フリーでオープンソースのソフトウェアで構成された Linux ディストリビューションである。1993 年 9 月 15 日に Debian の最初のバージョン (0.01) がリリースされ、1996 年 6 月 17 日に最初の安定版 (1.1) がリリースされました。また、Debian は他の多くのディストリビューション、特に Ubuntu の基礎となっています。

**Debian** (正確には **Debian GNU/Linux**）は最古参のLinux OSの一つです。細かいですが、 **De**bian のように **De** にアクセントが来ます。

**ディストリビューション**と**オペレーティング・システム**の違いですが、[What is the distinction between an operating system and a distribution with regards to Linux?](https://www.quora.com/What-is-the-distinction-between-an-operating-system-and-a-distribution-with-regards-to-Linux)を読んだ感じ、そこに大きな違いはないようです。

Linuxの歴史として、カーネル以外の部分を好みで構築し友人に配布するなどしていたときがあり、それが「ディストリビューション」の由来であり、もはやそれは時代遅れだ、と言う意見ですね。
このあたりは賛否両論あるかもしれないですがどうでしょうか。ここでは、DebianなどのディストリビューションをOSと区別しないでそのまま混同して使います。

そもそも、GNUとは何か？というところを見てみましょう。

#### GNU

[GNU(en.wikipedia.org)](https://en.wikipedia.org/wiki/GNU)

> GNU /ɡnuː/ は、オペレーティングシステムであり、コンピュータソフトウェアの大規模なコレクションです。GNUは全体が自由ソフトウェアで構成されており、そのほとんどがGNUプロジェクト自身の一般公衆利用許諾契約書(GPL)の下でライセンスされています。

> GNUは "GNU's Not Unix!"の再帰的頭字語で、GNUのデザインはUnixに似ていますが、自由ソフトウェアであり、Unixのコードを含まないという点でUnixとは異なるという理由で選ばれました。

> GNUプロジェクトにはオペレーティング・システムのカーネル、GNU Hurdが含まれています。しかし、Hurdカーネルがまだ生産可能な状態ではないことを考えると、GNUではないカーネル、もっともポピュラーなLinuxカーネルもGNUソフトウェアと一緒に使うことができます。GNUとLinuxの組み合わせはユビキタスなものになっており、この組み合わせはしばしば単に "Linux "と略して呼ばれたり、GNU/Linuxと呼ばれることもあります。

> GNUプロジェクトの創設者であるリチャード・ストールマンは、GNUを「社会的目的のための技術的手段」と考えています。関連して、ローレンス・レッシグはストールマンの著書『自由ソフトウェア、自由な社会』の第二版の紹介文の中で、ストールマンが「ソフトウェアの社会的側面と、自由ソフトウェアがコミュニティと社会正義をどのように創造できるか」について書いていると述べています。

GNUそのものは、OSであり、コンピュータソフトウェアの集まりです。Unixのコード自体を含まず( `GNU = GNU's Not Unix!` )、しかしUnixに似たデザインとあります。

もともとGNU Hurdというカーネルの開発もGNUプロジェクトに含まれているようですが、まだ **not yet production-ready** であるため、多くは **GNUのコンピュータ・ソフトウェア群** をユーザランド、Linuxカーネルをカーネルとして使用した **GNU/Linux** が一般的になっていて、単に **Linux** と呼ばれるようになっているようです。

例えば、GNUプロジェクトのために作られたソフトウェアでいうと、おなじみの **bash** などがあります。

[Bash_(Unix_shell)](https://en.wikipedia.org/wiki/Bash_(Unix_shell))

> GNU Bash または単に Bash は、Bourne シェルに代わるフリーソフトウェアとして Brian Fox によって GNU プロジェクトのために書かれた Unix シェルとコマンド言語です。1989年に最初にリリースされ、ほとんどのLinuxディストリビューションやAppleのmacOS Mojaveやそれ以前のバージョンでデフォルトのログインシェルとして広く使われている。Windows 10 にもバージョンがあります。また、Solaris 11 ではデフォルトのユーザーシェルとなっています。

Debian GNU/Linux以外にも、ユーザランド(アプリケーションなど)はそのままでカーネルだけを別のものに置き換えた **Debian GNU/kFreeBSD** や **Debian GNU/Hurd** などが作られているようです。

> Debian は最も人気のある Linux ディストリビューションのひとつで、Debian のコードベースから他の多くのディストリビューションが作られてきました。2018 年現在、DistroWatch は 141 のアクティブな Debian 派生版をリストアップしています。Debian プロジェクトはその派生版にベストプラクティスのためのガイドラインを提供し、派生版が自分たちの作品を Debian にマージすることを奨励しています。

#### Debian GNU/kFreeBSD

[Debian GNU/kFreeBSD(en.wikipedia.org)](https://en.wikipedia.org/wiki/Debian#Debian_GNU/kFreeBSD)

> Debian GNU/kFreeBSD は廃止された Debian のフレーバです。FreeBSD カーネルと GNU ユーザランドを使用していました。Debian GNU/kFreeBSD のソフトウェアの大部分は Debian と同じソースから作られており、一部のカーネルパッケージは FreeBSD からのものです。kFreeBSD の k は kernel の略で、FreeBSD カーネルを指します。プロジェクトが中止される前、Debian は i386 と amd64 の移植版を保守していました。Debian kFreeBSD の最後のバージョンは Debian 8 (Jessie) RC3 です。

> Debian GNU/kFreeBSD は 2002 年に作成されました。技術プレビューとして Debian 6.0 (Squeeze) に、公式移植版として Debian 7.0 (Wheezy) に含まれています。Debian GNU/kFreeBSD は、Debian 8.0 の時点で公式にサポートされていたプラットフォームとしては廃止されましたが、それは、他のプロジェクトの負担を正当化するのに十分なユーザを引き付けることができなかったからです。Debian の開発者たちは、FreeBSD カーネルに興味を持った理由として OSS, pf, jails, NDIS, ZFS を挙げています。

> Debian 8 以降は更新されていませんが、2019 年 7 月現在、オペレーティングシステムは非公式にメンテナンスされ続けています。

Debian GNU/kFreeBSD は、FreeBSDカーネルとGNUユーザランドを利用したOSです。すでに公式では更新されていないようですが、Linuxカーネルではなく、 **FreeBSDカーネル**を利用しています。

#### Debian GNU/Hurd

[Debian GNU/Hurd(en.wikipedia.org)](https://en.wikipedia.org/wiki/Debian#Debian_GNU/Hurd)

> Debian GNU/Hurd は、Linux の代わりに Hurd マイクロカーネルをベースにしたフレーバです。Debian GNU/Hurd は 1998 年から開発が進められており、2013 年 5 月に正式リリースが行われました。

> Debian GNU/Hurd は、インストーラ CD (公式の Debian インストーラが実行されている) または、すぐに実行できる仮想ディスクイメージ (Live CD, Live USB) として配布されています。この CD は IA-32 アーキテクチャを使用しており、IA-32 および x86-64 PC と互換性があります。Debian GNU/Hurd の現在のバージョンは 2019 で、2019 年 7 月に公開されています。

Debian GNU/Hurd は、[Hurdカーネル](https://en.wikipedia.org/wiki/GNU_Hurd)とGNUユーザランドを利用したOSです。Hurdカーネルは、2020年5月現在、2016年以来リリースされていないようですが、Unixカーネルとの互換性を保つように設計されているようです。
[GNU(en.wikipedia.org)](https://en.wikipedia.org/wiki/GNU)では、 **not yet production-ready** とあるようにカーネルとしての存在感は Linuxカーネル に負けてしまっているようです。

> GNU Hurdは、GNU Machマイクロカーネル上で動作するプロトコルとサーバプロセス(Unix用語ではデーモン)のセットで構成されています。 Hurdは、機能性、セキュリティ、安定性の面でUnixカーネルを凌駕することを目指していますが、Unixカーネルとの互換性はほぼ維持されています。GNUプロジェクトはオペレーティングシステムにマルチサーバマイクロカーネルを選択したが、これは伝統的なUnixのモノリシックカーネルアーキテクチャよりも優れていると認識されたためである。

**（追記：Debianの項目は @c-yan さんのご指摘を受け、Linuxカーネルを使わないDebianについても紹介するように追記しました。それに伴いGNUの説明も追加しました。）**


### Ubuntu

[Ubuntu(en.wikipedia)](https://en.wikipedia.org/wiki/Ubuntu)

> Ubuntu（/ˈʊbʊntuː/uu-BUUN-too）は、DebianをベースとしたフリーでオープンソースのLinuxディストリビューションである Ubuntuは正式には3つのエディションでリリースされています。デスクトップ、サーバー、およびモノのインターネットデバイスやロボット用のコアの3つのエディションが正式にリリースされている。 すべてのエディションは、コンピュータ上で単独で実行することも、仮想マシンで実行することも可能である。 Ubuntuは、OpenStackをサポートしており、クラウドコンピューティングのための人気の高いオペレーティングシステムである。

Ubuntuといえば、ひときわ人気なLinux OSです。Ubuntuの開発組織は、 **Canonical Ltd.** というイギリスの会社です。 **Canonical Ltd.** は、南アフリカの起業家である **Mark Shuttleworth** によって設立されました。

完全に豆知識ですが、Ubuntuという名前は、南アフリカのNguni哲学の `"I am what I am because of who we all are"` という「他人への人間性」の意味合いがあるようです。

## 8. NetBSD

[NetBSD(en.wikipedia)](https://en.wikipedia.org/wiki/NetBSD)

> NetBSD はバークレー・ソフトウェア・ディストリビューション (BSD) をベースにしたフリーでオープンソースの Unix ライクなオペレーティングシステムです。386BSD がフォークされた後に正式にリリースされた最初のオープンソース BSD の子孫である 。

> NetBSD プロジェクトは、コードの明快さ、慎重な設計、多くのコンピュータアーキテクチャへの移植性に焦点を当てています。そのソースコードは公開されており、許可を得てライセンスされています。

NetBSDは、 BSDファミリーの一つでフリーでオープンソースなOSです。歴史をたどると、現代アーキテクチャの基礎とも言えるIntel 80386プロセッサ上で動作するOSである **386BSD**から派生しています。

また、NetBSDからフォークされた有名なOSの一つに **OpenBSD** があります。 

### OpenBSD

[OpenBSD(en.wikipedia.org)](https://en.wikipedia.org/wiki/OpenBSD)

> OpenBSD は、セキュリティに焦点を当てた、フリーでオープンソースの Unix ライクなオペレーティングシステムで、バークレーソフトウェア ディストリビューション (BSD) をベースにしています。Theo de Raadt は、1995 年に NetBSD をフォークして OpenBSD を作成しました。de Raadt によれば、OpenBSD は、セキュリティの緩和策を開発するための 研究用オペレーティングシステムであるとのことです。

OpenBSDは、NetBSDからフォークされたフリーでオープンソースなOSです。
OpenBSDの作成者である de Raadt によると、OpenBSDは `セキュリティの緩和策(security mitigation)を開発するための 研究用オペレーティングシステム` であるらしいです。
どういう意味？と思い、[引用文献(About OpenBSD)](https://www.openbsd.org/papers/hackfest2015-pledge/mgp00002.html) をたどってみると、

> 緩和策は、悪さをし始めるプログラムを停止させます。

> 無効化できる緩和技術→歴史に消える

などからわかるように、バグが起こったら必ず停止させたり、そのような機能を停止することをできなくすることで、セキュリティ上の問題を減らそうとしていることがわかりました。

また、一つのサイドストーリーがありました。

> 1994年12月、Theo de Raadt は NetBSD のコアチームから辞任を余儀なくされ、ソースリポジトリへのアクセスは取り消されました。チームの仲間たちは、メーリングリストでの性格の衝突が原因だと主張しました。

どうやら、NetBSD プロジェクトでのメーリスでの衝突が原因で、コアチームから辞任を余儀なくされたらしい。

> OpenBSD プロジェクトは、他のオペレーティングシステム用のパッケージとして、多くのサブシステムの 移植可能なバージョンを維持しています。このプロジェクトでは、コードの品質を重視しているため、多くの コンポーネントが他のソフトウェアプロジェクトで再利用されています。Android はその C 標準ライブラリを使用しており、LLVM はその正規表現ライブラリを使用しており、Windows 10 では LibreSSL を使用した OpenSSH を使用しています。

そしてOpenBSDそのものの話に戻ると、OpenBSD は品質の高いコードというだけではなく、他のOSのためのパッケージも提供することで、多くのコンポーネントを他のソフトウェアプロジェクトが利用できるようにしているようです。

例えば、Android は OpenBSD の C標準ライブラリ を使用していたり、Windows10 も OpenBSDによって開発されている [OpenSSH](https://en.wikipedia.org/wiki/OpenSSH) を使用しています。

(**追記：BSDファミリーの中で有名なOpenBSDがないという意見がいくつかあり、私自身も必要と考えたため、「OpenBSD」の項目を追加しました。**)

## 9. Plan 9

[Plan_9_from_Bell_Labs(en.wikipedia)](https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs)

> Bell LabsのPlan 9は、1980年代半ばにBell LabsのComputing Science Research Center (CSRC)に由来し、1960年代後半にそこで最初に開発されたUNIXのコンセプトをベースに構築された分散型オペレーティングシステムです。最終的な正式リリースは2015年初頭。

> Plan 9の下では、UNIXのeverything is a fileのメタファーは、広汎なネットワーク中心のファイルシステムを介して拡張され、UNIXライクなオペレーティングシステムの中心にあったカーソルアドレッシングされたターミナルベースのI/Oは、Plan 9のシェルであるrcはテキストベースであるが、カーソルアドレッシングのないウィンドウシステムとグラフィカルなユーザーインターフェイスに置き換えられている。

> Bell LabsのPlan 9という名前は、エド・ウッドが1959年に制作したカルト的なSF映画「Plan 9 from Outer Space」への言及である。 プロジェクトのマスコットの名前は "Glenda, the Plan 9 Bunny "である。現在もオペレーティングシステムの研究者や趣味の人たちに利用され、開発されている。

Plan 9は、2015年初頭にリリースして以来、リリースされていないようです。

## 10. Solaris

[Solaris_(operating_system)(en.wikipedia)](https://en.wikipedia.org/wiki/Solaris_(operating_system))

> SolarisはSun Microsystemsによって開発されたフリーではないUnixオペレーティングシステムです。1993年に同社の以前のSunOSに取って代わりました。2010年、SunがOracleに買収された後、Oracle Solarisに改名されました。

あの Oracle が開発するのが **Solaris**です。
[UNIX System V](#unix-system-v)でも紹介したとおり、 **商用UNIXであるSystem Vの亜種**です。

2011年にソースコードがBitTorrentに流出するなど色々あったようですが、最近でも2018年8月にリリースされています。

## 11. Microsoft Windows
[Microsoft_Windows(en.wikipedia)](https://en.wikipedia.org/wiki/Microsoft_Windows)

> Microsoft Windowsは、一般的にWindowsと呼ばれる、いくつかのプロプライエタリなグラフィカル・オペレーティング・システム・ファミリーのグループであり、そのすべてがMicrosoftによって開発され、販売されています。

> 各ファミリは、コンピューティング業界の特定のセクターに対応しています。アクティブな Microsoft Windows ファミリには、Windows NT と Windows IoT があります。

さて、みなさんよくご存知のWindowsですが、 Windows XP や Windows 10 などの名前はあくまで **Marketing name** です。
実態は、 **Windows NT** のバージョンで **5.1 が Windows XP** 、 **10.0 が Windows 10** のように別名がついている、という命名になっています。

### Windows NT

[Windows_NT(en.wikipedia)](https://en.wikipedia.org/wiki/Windows_NT)

> Windows NTは、マイクロソフトが製造したオペレーティングシステムのファミリーで、1993年7月27日に最初のバージョンがリリースされました。これは、プロセッサに依存しない、マルチプロセッシングとマルチユーザのオペレーティングシステムである。

Windows NTは商用OS（のファミリー）であり、クローズドソースです。

### WindowsカーネルとLinuxカーネルの違いはなに？

[What is the Difference Between Windows Kernel and Linux Kernel](https://pediaa.com/what-is-the-difference-between-windows-kernel-and-linux-kernel/)でまとめられているように、WindowsカーネルとLinuxカーネルを対比させてみると違いがよくわかります。

例えば、 **Windowsカーネルはハイブリッドで、 Linuxカーネルはモノリシックである** 点や、 **WindowsカーネルはGUIも含む**点などが挙げられます。

特に、デバイスの扱いは異なっていて、 **全てはファイルである**というUNIX哲学を継承したLinuxはデバイスをファイルとして扱うように作られています。一方で、Windowsは **デバイスとのやり取りにデバイスごとに異なる方法を用いています** 。
このような抽象化の仕方に違いがあるようですね。

### MS-DOSって何？

再び、Windows NT の説明に戻ってみます。

> Windows NTの最初のバージョンはWindows NT 3.1で、ワークステーションとサーバーコンピュータ用に開発された。これは、MS-DOS (Windows 1.0 から Windows 3.1x を含む) をベースにした Windows のコンシューマ版を補完することを目的としていた。徐々に、Windows NT ファミリーは、Windows 9x ファミリーを廃止して、すべてのパーソナルコンピュータ向けのマイクロソフトの汎用オペレーティングシステム製品ラインに拡大された。

Windows NT の最初のバージョンは、 **MS-DOS** をベースにして作られています。
**MS-DOS** とは何でしょうか？

その前に、 **DOS** とはなにか？を見てみます。

### DOS
[DOS(en.wikipedia)](https://en.wikipedia.org/wiki/DOS)

> DOS（/dɒs/、/dɔːs/）は、プラットフォームに依存しないディスクオペレーティングシステムの頭文字をとったもので、後にIBMのPC互換機上でディスクベースのオペレーティングシステムのための一般的な略語となった。DOSは主にMicrosoftのMS-DOSと、PC DOSという名前で再ブランド化されたIBM版で構成されており、どちらも1981年に導入された。その後の他のメーカーの互換システムには、DR DOS (1988年)、ROM-DOS (1989年)、PTS-DOS (1993年)、およびFreeDOS (1998年)がある。1981年から1995年までは、MS-DOSがIBM PC互換機市場を席巻していました。

> 1966年のメインフレームDOS/360を皮切りに、他の数十種類のオペレーティングシステムも「DOS」という頭字語を使用しています。その他には、Apple DOS、Apple ProDOS、Atari DOS、Commodore DOS、TRSDOS、およびAmigaDOSがあります。

**DOS** とは、元々はプラットフォームに依存しないディスクオペレーティングシステムの頭文字を取ったものでした。

そもそもディスクオペレーティングシステムとは何でしょうか？

[Disk_operating_system(en.wikipedia)](https://en.wikipedia.org/wiki/Disk_operating_system)

> ディスクオペレーティングシステム（略称：DOS）は、フロッピーディスク、ハードディスクドライブ、光ディスクなどのディスク記憶装置上に存在し、それを使用することができるコンピュータオペレーティングシステムです。ディスクオペレーティングシステムは、ストレージディスク上のファイルを整理、読み取り、書き込みするためのファイルシステムを提供しなければならない。厳密に言えば、この定義は、現在使用されているMicrosoft Windowsのバージョンのような現在の世代のオペレーティングシステムには適用されず、より適切には、より古い世代のオペレーティングシステムにのみ使用されます。

ディスクオペレーションシステムとは、オペレーティングシステムのうち、ディスク記憶装置上にあるものを指すようです。ただ、この定義の対象となるOSは古い世代のOSのみに限定される、とあります。
歴史を眺めてみるとその命名が行われた背景がわかってきます。

DOSの歴史について、[DOS (Disk Operating System)](https://searchsecurity.techtarget.com/definition/DOS)に、わかりやすい説明があったので引用します。

> オペレーティングシステム（OS）は、コンピュータのハードウェアや周辺機器を制御し、他のプログラムが機能するようにするソフトウェアです。初期のコンピュータにはディスクドライブはありませんでしたが、特定の計算を実行するためにハードワイヤードされていました。その後、コンピュータは、パンチカードや後の磁気テープを使用して、コンピュータのメモリにロードされた命令を保存することができるようになりました。コンピュータのメモリスペースは限られており、コンピュータを制御するための命令がフロッピーディスクや内蔵ハードドライブなどのディスクドライブに移されたとき、それは最先端の技術と考えられていました。今日では、最新のオペレーティングシステムはすべてディスクオペレーティングシステムと考えられています。

これによると、最も初期のコンピュータでは、現在のディスクドライブのようなものはなく、命令を変更するためにはハードウェアを変更する必要がありました。
その後、パンチカードや磁気テープを利用して、 **外部から** 命令をロードできるようになりました。
そして、当時最先端の ディスクドライブ（フロッピーディスクなど） からプログラムやOSなどのコンピュータ制御のための命令を読み取れるようになったというの流れのようです。

当時はOSがディスクに保存されていることが現代のように当然ではないので、 ディスクドライブに保存されたOSにディスクオペレーティングシステム(DOS)という名前がついていました。

DOSには、[Apple DOS](https://en.wikipedia.org/wiki/Apple_DOS) や **MS-DOS** などがあります。


### MS-DOS
[MS-DOS(en.wikipedia.org)](https://en.wikipedia.org/wiki/MS-DOS)

> MS-DOS（/ˌɛmˌɛsˈdɒs/ em-es-DOSS、Microsoftディスクオペレーティングシステムの頭字語）は、主にMicrosoftによって開発されたx86ベースのパーソナルコンピュータ用のオペレーティングシステムです。集合的に、MS-DOSは、IBM PCのDOS、およびMS-DOSと互換性があるようにしようとするいくつかのオペレーティングシステムとして、そのリブランディングは、時々 "DOS"（また、ディスクオペレーティングシステムの一般的な頭字語である）と呼ばれています。MS-DOSは1980年代にIBM PC互換のパーソナルコンピュータのための主要なオペレーティングシステムでしたが、その時点から、グラフィカルなMicrosoft Windowsオペレーティングシステムの様々な世代で、グラフィックユーザーインターフェース（GUI）を提供するオペレーティングシステムに徐々に取って代わられていきました。


DOSの中でも、 **MS-DOS** は、x86アーキテクチャに対応するOSです。
GUIを提供するWindowsの世代に取って代わられるまで、重要な役割を果たしてきました。

> 当初、MS-DOSは、オペレーティング・システムだけでなく、アプリケーション・ソフトウェアやユーザー・データを保存し、アクセスするためにフロッピー・ディスクを使用するコンピュータ・ハードウェア上で動作するIntel 8086プロセッサをターゲットにしていました。進歩的なバージョンのリリースでは、より大きなサイズとフォーマットの他の大容量ストレージメディアのサポートが提供され、さらに新しいプロセッサと急速に進化するコンピュータアーキテクチャのための機能サポートが追加されました。最終的には、マイクロソフトがプログラミング言語会社から多様なソフトウェア開発会社へと発展していく上で重要な製品となり、同社に不可欠な収益とマーケティングリソースを提供しました。

MS-DOSはマイクロソフトという今や巨大企業が、今日の発展を築くための礎となった製品であるようですね。



# まとめ

かなり長くなりましたが、いかがでしたでしょうか？
おそらく一度通読しただけで腑に落ちる人はいないので、ぜひリンクをたどって元の記事を参照したり、自分で調べたりしてみてください。

英語の記事を検索するときに便利なテクニックとして、「○○ vs □□」のように **vs** を付けて検索するといい感じに対比してるサイトが出てくる事が多いです。
対比を見ると、今まで自分が学んできた内容と比較しながら新しいことを学べるので、効率的に勉強をすすめることが出来ます。

「英語を読むのが大変！」って人でも、DeepLの翻訳を使えば、サクサク読むことが出来ます。

今回まとめてみてわかったことは、自分でノートにまとめるのと、他人に見せる意識で再構成するのは全然違うということでした。
やはり、曖昧な部分が記事を構成する中で出てきて、そのたびに調べ直して項目追加したりしました。

といっても、基本的にはWikipediaのコピペがベースにあるので、そこの負担自体はそこまでではなかったです。

普段馴染みのないOSのことが知れて楽しかったです。

参考になれば **LGTM** よろしくお願いします！

[**ざわほげ**(@zawawahoge)](https://twitter.com/zawawahoge)という名前で Twitter もやってます。
技術系や（元）専門分野についての情報発信をしているので、興味ある方はぜひフォローしていただけると大変嬉しいです！

# 更新情報


（追記：2020/5/9 20:13 Windowsの項目が後半で力尽きてたので、[MS-DOSって何？](#ms-dosって何) を追加。）
（追記：2020/5/9 20:39 [BSDカーネル](#bsdカーネル)の項目追加。）
（追記：2020/5/9 21:12 [OpenBSD](#openbsd)の項目追加。）