Carbon was one of two primary
C-based application programming interfaces (APIs) developed by
Apple
An apple is an edible fruit produced by an apple tree (''Malus domestica''). Apple trees are cultivated worldwide and are the most widely grown species in the genus '' Malus''. The tree originated in Central Asia, where its wild ances ...
for the
macOS
macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac (computer), Mac computers. Within the market of ...
(formerly Mac OS X and OS X)
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
. Carbon provided a good degree of
backward compatibility
Backward compatibility (sometimes known as backwards compatibility) is a property of an operating system, product, or technology that allows for interoperability with an older legacy system, or with input designed for such a system, especially ...
for
programs that ran on
Mac OS 8
Mac OS 8 is an operating system that was released by Apple Computer on July 26, 1997. It includes the largest overhaul of the classic Mac OS experience since the release of System 7, approximately six years before. It places a greater emphasis o ...
and
9. Developers could use the Carbon APIs to port (“carbonize”) their
“classic” Mac applications and software to the Mac OS X platform with little effort, compared to
porting
In software engineering, porting is the process of adapting software for the purpose of achieving some form of execution in a computing environment that is different from the one that a given program (meant for such execution) was originally des ...
the app to the entirely different
Cocoa
Cocoa may refer to:
Chocolate
* Chocolate
* ''Theobroma cacao'', the cocoa tree
* Cocoa bean, seed of ''Theobroma cacao''
* Chocolate liquor, or cocoa liquor, pure, liquid chocolate extracted from the cocoa bean, including both cocoa butter and ...
system, which originated in
OPENSTEP
OpenStep is a defunct object-oriented application programming interface (API) specification for a legacy object-oriented operating system, with the basic goal of offering a NeXTSTEP-like environment on non-NeXTSTEP operating systems. OpenStep wa ...
. With the release of
macOS 10.15 Catalina
macOS Catalina (version 10.15) is the sixteenth major release of macOS, Apple Inc.'s desktop operating system for Macintosh computers. It is the successor to macOS Mojave and was announced at WWDC 2019 on June 3, 2019 and released to the publi ...
, the Carbon API was officially discontinued and removed, leaving Cocoa as the sole primary API for developing macOS applications.
Carbon was an important part of Apple's strategy for bringing Mac OS X to market, offering a path for quick porting of existing software applications, as well as a means of shipping applications that would run on either Mac OS X or the classic Mac OS. As the market has increasingly moved to the Cocoa-based frameworks, especially after the release of
iOS, the need for a porting library was diluted. Apple did not create a
64-bit
In computer architecture, 64-bit integers, memory addresses, or other data units are those that are 64 bits wide. Also, 64-bit CPUs and ALUs are those that are based on processor registers, address buses, or data buses of that size. A comp ...
version of Carbon while updating their other frameworks in the 2007 time-frame, and eventually
deprecated
In several fields, especially computing, deprecation is the discouragement of use of some terminology, feature, design, or practice, typically because it has been superseded or is no longer considered efficient or safe, without completely removing ...
the entire API in
OS X 10.8 Mountain Lion
OS X Mountain Lion (version 10.8) is the ninth major release of macOS, Apple Inc.'s desktop and server operating system for Macintosh computers. OS X Mountain Lion was released on July 25, 2012, for purchase and download through Apple's Mac App ...
, which was released on July 24, 2012.
History
Classic Mac OS programming
The
original Mac OS used
Pascal as its primary development platform, and the APIs were heavily based on Pascal's
call semantics
interface description language or interface definition language (IDL), is a generic term for a language that lets a program or object written in one language communicate with another program written in an unknown language. IDLs describe an inter ...
. Much of the
Macintosh Toolbox consisted of
procedure calls, passing information back and forth between the API and program using a variety of
data structure
In computer science, a data structure is a data organization, management, and storage format that is usually chosen for Efficiency, efficient Data access, access to data. More precisely, a data structure is a collection of data values, the rel ...
s based on Pascal's
variant record concept.
Over time, a number of
object libraries evolved on the Mac, notably the
Object Pascal
Object Pascal is an extension to the programming language Pascal that provides object-oriented programming (OOP) features such as classes and methods.
The language was originally developed by Apple Computer as ''Clascal'' for the Lisa Work ...
library
MacApp and the
Think Class Library
In their most common sense, the terms thought and thinking refer to conscious cognitive processes that can happen independently of sensory stimulation. Their most paradigmatic forms are judging, reasoning, concept formation, problem solving, a ...
(TCL) in Pascal, and later versions of MacApp and
CodeWarrior's PowerPlant in
C++. By the mid-1990s, most Mac software was written in C++ using CodeWarrior.
Rhapsody
With the purchase of
NeXT
Next may refer to:
Arts and entertainment Film
* ''Next'' (1990 film), an animated short about William Shakespeare
* ''Next'' (2007 film), a sci-fi film starring Nicolas Cage
* '' Next: A Primer on Urban Painting'', a 2005 documentary film
Lit ...
in late 1996, Apple developed a new operating system strategy based largely on the existing
OpenStep
OpenStep is a defunct object-oriented application programming interface (API) specification for a legacy object-oriented operating system, with the basic goal of offering a NeXTSTEP-like environment on non-NeXTSTEP operating systems. OpenStep wa ...
platform. The new
Rhapsody was relatively simple; it retained most of OpenStep's existing object libraries under the name "Yellow Box", ported OpenStep's existing
GUI and made it look more Mac-like, ported several major
APIs from the Mac OS to Rhapsody's underlying
Unix-like
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
system (notably
QuickTime
QuickTime is an extensible multimedia framework developed by Apple Inc., capable of handling various formats of digital video, picture, sound, panoramic images, and interactivity. Created in 1991, the latest Mac version, QuickTime X, is a ...
and
AppleSearch), and added an emulator known as the "Blue Box" that ran existing Mac OS software.
When this plan was revealed at the
Worldwide Developers Conference in 1997 there was some push-back from existing Mac OS developers, who were upset that their code bases would effectively be locked into an emulator that was unlikely to ever be updated. They took to calling the Blue Box the "penalty box". Larger developers like
Microsoft
Microsoft Corporation is an American multinational corporation, multinational technology company, technology corporation producing Software, computer software, consumer electronics, personal computers, and related services headquartered at th ...
and
Adobe
Adobe ( ; ) is a building material made from earth and organic materials. is Spanish for '' mudbrick''. In some English-speaking regions of Spanish heritage, such as the Southwestern United States, the term is used to refer to any kind of ...
balked outright, and refused to consider porting to OpenStep, which was so different from the existing Mac OS that there was little or no compatibility.
Apple took these concerns to heart. When
Steve Jobs
Steven Paul Jobs (February 24, 1955 – October 5, 2011) was an American entrepreneur, industrial designer, media proprietor, and investor. He was the co-founder, chairman, and CEO of Apple; the chairman and majority shareholder of Pixar; ...
announced this change in direction at the 1998 WWDC, he stated that "what developers really wanted was a modern version of the Mac OS, and Apple
asgoing to deliver it".
The original Rhapsody concept, with only the Blue Box for running existing Mac OS software, was eventually released in 1999 as
Mac OS X Server 1.0
Mac OS X Server 1.0 is an operating system developed by Apple Computer, Inc. Released on March 16, 1999, it was the first version of Mac OS X Server.
It was Apple's first commercial product to be derived from " Rhapsody"—an eventual replacem ...
. This was the only release based on the original Rhapsody concept.
Cocoa and Carbon
In order to offer a real and well supported upgrade path for existing Mac OS code bases, Apple introduced the Carbon system. Carbon consists of many libraries and functions that offer a Mac-like API, but running on top of the underlying Unix-like OS, rather than a copy of the Mac OS running in emulation. The Carbon libraries are extensively cleaned up, modernized and better "protected". While the Mac OS was filled with APIs that shared memory to pass data, under Carbon all such access was re-implemented using
accessor subroutine
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions ma ...
s on
opaque data types. This allowed Carbon to support true
multitasking and
memory protection
Memory protection is a way to control memory access rights on a computer, and is a part of most modern instruction set architectures and operating systems. The main purpose of memory protection is to prevent a process from accessing memory that h ...
, features Mac developers had been requesting for a decade. Other changes from the pre-existing API removed features which were conceptually incompatible with Mac OS X, or simply obsolete. For example, applications could no longer install
interrupt handler
In computer systems programming, an interrupt handler, also known as an interrupt service routine or ISR, is a special block of code associated with a specific interrupt condition. Interrupt handlers are initiated by hardware interrupts, softw ...
s or
device driver
In computing, a device driver is a computer program that operates or controls a particular type of device that is attached to a computer or automaton. A driver provides a software interface to hardware devices, enabling operating systems and o ...
s.
In order to support Carbon, the entire Rhapsody model changed. Whereas Rhapsody would effectively be OpenStep with an emulator, under the new system both the OpenStep and Carbon API would, where possible, share common code. To do this, many of the useful bits of code from the lower-levels of the OpenStep system, written in Objective-C and known as Foundation, were re-implemented in pure C. This code became known as
Core Foundation, or CF for short. A version of the Yellow Box ported to call CF became the new
Cocoa
Cocoa may refer to:
Chocolate
* Chocolate
* ''Theobroma cacao'', the cocoa tree
* Cocoa bean, seed of ''Theobroma cacao''
* Chocolate liquor, or cocoa liquor, pure, liquid chocolate extracted from the cocoa bean, including both cocoa butter and ...
API, and the Mac-like calls of Carbon also called the same functions. Under the new system, Carbon and Cocoa were peers. This conversion would normally have slowed the performance of Cocoa as the object methods called into the underlying C libraries, but Apple used a technique they called ''toll-free
bridging'' to reduce this impact.
As part of this conversion, Apple also ported the
graphics engine
Rendering or image synthesis is the process of generating a physically-based rendering, photorealistic or Non-photorealistic rendering, non-photorealistic image from a 2D model, 2D or 3D model by means of a computer program. The resulting im ...
from the licence-encumbered
Display PostScript
Display PostScript (or DPS) is a 2D graphics engine system for computers which uses the PostScript (PS) imaging model and language (originally developed for computer printing) to generate on-screen graphics. To the basic PS system, DPS adds a num ...
to the licence-free
Quartz
Quartz is a hard, crystalline mineral composed of silica ( silicon dioxide). The atoms are linked in a continuous framework of SiO4 silicon-oxygen tetrahedra, with each oxygen being shared between two tetrahedra, giving an overall chemical ...
(which has been called "Display PDF"). Quartz provided native calls that could be used from either Carbon or Cocoa, as well as offering
Java 2D-like interfaces as well. The underlying operating system itself was further isolated and released as
Darwin
Darwin may refer to:
Common meanings
* Charles Darwin (1809–1882), English naturalist and writer, best known as the originator of the theory of biological evolution by natural selection
* Darwin, Northern Territory, a territorial capital city i ...
.
Release and evolution
Carbon was introduced in incomplete form in 2000, as a shared library backward-compatible with 1997's Mac OS 8.1. This version allowed developers to port their code to Carbon without losing the ability for those programs to run on existing Mac OS machines. Porting to Carbon became known as "Carbonization". Official Mac OS X support arrived in 2001 with the release of
Mac OS X v10.0, the first public version of the new OS. Carbon was very widely used in early versions of Mac OS X by almost all major software houses, even by Apple. The
Finder
Finder may refer to:
* Finder (surname)
* Finder (software), part of the Apple Macintosh operating system
* ''Finder'' (comics), a comic book series by Carla Speed McNeil
* ''Finder'' (novel), a 1994 novel by Emma Bull
* Finder Wyvernspur, a fi ...
, for instance, remained a Carbon application for many years, only being ported to Cocoa with the release of Mac OS X 10.6 in 2009.
The transition to
64-bit
In computer architecture, 64-bit integers, memory addresses, or other data units are those that are 64 bits wide. Also, 64-bit CPUs and ALUs are those that are based on processor registers, address buses, or data buses of that size. A comp ...
Macintosh applications beginning with
Mac OS X v10.5, released October 26, 2007, brought the first major limitations to Carbon. Apple does not provide compatibility between the Macintosh
graphical user interface
The GUI ( "UI" by itself is still usually pronounced . or ), graphical user interface, is a form of user interface that allows User (computing), users to Human–computer interaction, interact with electronic devices through graphical icon (comp ...
and the C programming language in the 64-bit environment, instead requiring the use of the
Objective-C
Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was selected by NeXT for its N ...
dialect with the Cocoa API. Many commentaries took this to be the first sign of Carbon's eventual disappearance, a position that was re-enforced when Apple stated no new major additions would be added to the Carbon system, and further reinforced with its deprecation in 2012.
Transition to Cocoa
Despite the purported advantages of Cocoa, the need to rewrite large amounts of legacy code slowed the transition of Carbon-based applications, famously with
Adobe Photoshop
Adobe Photoshop is a raster graphics editor developed and published by Adobe Inc. for Windows and macOS. It was originally created in 1988 by Thomas and John Knoll. Since then, the software has become the industry standard not only in ras ...
, which was eventually updated to Cocoa in April 2010. This also extended to Apple's own flagship software packages, as
iTunes and
Final Cut Pro
Final Cut Pro is a series of non-linear editing, non-linear video editing software programs first developed by Macromedia, Macromedia Inc. and later Apple Inc. The most recent version, Final Cut Pro 10.6.4, runs on Macintosh, Mac computers power ...
(as well as the features in the
QuickTime
QuickTime is an extensible multimedia framework developed by Apple Inc., capable of handling various formats of digital video, picture, sound, panoramic images, and interactivity. Created in 1991, the latest Mac version, QuickTime X, is a ...
engine that powers it) remained written in Carbon for many years. Both iTunes and Final Cut Pro X have since been released in Cocoa versions.
Deprecation and discontinuation
In 2012, with the release of OS X 10.8 Mountain Lion, most Carbon APIs were considered deprecated. The APIs were still accessible to developers and all Carbon applications still ran, but the APIs would no longer be updated. On June 28, 2017, Apple announced that 32-bit software for macOS, such as all Carbon applications, would no longer be supported “without compromise” on versions of macOS after
macOS 10.13 High Sierra.
macOS 10.15 Catalina
macOS Catalina (version 10.15) is the sixteenth major release of macOS, Apple Inc.'s desktop operating system for Macintosh computers. It is the successor to macOS Mojave and was announced at WWDC 2019 on June 3, 2019 and released to the publi ...
officially removed support for 32-bit applications, including all Carbon applications.
Architecture
Carbon descends from the
Toolbox
A toolbox (also called toolkit, tool chest or workbox) is a box to organize, carry, and protect the owner's tools. They could be used for trade, a hobby or DIY, and their contents vary with the craft.
Types
A toolbox could refer to several t ...
, and as such, is composed of "Managers". Each Manager is a functionally related API, defining sets of data structures and functions to manipulate them. Managers are often interdependent or layered. Carbon consists of a broad set of functions for managing files, memory, data, the user interface, and other system services. It is implemented as any other API: in macOS, it is spread over several frameworks (each a structure built around a
shared library), principally
Carbon.framework
,
ApplicationServices.framework
, and
CoreServices.framework
, and in classic Mac OS, it resides in a single shared library named
CarbonLib
.
As an
umbrella term
In linguistics, semantics, general semantics, and ontologies, hyponymy () is a semantic relation between a hyponym denoting a subtype and a hypernym or hyperonym (sometimes called umbrella term or blanket term) denoting a supertype. In other ...
encompassing all C-language API procedures accessing Mac-specific functionality, Carbon is not designed as a discrete system. Rather, it opens nearly all the functionality of macOS to developers who do not know the
Objective-C
Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was selected by NeXT for its N ...
language required for the broadly equivalent
Cocoa API
Cocoa is Apple's native object-oriented application programming interface (API) for its desktop operating system macOS.
Cocoa consists of the Foundation Kit, Application Kit, and Core Data frameworks, as included by the Cocoa.h header file, ...
.
Carbon is compatible with all of the several
executable formats available for PowerPC Mac OS. Binary compatibility between Mac OS X and previous versions requires use of a
Preferred Executable Format file, which Apple never supported in their
Xcode IDE.
Newer parts of Carbon tend to be much more object-oriented in their conception, most of them based on
Core Foundation. Some Managers, such as the HIView Manager (a superset of the Control Manager), are implemented in
C++, but Carbon remains a
C API.
Some examples of Carbon Managers:
* File Manager — manages access to the file system, opening, closing, reading and writing files.
* Resource Manager — manages access to resources, which are predefined chunks of data a program may require. Calls File Manager to read and write resources from disk files. Examples of resources include icons, sounds, images, templates for widgets, etc.
* Font Manager — manages
font
In movable type, metal typesetting, a font is a particular #Characteristics, size, weight and style of a typeface. Each font is a matched set of type, with a piece (a "Sort (typesetting), sort") for each glyph. A typeface consists of a range of ...
s. Deprecated (as part of
QuickDraw
A quickdraw (also known as an extender) is a piece of climbing equipment used by rock and ice climbers to allow the climbing rope to run freely through protection such as a bolt anchors or other traditional gear while leading.
A quickd ...
) since
Mac OS X v10.4, in favor of
Apple Type Services
The Apple Type Services for Unicode Imaging (ATSUI) is the set of services for rendering Unicode-encoded text introduced in Mac OS 8.5 and carried forward into Mac OS X.
It replaced the WorldScript engine for legacy encodings.
Obsolescence
A ...
(ATS).
*
QuickDraw
A quickdraw (also known as an extender) is a piece of climbing equipment used by rock and ice climbers to allow the climbing rope to run freely through protection such as a bolt anchors or other traditional gear while leading.
A quickd ...
— 2D graphics primitives. Deprecated since
Mac OS X v10.4, in favor of Quartz 2D.
* Carbon Event Manager — converts user and system activity into events that code can recognise and respond to.
* HIObject — a completely new object-oriented API which brings to Carbon an
OO model for building GUIs. HIToolbox in Mac OS Classic and
Copland relied on abandoned
IBM System Object Model, so Carbon had to provide quick-and-dirty replacement to enable porting of legacy code. This is available in
Mac OS X v10.2 or later, and gives Carbon programmers some of the tools that Cocoa developers have long been familiar with. Starting with
Mac OS X v10.2, HIObject is the base class for all GUI elements in Carbon. HIView is supported by
Interface Builder, part of Apple's developer tools. Traditionally GUI architectures of this sort have been left to third-party application frameworks to provide. Starting with Mac OS X v10.4, HIObjects are NSObjects and inherit the ability to be serialized into data streams for transport or saving to disk.
* HITheme — uses QuickDraw and Quartz to render
graphical user interface
The GUI ( "UI" by itself is still usually pronounced . or ), graphical user interface, is a form of user interface that allows User (computing), users to Human–computer interaction, interact with electronic devices through graphical icon (comp ...
(GUI) elements to the screen. HITheme was introduced in
Mac OS X v10.3, and Appearance Manager is a compatibility layer on top of HITheme since that version.
* HIView Manager — manages creation, drawing,
hit-testing In computer graphics programming, hit-testing (hit detection, picking, or pick correlation ) is the process of determining whether a user-controlled cursor (such as a mouse cursor or touch-point on a touch-screen interface) intersects a given graphi ...
, and manipulation of controls. Since Mac OS X v10.2, all controls are HIViews. In Mac OS X v10.4, the Control Manager was renamed HIView Manager.
* Window Manager — manages creation, positioning, updating, and manipulation of windows. Since Mac OS X v10.2, windows have a root HIView.
* Menu Manager — manages creation, selection, and manipulation of menus. Since Mac OS X v10.2, menus are HIObjects. Since Mac OS X v10.3, menu content may be drawn using HIViews, and all standard menus use HIViews to draw.
Event handling
The Mac Toolbox's Event Manager originally used a
polling model for application design. The application's main
event loop In computer science, the event loop is a programming construct or design pattern that waits for and dispatches events or messages in a program. The event loop works by making a request to some internal or external "event provider" (that generally ...
asks the Event Manager for an event using GetNextEvent. If there is an event in the queue, the Event Manager passes it back to the application, where it is handled, otherwise it returns immediately. This behavior is called "
busy-waiting", running the event loop unnecessarily. Busy-waiting reduces the amount of CPU time available for other applications and decreases battery power on laptops. The classic Event Manager dates from the original Mac OS in 1984, when whatever application was running was guaranteed to be the ''only'' application running, and where power management was not a concern.
With the advent of MultiFinder and the ability to run more than one application simultaneously came a new Event Manager call, ''WaitNextEvent'', which allows an application to specify a sleep interval. One easy trick for legacy code to adopt a more efficient model without major changes to its source code is simply to set the sleep parameter passed to ''WaitNextEvent'' to a very large value—on macOS, this puts the thread to sleep whenever there is nothing to do, and only returns an event when there is one to process. In this way, the polling model is quickly inverted to become equivalent to the callback model, with the application performing its own event dispatching in the original manner. There are loopholes, though. For one, the legacy toolbox call ''ModalDialog'', for example, calls the older ''GetNextEvent'' function internally, resulting in polling in a tight loop without blocking.
Carbon introduces a replacement system, called the Carbon Event Manager. (The original Event Manager still exists for compatibility with legacy applications). Carbon Event Manager provides the event loop for the developer (based on Core Foundation's
CFRunLoop
in the current implementation); the developer sets up event handlers and enters the event loop in the main function, and waits for Carbon Event Manager to dispatch events to the application.
Timers
In the classic Mac OS, there was no operating system support for application level timers (the lower level Time Manager was available, but it executed timer callbacks at interrupt time, during which calls could not be safely made to most Toolbox routines). Timers were usually left to application developers to implement, and this was usually done by counting elapsed time during the ''idle'' event - that is, an event that was returned by ''WaitNextEvent'' when any other event wasn't available. In order for such timers to have reasonable resolution, developers could not afford ''WaitNextEvent'' to delay too long, and so low "sleep" parameters were usually set. This results in highly inefficient scheduling behavior, since the thread will not sleep for very long, instead repeatedly waking to return these idle events. Apple added timer support to Carbon to address this problem—the system can schedule timers with great efficiency.
Open source implementations
GNUstep
GNUstep is a free software implementation of the Cocoa (formerly OpenStep) Objective-C frameworks, widget toolkit, and application development tools for Unix-like operating systems and Microsoft Windows. It is part of the GNU Project.
GNUst ...
contains an implementation of the Carbon API called Boron. It aims to be compatible with non-deprecated parts of ApplicationServices and CoreServices. The name derives the fact that
Boron comes before Carbon on the
periodic table of elements.
Darling
Darling is a term of endearment of Old English origin.
Darling or Darlin' or Darlings may also refer to:
People
* Darling (surname)
* Darling Jimenez (born 1980), American boxer
* Darling Légitimus (1907–1999), French actress
Places Austral ...
also contains a Carbon implementation. Both implementations are highly incomplete and consist mostly of stub functions.
See also
*
Cocoa
Cocoa may refer to:
Chocolate
* Chocolate
* ''Theobroma cacao'', the cocoa tree
* Cocoa bean, seed of ''Theobroma cacao''
* Chocolate liquor, or cocoa liquor, pure, liquid chocolate extracted from the cocoa bean, including both cocoa butter and ...
*
Interface Builder
*
Objective-C
Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was selected by NeXT for its N ...
*
Xcode
References
{{DEFAULTSORT:Carbon (Api)
Compatibility layers
MacOS APIs