

With the introduction of Mac OS X 10.6 platform the Mach-O file underwent a significant modification that causes binaries compiled on a computer running 10.6 or later to be (by default) executable only on computers running Mac OS X 10.6 or later. This allows a single binary file to contain code to support multiple instruction set architectures, for example for different generations and types of Apple devices, including different processor architectures such as ARM64 and x86-64. Multiple Mach-O files can be combined in a multi-architecture binary. The Accent file format was in turn, based on an idea from Spice Lisp. The basic structure-a list of variable-length "load commands" that reference pages of data elsewhere in the file -was also used in the executable file format for Accent. When looking up symbols Mach-O uses a two-level namespace that encodes each symbol into an 'object/symbol name' pair that is then linearly searched for, first by the object and then the symbol name. Mach-O uses the REL relocation format to handle references to symbols.

Each Mach-O file is made up of one Mach-O header, followed by a series of load commands, followed by one or more segments, each of which contains between 0 and 255 sections.
