※この文章はベータ版です。
本文
「Dockerとはどういったものなのか、めちゃ
くちゃ丁寧に説明してみる」を読んで、気になったので、書いています。
macOSとLinux(広義のLinux)は上層では全く別物といっても過言ではないくらい違いますが、下層のカーネルレベルではUNIXというOSアーキテクチャに則って実装されているレイヤを持つ血統?的には近い?OSです。
macOSのXNUカーネルはカーネギーメロン大学で開発されたmachマイクロカーネル派生のカーネルです。
XNUカーネルはFreeBSDのコードをベースとして
実装されたBSDレイヤをもっています。
(XNUカーネルのBSDレイヤには、LinuxカーネルのAPIを採用している部分があります。)
macOSは、XNUカーネルのBSDレイヤにより、UNIX仕様に準拠した、UNIX互換のOS、となっています。
Linuxカーネル(狭義のLinux)は、POSIXに準拠し、UNIX仕様に沿って実装されていて、UNIX仕様にほぼ準拠している、UNIX互換のOSです。
(UNIX仕様を管理しているThe Open Group から認証されないとUNIXとは名乗れませんし、UNIX仕様に準拠している、とも言え(書け)ません。
UNIX認証には費用が掛かります。OSSであるLinuxの開発サイドは費用の掛かるUNIX認証の必要性を感じていませんでしたし、今も感じていないでしょう。)
UNIX互換レイヤが、Linuxでは、カーネルのコア機能に組み込まれていて不可分となっていて、macOSのXNUカーネルでは、カーネルのコア機能と分離されている、点が違うものの、どちらもUNIX互換のレイヤをもっています。
macOS上のターミナルで、bash等のシェルを介して、BSDレイヤの機能を利用しているユースケースでは、Linuxとの差異を感じることはほとんど、ありません。
両者にネイティブコードレベルでの互換性は皆無ではあるものの、macOSでの実装において、BSDレイヤのAPIのうちLinuxと互換性のあるものを利用するか、両者の上で動作する両者の差異を吸収するライブラリを利用している、タイプのプログラムであれば、ネイティブアプリであってもソースコードレベルでの互換性を実現することは可能です。
macOSは、CoreFoundation(C)とそれをラップしたFoundation(Objective-C → Swift)というライブラリを持ち、その上にAppKit、Mac Catalystetcのライブラリ群が実装されています。
これらのライブラリ群とその上に実装されたツール群が、macOSをmacOSたらしめ、Linuxとは全くの別物にしています。
#オマケ
WindowsとLinuxは、上層から下層に至るまで、全くの別物です、互換部分はどこにもありません。
Windows上でLinuxアプリを動かすしくみにWSLがあります。
WSL1はLinuxカーネルのシステムコールをWindowsカーネルのシステムコールに置き換えて実行する荒技的な実装となっていましたが、WSL2では、Windows10以降に搭載された軽量仮想マシン(のしくみ)を利用して、仮想マシン上でカスタマイズしたLinuxカーネルを動かす形に変更されています。