Carbonとは
Carbonは、かつてMac OS Xで提供されていた主要なアプリケーションプログラミングインターフェース(API)の一つです。もう一つのAPIであるCocoaがNeXTSTEP(
OPENSTEP)に由来するのに対し、Carbonは先代OSである
Classic Mac OSのToolbox APIをMac OS X用に整理・移植したものです。これにより、
Classic Mac OS用アプリケーションをMac OS X向けに比較的容易に移植できるようになりました。
役割と変遷
Carbonは、旧来の
Classic Mac OS用アプリケーションを迅速に移植することを可能にし、初期のMac OS Xの普及を支える上で重要な役割を果たしました。しかし、アプリケーションのCocoaへの移行が進むにつれて、Carbonの重要度は徐々に低下し、フェードアウトしていくことになります。Mac OS Xの
64ビット対応が進められる中でもCarbonは
64ビット化されず、
OS X Mountain Lion以降は使用が非推奨となり、macOS Catalinaからは完全に廃止されました。
Carbonの成り立ち
Carbonは、
QuickTimeチームがAPIをMac OS Xに移植するために作成した互換レイヤーが元になっています。このレイヤーが
スティーブ・ジョブズの目に留まり、汎用的な互換フレームワークとして採用されました。Toolbox APIの中でもレガシーなものやあまり使われていないものを整理し、内部構造は
32ビットを前提に再設計されました。これは、Toolboxが
16ビットコードであったために
PowerPCの性能を十分に引き出せていなかった点を改善するためでした。
Carbonアプリケーション
Carbon APIを利用したアプリケーションは「Carbonアプリケーション」と呼ばれます。Mac OS Xにはもう一つのAPIとしてCocoaがありますが、Cocoaでは
Objective-Cのコードを書く必要があるのに対し、Carbon APIは
Classic Mac OS由来のインターフェイスを持ち、C/
C++からも利用できました。基本的にToolboxとのソースコード互換を目指しており、単純な移植であれば大きな設計変更は不要でした。
Carbonアプリケーションには、以下の2種類が存在しました。
PEF Carbon(CFM Carbon): 1つのバイナリでMac OS XとClassic Mac OSの両方で実行できるタイプ。
Mach-O Carbon: Mac OS X専用に最適化されたタイプ。
PEFはPreferred Executable Formatの略で、従来のフォーマットであるため
Classic Mac OSとMac OS Xの両方で動作可能でした。ただし、実行にはCarbonLibと呼ばれる
機能拡張書類が必要で、これがなければ
Classic Mac OSでは動作しませんでした。一方、Mach-O CarbonはMac OS X用に最適化されており、CFM Carbonよりも高速に動作しました。また、
QuartzなどMac OS X特有のAPIを利用するためにはMach-O形式が適していました。この形式はdyldとも呼ばれます。
Mac OS Xの普及当初はCFM Carbonが大半でしたが、開発環境が最適化されるにつれてMach-O Carbonが主流となりました。Mach-O化は
Universal Binary化には必須でした。なお、CocoaとCarbonは必ずしも対立するものではなく、当初はCarbonベースのライブラリをラップしてCocoaアプリケーションとして実装したものや、Cocoaベースのコンポーネントが組み込まれたCarbonアプリケーションなど、様々な実装形態が存在していました。
実態と終焉
Appleの当初の説明では、Carbonに対応したアプリケーションはCarbonLibをインストールしたMac OS 9とMac OS Xで(それぞれのOSに特有の機能を除けば)同じように動作可能であるとされていました。しかし、実際にはCarbonLibには問題が多く、開発者はMac OS 9とMac OS X用にコードを書き分ける必要がありました。ユーザーのMac OS Xへの移行が急速に進んだため、両方のOSで動作するというメリットはあまり活かされませんでした。
Mac OS X v10.2からv10.4にかけて、CarbonはCocoaを模したHIObjectの導入や、Core Foundationとの互換性強化など、Cocoa同等の開発基盤として近代化が図られました。しかし、
Mac OS X v10.5での
64ビット対応は見送られ、
64ビットへの完全対応にはCocoaへの移行が必須となりました。
AppleはGUI
フロントエンドとしてのCarbonを徐々にフェードアウトさせ、Cocoaをメインとする姿勢を強めていきました。
Mac OS X v10.6では、従来Carbonベースだった
QuickTimeと
FinderがCocoaで作り直されました。
さらに、Mac OS XがIntel CPUへ移植されると、CocoaアプリケーションとMach-O Carbonアプリケーションは再コンパイルでネイティブに動作する一方、CFM CarbonアプリケーションはRosetta環境上での動作となりました。Rosetta環境は
Mac OS X Lionで廃止され、次の
OS X Mountain LionではCarbon自体の利用が非推奨となりました。macOS Catalinaからは
32ビットアプリケーションへの対応と共にCarbonも廃止され、Cocoaで作り直されていないCarbonアプリケーションは完全に動作しなくなりました。
このように、CarbonはMac OS Xの初期における移行を円滑に進めるための重要な役割を果たしましたが、技術の進歩と開発環境の変化に伴い、その役割を終えることとなりました。