Mac OS Xの奇跡
- the simplicity and elegance of Macintosh ,again

しろやまたかゆき <shiro@installer.org>

-MacOS X の奇跡- MacOS X- Darwin : base system of MacOS X

MacOS X とは
• 従来とは異なる、新たな系統の MacOS• Mach3.0 + 4.4BSD の土台 + Macの上物• “ UNIX Stability and Macintosh Simplicity.”• 3/24 出荷• 5/22 工場出荷分より、全てのMac ( iMac / iBookを含む ) にプリインストールされる• 現在流通している Macにはバンドルされている

AQUA
Classic Carbon Cocoa
CoreServices( Quartz OpenGL QuickTime )CoreOS (Kernel)

BSD

市場としての Mac• 出荷台数: Apple Webページより– 65万9千台( 2001Q1, 2000/10-12)– 112万台( 2000 Q4, 2000/7-9 )– 101万台( 2000 Q3, 2000/ 4 - 6 )– 大まかに、年400-500万台• OSシェア 5.0% ( 出荷数, IDG調べ 1999 )http://www.idg.co.jp/report/market/backnumber/analysis/200009/mar20000901_01.html– ちなみに Linuxが同調査で 4.1 %– サーバ市場に限れば Linux は24%

• デスクトップ市場で約33%?
BCN Award 2000

http://www.computernews.com/marketview/award2000/award2000list.html

Migrate or Die?
• MacOSから MacOS Xへは片道切符• Appleにとっても「後のない勝負」• Apple, AppleJapanの態度の変化• 「我々も頑張る、だから一緒に頑張ってほしい」...いや、マヂでMacOS X とは(再)• 従来とは異なる、新たな系統の MacOS– AQUA : brand new user experience– Carbon / Cocoa : Native API– Classic : MacOS9 互換レイヤー• (Macintosh エミュレータ)– CoreService• Quartz( 2D )• OpenGL( 3D )• QuickTime...

– Darwin• BSD• Core OS

AQUAClassic Carbon Cocoa
CoreServices( Quartz OpenGL QuickTime )CoreOS (Kernel)

BSD

Aqua - user exprience
• 半透明
• 影付き
• ドック
• ジニー
• ...

user exprience• “ MacWay ” を尊重する– 羊の皮(MacOS)を忘れてはならない– root ではなく「管理者」• “UNIX Way” は許容されるが、慎むべき– 将来的にBSDコマンド群、Terminalは選択インストールになる事も• コマンドラインは Wrapすべき– Cocoaが GUI Wrapperには向いているCarbon / Cocoa - native API– Carbon :• 従来のMacOSのToolBoxAPIを再構成したもの• 従来との互換• Cベースの低レベルAPIとして拡充– Cocoa :• NeXT由来のObjective-C によるクラスライブラリ• PB/IB, Objective-C, Java (JavaBridge)• 新規にプログラミングをするならこちら• Objective-C ++ (現在進行中)– 詳しくは BSD-Magazine 2000.No.6 にClassic - emulator• 仮想 Macintoshの上で動作するMacOS9.1– (WindowsNT上でVMWareでWin9xを動かすようなもの)• ネイティブ環境と透過的である。
– ウィンドウの重なり– Cut & Paste, Drag & Drop– 等々

CoreService• 上位APIに依存しない共通のサービスを実装• Quartz ( 2D ), OpenGL ( 3D ), QuickTime• Sound, Printing, NetworkServiceLocator• Security ( Authenticate, Authorization )• 基本的にCベースのAPI,• MacOS由来多し• 普通は直接呼び出さないDarwin• Darwin : Mach3.0 + 4.4BSD ( + Apple拡張 ... )– userlandとkernelを含む、一つのOSでもある•

全てオープンソースである(ほぼ)– BSD由来かApple独自であるかに関わらず
NetInfo

CDDA

Startup

CoreFoundation
KEXT

IOKit

MachKernel

BSD
tools
BSD
KernelDarwin - roots• 直接の親は *BSDとMk-Linux (OSF/MK)

UNIX
BSD

Mach2.0
NeXT• 意外とNeXTのコードは受け継いでいない

Mach2.5– Rhapsodyで絶えた?

Mach3.0

OSF/1
OSF-Mk

4.4BSD• 4.4BSDをベース、– userland, TCP/IP スタックは FreeBSD3.2 をベース
– 後は適当にいいとこ取り

Mk-Linux*BSD

Rhapsody

DarwinDarwin - Mach
• Mach3.0 ( OSF/MK )• スレッドとタスク, メモリ管理, IPC機構を提供、スケジューリングを行う• OSとしてのパーソナリティを持たない• BSDサーバと同一メモリ空間に存在– 厳密な意味でのMicroKernelではない– MkLinuxの失敗を避けた？
MachDarwin - BSD• Darwinに OSとしてのパーソナリティを提供– User, Group, Permission– FileSystem (VFS, UFS, HFS+, NFS... )– Network ( TCP/IP, AppleTalk )• UNIXコマンド群– tcsh, vi 等々– (なぜか) /bin/shはzsh...

BSD
tools
BSD

Darwin - KEXT
• KernelExtention : KEXT
– ロード可能なカーネルモジュール– カーネルへ動的に追加機能を組み込む– 必要に応じてロード– 不要になればアンロード– IOKit, NKEのベース
KEXT

Darwin - IOKit• C++を用いたオブジェクト指向デバイスドライバ機構– Embeded C++ (多重継承の禁止, namespaceなし)– Family とそれに属するドライバーの集まり– Family : Storage, Network, USB, FireWire...
– Familyがクラスに共通の機能を記述、プロトコルを制定– 各ドライバは機器独自部分のみを実装
IOKit

Darwin - IOKit (2)• Nubによる繋がり(動的な結合)– 例: USB接続のHDD
アプリからのリクエスト

NubBusPCI Family

Nub

OHCI

NubHDDUSB Family...
Storage Family

IO KitHardwareVFS
HFS+BSDDarwin - IOKit (3)• ユーザ空間からのドライバの呼び出し方法– BSD-System Call• open, close, read, write, ioctl, socket ...
• FileSystemとNetworkはこれを利用している– Mach-IPC– Mach shard memory• X Window System ( Xdarwin )がこれを利用している

Darwin - NKE• Networkは4層からなる• Socket• NetworkProtocol• DLIL （ DataLinkInterface Layer ）• Network Interface

SocketNetworkProtocol• NKEはそのそれぞれの間に「フィルタ」を投入できる

DLIL• TCP/IPスタックはFreeBSD由来• IPv6には KAME を利用

Network IF– Darwinのソースツリーにはマージされている– まだMacOS Xでは有効になっていないDarwin と *BSD
“ Darwin is not BSD, Darwin is based BSD.”
Tom Meyer : Apple• BSDを受け継ぎ、互換性を維持し、またPOSIX準拠を目指すが、「認定をとるのはGoalじゃない」• 独自の実装:––––––

CoreFoundation : Cで記述された基本要素クラスライブラリ
IOKit : Embeded C++ で記述されたデバイスドライバ機構
NetInfo : NISに代わる管理情報システム
Security (CDDA) : TheOpenGroupの CDDAフレームワークの実装
Startup : 起動スクリプト制御/Library, /Network/Library, /System/Library :• リフレインするディレクトリ構造• BSDとは違う、独自の流儀を持つ

Darwinに何を求めるか• “ Capitalizing on Darwin's freedom to innovate “
Mr. Jordan K. Hubbard ( FreeBSD Core Team )• Darwinでは FreeBSDの保守的さと違い、まだ若いため自由に発展ができる• Darwinは FreeBSDを、FreeBSDはDarwinを利用すべきDarwinは何を求めているか• より多くの開発者– バグや未実装、安定していない機能がまだある• より多くの Contribute– Darwin for Intel : 浜田直樹氏– libxpg4 : 井上氏 (http://www.ab.wakwak.com/~tino/)• より多くのドキュメント– ...今は「Headerみて」の世界• Darwinの修正は MacOS X にも及ぶ
– 貴方のパッチが、Macを使う「普通の人たち」を幸せにします。