では、Leopardでは何が新しくなったのだろうか?

もちろん、AppleはLeopardの300を超える新機能を告知している。しかし、このリストを見ていると気が付くことがあるだろう。ここに挙げられた新機能の多くは上層の、GUIやアプリケーションといったユーザランドの改善だ。その気になれば「実際に触れる」ことができるものがそのほとんどである。

このリストの内容と、OSやアプリケーションの新機能と、Leopardで本当に新しくなったところとは、若干の違いがあるのだ。

改めて、「Leopardでは何が新しくなっただろうか?」

Leopardでのもっとも大きな点として、昨今のCPU事情への対応の強化が挙げられる。マルチコア、メニイコア、64bit、AltiVecやSSEといったSIMD系の命令に対するサポートの強化などだ。

Mac OS Xの基盤となっているMachは、そもそもマルチプロセッサシステム向けに設計されたOSである。また、Macはいち早くデュアルプロセッサのPowerMac G4をリリース(注2)するなど、コンシューマ向けSMPマシンとしては先駆的存在でもある。

Mac OS Xにとって並列処理はそもそも得意な分野である。が、Leopardではさらにスケジューラにも手を入れ、増え続けるCPUのコアを有効活用できるようにしている。スケジューラだけではない。TCP/IPプロトコルスタックのマルチスレッド化、とくにmbuf(注3)をCPUごとに用意するといった面からも強化が行われている。

こうしたBSDレイヤーでの強化もあれば、Core ServiceではたとえばOpenGL関連のコードはマルチスレッド化され、複数のプロセッサで分担作業ができるようになっている。またCocoaでは、64bitをフルサポートすると同時にNSOperationのような並列コンピューティング向けのクラスの追加や強化が行われている。

上から下まで、どのレイヤーにおいてもマルチコアを前提とした並列処理の対応や強化がなされているのだ。

こうした多数の改善は、先に挙げた300の機能リストだと、以下のたった2項目にまとめられてしまっている。

マルチコアをさらに活用
Macのマルチコアプロセッサを活用して、Core Image、Core Animation、OpenGLから最大限のパフォーマンスを引き出せます。
(アップルジャパンWebサイト、「300を超える新機能 - グラフィックス & メディア」より)

マルチコアのために最適化
改善されたスケジューリング、メモリ管理、プロセッサアフィニティアルゴリズムで、マルチコアの最新のアーキテクチャを最大限に活用しましょう。
(同「Unix」より)

フル64bit対応についても、Leopardの隠れた目玉の1つだ。先のリストならばこう書かれている。

64ビットのアプリケーション
手持ちの装置を活用しましょう。Leopardは、同じプラットフォーム上で32ビットと64ビットの両方のアプリケーションを完全かつシームレスにサポートする、初めての主要オペレーティングシステムです。
(同「Unix」より)

64bitの「アプリケーション」というのは、ご存じの通りTigerですでに64bit対応が行われており、64bitアドレスによる広いプロセス空間の確保や64bitで拡張されたレジスタ、拡張された命令を使用できたからだ。

しかし、64bit対応されていたのはDarwinカーネルとLibCをはじめとする一部のライブラリのみで、CocoaやCarbonの各ライブラリは32bit版しか用意されていないため、実質的にGUIを持つアプリケーションを64bitでビルドすることはできなかった。

Appleとしては、GUIは32bitで作成し、64bitが必要な部分は別プロセスにして、プロセス間通信を行うことを推奨していたが、これはあまり開発者によい印象を与えていなかった。確かに64bitの計算能力や広いアドレス空間を必要とするのはごく一部の処理だけだ。そうした計算エンジンとGUIの分離は利点が大きいが、そうしたアプリケーションの構成はあくまでアプリケーションの開発者の決めることだ。

Leopardでは、CocoaやCarbonを含むすべてのフレームワークが64bit対応しており、64bitのGUIアプリケーションが作成可能となった(図1)。

図1: Tigerの64bitサポートとLeopardでの64bitサポート

Tigerでは、カーネルとLibSystemという基本的な所のみの64bitサポートだったが、LeopardではCore ServiceやCarbon、CocoaといったGUIライブラリまで全てが64bitになる。コマンドラインツールやアプリケーションは32bitと64bitが共存する形で、緩やかに64bit化が進むだろう

先のアップルの文言は、だからこそただの「64ビット対応」ではなく「64ビットのアプリケーション」となっているのだ。

64bitと32bitのアプリケーションは「Universal Binary」の仕組みで1つのファイルに張り合わせることができる。初期のiMacやMac miniのようにIntel64に非対応のCore Duoを使ったマシンでも、あらかじめ32bitのIntel向けのコードを入れておけば動作させることは可能となる。また、64bit対応したのはIntel Macだけではない。PowerPCの64bit対応のコードも追加されているのだ。

fileコマンド実行結果


% file /System/Library/Frameworks/Cocoa.framework/Cocoa 
/System/Library/Frameworks/Cocoa.framework/Cocoa: Mach-O universal binary with 4 architectures
/System/Library/Frameworks/Cocoa.framework/Cocoa (for architecture ppc7400):	Mach-O dynamically linked shared library ppc
/System/Library/Frameworks/Cocoa.framework/Cocoa (for architecture ppc64):	Mach-O 64-bit dynamically linked shared library ppc64
/System/Library/Frameworks/Cocoa.framework/Cocoa (for architecture i386):	Mach-O dynamically linked shared library i386
/System/Library/Frameworks/Cocoa.framework/Cocoa (for architecture x86_64):	Mach-O 64-bit dynamically linked shared library x86_64
注2: デュアルプロセッサのPowerMac G4をリリース
2000年7月発売のPowerMac G4(Gigabit Ethernet)

注3: mbuf
ネットワークトラフィックのデータを保管するために使用されるメモリバッファ。Network Kernel Extensions Programming Guide参照