「MacはもともとLinuxじゃない」→ ワイ「え、マジで？？？」

# はじめに

どうもはじめまして！そろばん王と申します！
今回の記事がQiita初めての投稿です！よろしくお願いします〜。

ところで最近、Twitterで「MacはもともとLinux」なる文句が流行っていましたよね？？（少なくともこの記事を書き始めた当初はかなりバズっていました…）
僕は大学生の頃からMacをずっと使ってきたのですが、実は僕もこれまで「MacOSはLinuxベースで作られたOS」って思ってたんですよね…。（だってMacのコマンドとLinuxのコマンドほぼ変わらないじゃ無いですか…。Twitterでバズってるのを見て、「MacってLinuxベースのOSじゃないの⁉︎」って目を丸くしてました…。）

なので、今回はMacOSが生まれるまでの歴史の概要を自分なりに色々調べてみた内容をこの記事でまとめてみようと思います。間違っている点あれば指摘していただけると幸いです！

#結論
先に結論をお伝えします。
<font color=red>**MacOSはもともとUNIXです。**</font>
OSの系譜は大体以下のようになります。
![OSの系譜図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561424/dffc5d47-3193-ef49-f382-432598e76884.png)

#OSの誕生
まず、OSという概念がいつ生まれたのかについて解説します。[UNIXオペレーティングシステム(OS誕生からLinuxまでの歴史)](https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2)では、OSの歴史について以下のように説明されています。
> OSの歴史は、コンピュータが産まれてから20年ほど経った1960年代中期からスタートします。1960年中期にIBMが開発した商用コンピュータ・システム IBM System/360は、本格的なOS (OS/360)を搭載していました。それ以前のコンピュータ・システムは、部分的にはOSとしての機能を満たしたものがありますが、OS として機能及び概念が確立はしていません。IBM System/360が始めてOSの機能と概念を確立させました。

つまりコンピュータが生まれてしばらくの間は、OSというクッションを挟まず、ハードウェアとソフトウェアが密接に関係していたという訳です。そのため、ハードウェアの構成（CPUの数やメモリ数etc.）が少し違うだけでアプリケーションの互換性が失われてしまっていたのですね（アプリケーションがうまく動かなかった）。そこで生まれたのがOSです。ソフトウェアをOS依存にさせることでハードとソフトを切り離し、簡単にアプリケーションに互換性を持たせることができるようになった訳です。

![無題の図形描画.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561424/a77b533f-9891-58b3-ad8b-5d872c932949.png)

# UNIXの始まり
OSという概念が生まれてから数年経った1968年に、ベル研究所のKen ThompsonとDennis Ritchieが共同でOSを開発します。これが、最初のUNIXです。
実はUNIXが開発される前、彼らはMULTICSプロジェクトという複数社が参加するプロジェクトに参加していました。このMULTICSは、OSにより多目的な機能を持たせようとしたプロジェクトでしたが、当時のハードウェアの性能やソフトウェアの技術的ではあまりにも無謀なプロジェクトであったため、計画はあまり順調に進まず、結果的にベル研究所はこのプロジェクトから撤退します。

Ken ThompsonとDennis RitchieはMULTICSプロジェクトの反省を活かし、コンパクトなOSを作ることを目的としていました。そこで作ったOSをMULTICSからもじって「UNICS」と名づけ、これが最終的に「UNIX」となります。

# SystemV系とBSD系への分岐
最初にUNIXが誕生してからしばらくして、UNIXはベル研究所直下のSystemV系とカルフォルニア大学バークレー校がUNIXのソースコードを使って改良したBSD（Berkeley Software Distribution）系に分岐します。
で、どっちが人気だったかというと結果はBSDの方。仮想記憶の能力が高い、ファイルシステムが高速などの理由で研究所や大学を中心としてBSDは急速な広がりを見せます。
BSDは最初のバージョンである1BSDから始まり、最終的に4.4BSDまでリリースされます。

# Machの開発
BSD誕生からしばらくして、BSDを改良したマイクロカーネルタイプOSのMachが誕生します。このMachカーネルが現在のMacOSの原点とも言えるNeXTSTEPのカーネル（※）となります。（このことからMacOSはUNIX系列に分類されることになりますね。NeXTSTEPについてはこの後説明します。）
このMachはCMU（Carnegie Mellon University）のアビー・テバニアンによって開発されます。このMachが開発された1980年代中頃、米国の研究機関で主に用いられていた 4.2BSD UNIXの設計は、古く効率の悪い仮想記憶機構、マルチプロセッサマシンに対して非効率な構造、移植性の悪い冗長なコードなど、当初のUNIXでは想定していない様々な機能をカーネルに追加したため、非常に見通しの悪い構造となってました。これを解決する目的でMachは誕生しました。

※正式には、NeXTSTEPではMachマイクロカーネルにBSDカーネルなどを追加したXNUというコアOSを採用しており、これはマイクロカーネルとモノリシックカーネルという2つのいいとこどりをしたハイブリッドカーネルという方式です。

ここで、**カーネルとは何か？**について少し解説してみます。
カーネルを一言で表すと、**「OSの中核となるプログラム」**です。このカーネルがシステムのメモリ管理、ファイルの管理、デバイスドライバとしての役割、プロセスの管理等を行なっています。例えるなら、「ユーザからの指示に従ってハードウェアを稼動させる"頭脳"の役割を担っている」などと言えます。ですが、カーネルだけではOSは動作しません。OSとして動作するにはそのほかの様々なミドルウェアが必要となります。その中の一つとして、たとえば「シェル」があります。シェルはコンピュータを扱うためのユーザーインターフェースとなるアプリケーションですが、まさしくこのシェルがカーネルとユーザーの間を「仲介」する役割を持っているのです。イメージとしてはこんな感じでしょうか？
![シェルとカーネル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561424/3515881b-cd4e-f18b-24dc-ba90ea7be9ba.png)

# NeXTSTEPの誕生
Machを開発したアビー・テバニアンはその後、NeXTに入って新たにNeXTSTEPを開発します。（NeXTSTEPはMachをベースにして生まれたOSです。）このNeXTという会社、実はAppleを追放されたスティーブ・ジョブズが作った企業です。ほら、だんだんMacOSの誕生に近づいてきましたね。

# Copland計画の失敗とAppleによるNeXT社の買収
ジョブズのいないAppleでは当時、Macintoshに搭載する予定であったマルチタスクOSの開発プロジェクトを進めていました。しかし、様々な理由により開発は難航し、結果的にCopland計画は失敗に終わってしまいます。
そんな時、Appleが目をつけたのが、NeXTSTEPでした。NeXTSTEPは設計自由度が高く、先進的なOS設計であるがゆえ移植性が高く、そこを評価したAppleはNeXT社を買収して、Macintoshの次世代OSの開発を進めていこうと考えたのです。（NeXT社を買収した際に副次的にジョブズも付いてきてしまい、結果的にAppleはジョブズに乗っ取られてしまったみたいです…笑）

こうしてNeXTSTEPをベースにして生まれたのが、MacOSやiOSのベースとなるOSの**「Darwin」**です。このDarwinとは、AppleがフリーでリリースしているオープンソースのOSです。DarwinとMacOSの関係は[こちらの記事](https://qiita.com/zawawahoge/items/2ec3b638422c7c8cac8f)で綺麗にまとめられています。
以下、記事の引用です。
> > 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の賢い戦略が見えてきます。



#Linuxの誕生
時を少し遡ります。世間がSystemVかBSDかと論争をしていた1991年、フィンランドの大学生Linus Torvaldsが勉強の一環でLinuxカーネルを開発します。この名前は、自身の名前とUNIXからもじって名付けられたものです。
このLinuxは当時トレンドとなりつつあったマイクロカーネルではなく、モノシリックカーネルを採用していました。(マイクロカーネル、モノシリックカーネルなどの言葉については[こちらの記事](https://qiita.com/zawawahoge/items/2ec3b638422c7c8cac8f)で詳細にまとめられています。)
しかし、誰もが知っている枯れた技術を使っているからこそ色々な人が手を加えやすく、結果的にLinuxは発展していきました。

ここで、注意してほしいのは<font color="red">**LinuxとUNIXは全く別物である**</font>ということです。確かに、開発者のLinus TorvaldsはUNIXを参考としてLinuxを開発していますが、ゼロから開発しているため中身のソースコードは全く違うものとなっています。

つまりLinuxは**Linus Torvaldsという天才が作り上げた全く新しいOSカーネル**という訳です。

#Linuxの成長
Linuxは最初からオープンソースとして作られたわけではありません。しかし、Linuxの出来がよかったため、多くの人に見てもらってアドバイスをもらおうと考えた彼は、オープンライセンスがついた状態でLinux version 0.02をリリースします。ここからLinuxの快進撃が始まります。

純正のUNIXやその他のUNIX系OSはライセンスで縛られていたため、開発者は自由な改良ができませんでした。**反面Linuxはオープンソースであるが故多くの人が手を加えることができ、商用利用もできた**ため、結果的にLinuxは一気に市場の人気を掻っ攫っていきました。

こうしてLinuxはオープンソースとして発展し、現在ではGNUのソフトウェア群によって構成されたソフトウェアをLinuxカーネルと共にパッケージ化してOSとして使えるようにした、様々なディストリビューションが公開されています。

#まとめ
これまでの話をまとめると、以下のようになります。

- UNIX系譜のOSをベースとしてMacOSが生まれた
- UNIXとLinuxは別物
- LinuxはUNIXとは異なりオープンソースであったため、多くの開発者によって改良され、現在では様々なディストリビューションで無料公開されている


#あとがき

最後までご覧いただきありがとうございました！！
これからも色々な技術記事を投稿していきたいと思いますので、よろしくお願いします。


### 参考記事

- [「MacはLinuxだった」って本当？　「そうだね……」元Mac雑誌編集者は昔語りを始めた](https://www.itmedia.co.jp/news/articles/2201/26/news077.html)
- [UNIXオペレーティングシステム(OS誕生からLinuxまでの歴史)](https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2)
- [Mach(Wikipedia)](https://ja.wikipedia.org/wiki/Mach)
- [Linux豆知識](https://linuc.org/study/knowledge/358/)
- [MacOS(Wikipedia)](https://en.wikipedia.org/wiki/MacOS)
- [11種類のオペレーティング・システムについてまとめてみた](https://qiita.com/zawawahoge/items/2ec3b638422c7c8cac8f)
- [【初心者向け】Linuxの歴史解説！ OS誕生からLINUXへ](https://eng-entrance.com/linux_birth)