さわらブログ

さわら(@xhiroga)の技術ブログ

書評 - 図解で明解 MacOS Xのしくみ

defaultsコマンドについて調べているうちに、NeXTSTEP時代からのユーザーがMac OS Xをどう思っているかをぜひ知りたくなって購入、通読しました。

amzn.to

著者の海上忍さんは、マイナビニュースで OS Xハッキング! という連載をお持ちだった方です。defaultsコマンドの隠しオプションを探す記事があまりにも面白く、Amazonで著者名で検索して手頃な価格の本書を購入した...というわけです。

news.mynavi.jp

感想が多くなるので、本書について触れた後、特に気になった前半について章ごとに述べます。

本書について

表紙に「Aquaを超えて。」とあるように、GUIだけでは分からないOS Xの魅力を語っている本です。要するに開発者かオタク向けの本と言っていいと思います。

著者は単にMac OS Xに詳しい人というわけではなく、BSDの特徴やNeXTSTEPAmazonの著書を見る限りはBeOS)など、コンピューターが本当にお好きな方だと推察します。

図解と言っても昨今よくある操作のスクショを貼って水増しした本ではなく、OSの起動の仕組みやDarwinの仕組み、OS Xに連なるOSの系譜などの概念図が盛りだくさんです。しかも全部で300ページ以上あり、それでいて発売時の値段は2,000円弱というカルピスの原液を煮詰めたような本です。

もちろんスクショもあるのですが、それにしてもNeXTSTEPOS X Serverのスクショなど、本当にコンピューターが好きでないと撮れないスクショが多くて驚きました。

MacOS Xの基本

この本を通読して思いましたが、OSを知るには意識高くOSを自作するより手元のmacOSを徹底的に知ったほうが近道だと思います。そうした要求に応えてくれる章でした。 また、全体を通してMac OX 9以前との比較で書かれている点が興味深いです。

ホームフォルダとマルチユーザーに関する解説は、これまで業務でLinuxを触ってきてなんとなく分かっていたものが他人の言葉で整理された感じでありがたかったです。特に「職場や学校など大人数が1台のコンピュータを共有することを前提として」UNIXがマルチユーザーのモードを備えていたことは納得がいきました。同時に、マルチユーザーが前提ではなかった(と推測される)OS 9以前に思いを馳せて、現代の当たり前にも歴史があるのだと思いました。

2003年の本ということもあり、当時のOS X(10.2 Jaguar)と私が使っているmacOS(11.5.2 Big Sur)だと違う点もあります。

例えばシステム起動時の舞台裏として解説されている、Open Firmawreから起動される /System/Library/CoreServices/BootX )は 、Big Surでは(歴史的には OS X 10.6から) /System/Library/CoreServices/boot.efi に取って代わられています(というか BootXというのは PowerMac の場合のファイル名かもしれません。要調査)

en.wikipedia.org

その後に起動する initは launchd に取って代わられているし、 /etc/rc/etc/rc.common/etc/rc.netboot に変わられているようです。

www.itmedia.co.jp

しかし、本質的な理解に障るほどではないし、現代のmacOSについてここまで解説した本があるのかも疑問なので、やはり有り難いと思って読んでいます。

(Oreillyの Running Mac OS Xは同様の本かもしれません。今度読んでみます)

amzn.to

その他の箇所でいうと、仮想メモリが常に有効なこと(そういえばmacOSWindowsみたいなデフラグをしたこと無いな)、OS 9以前はApple Talkが基本だったこと(TCP/IPじゃない低レイヤーが想像つかない...)も興味深かったです。

MacOS Xの基礎技術

macOS...というかDarwinハイブリッドカーネルで、MachBSDの系譜である...というのがイマイチ分かっていなかったのですが、本章で少し理解が進みました。

DarwinBSDの系譜であるというのには2つの意味がありそうです。まずDarwinカーネルであるXNUがMachBSDの両方の特徴を併せ持つということ。次に、ユーザー向けシェルやコマンドはBSDから移植したものが多いこと 。とはいえ以下にツイートしたとおり全然分かっていないので勉強を勧めたい所存です(そろそろmacOSアプリ作るなりDarwin動かすなりしたほうが早いかも)

実は、 defaults コマンド(そして前身の dread, dwrite, dremove )の由来がBSDではないか?と疑っていたのですが、今回調べておそらく違うという思いを強めました。 (defaultsコマンドはプロパティリストを編集するコマンドだが、プロパティリストはCoreFoundationのオブジェクトであり、それはNeXTのカーネル部分というよりは開発者向けキットが由来のため)(なのでどちらかというとSmallTalkに源流がある気がしないでもない。要調査)

実行可能なバイナリに旧Mac OS用とOS X用の違いがあることを初めて知りました。MacOS 9以前との後方互換性を一応保とうとしていることが伺えるのも面白かったです。

これに関連して、手元のBig Surのアプリケーションのバイナリ形式を見てみたら Mach-O で、歴史を感じて嬉しくなりました。

他、ルートディレクトリに関する解説もためになりました。そういえばLinuxも体系的に学んだことが無い気がするのですが、これを気に学んでもいいかもしれません(Dockerfileでバイナリをどこに配置するか、とかで悩んでしまうので)

BSDとしてのMaxOS X

この章ではBig Surとの違いが面白かったです。

一番衝撃を受けたのはリソースフォークです。Apple独自のファイル形式(ファイル内にメタデータの領域を持つ。リソースフォークはメタデータ領域の名前)があるのは不思議ではないですが、それにしても互換性がなさすぎる...と思いました。ちゃんと廃れたようで良かったです。

他、基本のシェルが tcsh だったことも驚きました。私が OS Xを使い始めた頃にはすでに bash で、現在は zsh なので、2回も変わっていて驚きです。

まとめ

macOSの歴史を知りたい私にピッタリの本でした。知れば知るほど知らないことが増えていく感じがするので、自分のペースで本やソースを読んでいきたいなぁ、と思います。