A resource fork is a
fork of a
file on
Apple
An apple is a round, edible fruit produced by an apple tree (''Malus'' spp.). Fruit trees of the orchard or domestic apple (''Malus domestica''), the most widely grown in the genus, are agriculture, cultivated worldwide. The tree originated ...
's
classic Mac OS
Mac OS (originally System Software; retronym: Classic Mac OS) is the series of operating systems developed for the Mac (computer), Macintosh family of personal computers by Apple Computer, Inc. from 1984 to 2001, starting with System 1 and end ...
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
that is used to store structured data. It is one of the two forks of a file, along with the data fork, which stores data that the operating system treats as unstructured. Resource fork capability has been carried over to the modern
macOS
macOS, previously OS X and originally Mac OS X, is a Unix, Unix-based operating system developed and marketed by Apple Inc., Apple since 2001. It is the current operating system for Apple's Mac (computer), Mac computers. With ...
for compatibility.
A resource fork stores information in a specific form, containing details such as icon bitmaps, the shapes of windows, definitions of menus and their contents, and application code (
machine code). For example, a word processing file might store its text in the data fork, while storing any embedded images in the same file's resource fork. The resource fork is used mostly by
executable
In computer science, executable code, an executable file, or an executable program, sometimes simply referred to as an executable or binary, causes a computer "to perform indicated tasks according to encoded instruction (computer science), in ...
s, but any file can have a resource fork.
In a 1986 technical note, Apple strongly recommended that developers do not put general data into the resource fork of a file. According to Apple, there are parts of the system software that rely on resource forks having only valid Resource Manager information in them.
The resource fork was conceived and implemented by Apple programmer
Bruce Horn.
Macintosh file systems
The resource fork has three purposes in classic Macintosh file systems:
* It stores all graphical data on disk until it is needed, then retrieved, drawn on the screen, and thrown away. This software variant of
virtual memory
In computing, virtual memory, or virtual storage, is a memory management technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a ver ...
reduces memory requirements from 1 MB in the
Lisa to 128 KB in Macintosh.
* It provides a way for a non-programmer to perform
internationalization and localization
In computing, internationalization and localization (American English, American) or internationalisation and localisation (British English, British), often abbreviated i18n and l10n respectively, are means of adapting to different languages, regi ...
, because all the pictures and text are stored separately in a resource fork.
* It can be used to distribute nearly all of the components of an application in a single file, reducing clutter and simplifying application installation and removal.
The resource fork is implemented in all of the
file systems used for system drives in the
classic Mac OS
Mac OS (originally System Software; retronym: Classic Mac OS) is the series of operating systems developed for the Mac (computer), Macintosh family of personal computers by Apple Computer, Inc. from 1984 to 2001, starting with System 1 and end ...
(
MFS,
HFS HFS may refer to:
Businesses and organisations
* Croatian Film Association ()
* Hellenic Fire Service, Greece
* Hospitality Franchise Systems, US
Computing
* Hierarchical file system, a system for organizing directories and files
* Hierarchica ...
and
HFS Plus), and in the
macOS
macOS, previously OS X and originally Mac OS X, is a Unix, Unix-based operating system developed and marketed by Apple Inc., Apple since 2001. It is the current operating system for Apple's Mac (computer), Mac computers. With ...
-only
APFS. The presence of a resource fork makes it easy to store a variety of additional information, such as an
icon
An icon () is a religious work of art, most commonly a painting, in the cultures of the Eastern Orthodox, Oriental Orthodox, Catholic Church, Catholic, and Lutheranism, Lutheran churches. The most common subjects include Jesus, Mary, mother of ...
that the desktop should display for that file. While the data fork allows random access to any offset within it, access to the resource fork works like extracting structured records from a
database
In computing, a database is an organized collection of data or a type of data store based on the use of a database management system (DBMS), the software that interacts with end users, applications, and the database itself to capture and a ...
. (
Microsoft Windows
Windows is a Product lining, product line of Proprietary software, proprietary graphical user interface, graphical operating systems developed and marketed by Microsoft. It is grouped into families and subfamilies that cater to particular sec ...
also has a concept of "
resources
''Resource'' refers to all the materials available in our environment which are Technology, technologically accessible, Economics, economically feasible and Culture, culturally Sustainability, sustainable and help us to satisfy our needs and want ...
", but these are completely unrelated to resources in Mac OS.)
The Macintosh file systems store
metadata
Metadata (or metainformation) is "data that provides information about other data", but not the content of the data itself, such as the text of a message or the image itself. There are many distinct types of metadata, including:
* Descriptive ...
distinct from either the data or resource fork, such as the creation and modification timestamps, the file type and creator codes, and fork lengths.
Some files have only a resource fork. One example is a font file in the classic Mac OS. Another example is a Classic
68k application, where even the executable code is contained in resources of type 'CODE'. Later
PowerPC
PowerPC (with the backronym Performance Optimization With Enhanced RISC – Performance Computing, sometimes abbreviated as PPC) is a reduced instruction set computer (RISC) instruction set architecture (ISA) created by the 1991 Apple Inc., App ...
binaries stored the executable code in the data fork.
Since resource forks were supported only on Macintosh file systems including MFS, HFS, HFS Plus, and APFS, they could not be copied to the file systems of other
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
s. The Mac
BinHex and
MacBinary formats were invented to encode resource and data forks into one file, for transfer between systems.
A/UX supported resource forks on Unix file systems via the
AppleSingle and AppleDouble formats. Starting with
Mac OS X Tiger, AppleDouble was used to store resource forks on file systems such as Windows
SMB shares and FAT32 (
File Allocation Table) volumes.
In the HFS Plus file system, settings can be made to allow other forks in addition to the data and resource forks, to create a "multi-fork" application.
As of August 7, 2002, Apple recommended that developers should not build resources into resource forks in
Mach-O binaries on Mac OS X.
Resource identifiers
Each resource has an
OSType identifier (a four byte value), an ID (a
signed 16-bit
word
A word is a basic element of language that carries semantics, meaning, can be used on its own, and is uninterruptible. Despite the fact that language speakers often have an intuitive grasp of what a word is, there is no consensus among linguist ...
), and an optional name. There are standardized resource types for
dialog box
In computing, a dialog box (also simply dialog) is a graphical control element in the form of a small window that communicates information to the user and prompts them for a response.
Dialog boxes are classified as " modal" or "modeless", dep ...
es (
DITL
), images (
PICT
PICT is a graphics file format introduced on the original Apple Macintosh computer as its standard metafile format. It allows the interchange of graphics (both bitmapped and vector), and some limited text support, between Mac applications, an ...
), sounds (
snd
) and
executable
In computer science, executable code, an executable file, or an executable program, sometimes simply referred to as an executable or binary, causes a computer "to perform indicated tasks according to encoded instruction (computer science), in ...
binaries (
CODE
) which, until the advent of the
PowerPC
PowerPC (with the backronym Performance Optimization With Enhanced RISC – Performance Computing, sometimes abbreviated as PPC) is a reduced instruction set computer (RISC) instruction set architecture (ISA) created by the 1991 Apple Inc., App ...
processor, were without exception stored in the resource fork. Subroutines for rendering
window
A window is an opening in a wall, door, roof, or vehicle that allows the exchange of light and may also allow the passage of sound and sometimes air. Modern windows are usually glazed or covered in some other transparent or translucent ma ...
s are stored in their own type of resources (
WDEF
), and subroutines for rendering menus in theirs (
MDEF
). This arrangement enabled users to easily customize not only individual applications but also the operating system itself, using tools such as
ResEdit to modify the resources of an application file or any of the system files.
Within an application or other code, resources can be loaded simply using a combination of their type, ID or name, without regard to how and where they are stored in the resource fork. The client is returned a
handle
A handle is a part of, or an attachment to, an object that allows it to be grasped and object manipulation, manipulated by hand. The design of each type of handle involves substantial ergonomics, ergonomic issues, even where these are dealt wi ...
to the loaded resource which can then be accessed like any other heap-based data. The OS component that facilitates this is the Resource Manager. In addition to abstracting the details of the data storage from the data, the Resource Manager also arranges sets of open resource forks into a stack, with the most recently opened file on top. When trying to load a resource, it will look in the top of the stack first, (perhaps the current document's resource fork), then the next one down (the application's resource fork), then the next one (system resource forks). This arrangement is very powerful it permits local resources to override more global ones lower down so an application can provide its own icons or fonts in place of the standard system ones, for example. It also allows an application to load resources from the system using the same API as any other resource, without regard to where or how that resource is stored to the application, all resources are equally available and easy to use. The system reserves resource IDs in a certain range to help avoid resource conflicts arising from this. Resource Manager APIs allow the programmer to manipulate the stack and modify the search behaviour.
Editing
As the resource fork can be edited with a resource editor such as
ResEdit, it can be used to
localize and customize
software
Software consists of computer programs that instruct the Execution (computing), execution of a computer. Software also includes design documents and specifications.
The history of software is closely tied to the development of digital comput ...
. In addition, most resource editors allow visual editing of data. In
macOS
macOS, previously OS X and originally Mac OS X, is a Unix, Unix-based operating system developed and marketed by Apple Inc., Apple since 2001. It is the current operating system for Apple's Mac (computer), Mac computers. With ...
, it is possible to use resources when developing an application. However, if the application may need to be used in
UFS, it is also possible to configure it so that the entire resource fork is moved to the data fork, using the Raw Resource File setting. The
integrated development environment
An integrated development environment (IDE) is a Application software, software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, an ...
s distributed for free by
Apple Inc., which include
MPW and
Apple Developer's Tools, include a
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
called Rez. This uses a dedicated language, also called Rez, which can be used to create a resource fork by compiling
source code
In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer.
Since a computer, at base, only ...
. A decompiler, DeRez, which can be used to change a resource fork back into Rez code is also included.
In the structure of the resource fork, there is a piece of data called a "resource map" which stores the positions of resource data items. This can be used to allow
random access
Random access (also called direct access) is the ability to access an arbitrary element of a sequence in equal time or any datum from a population of addressable elements roughly as easily and efficiently as any other, no matter how many elemen ...
to resource data based on the defined IDs and names. The resource fork can be thought of as consisting of essentially two objects, the resource map and the resource data itself, but in fact each data type is a hierarchical structure which stores multiple items of data. The format in which the information in the resource data is stored is defined based on the types of information, which are known as "resource types." Resource data often makes references to other types of data.
In macOS, forks are named ''file''/..namedfork/''forkname'', ''e.g.'', the resource fork of the file IMG_0593.jpg is IMG_0593.jpg/..namedfork/rsrc. The
ls
command supports a
-l@
option which lists a file's forks.
Accessing
Resource forks appear as the
extended attribute com.apple.ResourceFork.
Previously resource forks were accessed via the 'Resource Manager'
API
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
. This API is now deprecated.
Under the deprecated API:
# When a resource fork is accessed, data including the start position and length of the resource data and resource map is read in from the header.
# If a resource type to read in has been specified, a check is performed to make sure that type is present in the resource list, and the number of items of data containing that type and their offsets in the resource reference list from the start position of the resource map is found.
# The resource ID, the offset of the resource name, the resource properties, and the offset of the data from the start position of the resource data is found.
# If resource data with the specified ID or name is present in the resource data, the offset obtained above is accessed, the data length is found, and all the data stored there is read in, and returned as the return value.
File Manager APIs such as
PBOpenRF()
also allowed access to the raw resource fork; however, they should be used only for applications such as copying a file Apple strongly warns against using the resource fork as a "second data fork."
From the
POSIX
The Portable Operating System Interface (POSIX; ) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines application programming interfaces (APIs), along with comm ...
interface, the resource fork could be accessed as
''filename''/..namedfork/rsrc
or as
''filename''/rsrc
; the shorter form was deprecated in
Mac OS X v10.4 and removed completely in
Mac OS X v10.7.
Data types
The smallest elements making up a resource fork are called data types. There are several data types. After a resource fork is accessed, its contents can be found by reading it in as appropriate for the data types defined in advance. Placing definitions inside the program stating how data is to be treated makes it possible to store resources called TMPL resources as well. Using this method increases the visibility of the data when viewed with a program such as ResEdit, making later editing simpler. As the Macintosh platform originated with Motorola-based processors (68k and PPC), the data is serialized to disk in
big-endian
'' Jonathan_Swift.html" ;"title="Gulliver's Travels'' by Jonathan Swift">Gulliver's Travels'' by Jonathan Swift, the novel from which the term was coined
In computing, endianness is the order in which bytes within a word (data type), word of d ...
format.
The following is a list of the major data types, in alphabetical order.
Types
The type codes below, like the above datatypes, are used as type identifiers for more than resource forks themselves: they are used to identify files themselves, to describe data in the clipboard, and much more.
Types must be 4 bytes long, so types like snd and STR actually have a space (0x20) at the end.
Editors
;
ResEdit: Distributed free of charge by Apple. Can be used for visual editing of resource data. If the structure of data is known, it can display a range of different types of data in a visual format. Does not run on modern macOS.
; Resorcerer: Expensive, but popular, as it can be used for visual editing of many more types of data than ResEdit.
; HexEdit: A binary editor, which in fact is normally used more for editing the data fork rather than the resource fork.
; ResKnife: Open-source editor for
Mac OS X; no longer maintained.
; Rezycle: A macOS tool that extracts resources from a resource fork into separate binary files while converting many types into formats suitable for modern development.
; resource_dasm: An open-source resource extractor for macOS and Linux, also capable of converting many resources into modern formats.
; ResForge: resource editor for macOS, capable of editing classic resource fork files and related formats. Compatible with macOS 10.14 or later. Runs natively on both 64-bit Intel and Apple Silicon.
Compatibility
The complexity of programming with resource forks has led to compatibility problems when accessing other file systems via file sharing protocols such as
AFP,
SMB,
NFS and
FTP
The File Transfer Protocol (FTP) is a standard communication protocol used for the transfer of computer files from a server to a client on a computer network. FTP is built on a client–server model architecture using separate control and dat ...
, when storing to non-HFS volumes, or when transmitting files to other systems in other ways (such as via email). The AFP protocol natively supports Resource Forks, and so resource forks are typically transmitted to these volumes as-is, and stored by the server transparently to clients. The SMB protocol supports a file metadata system similar to Macintosh forks known as
Alternate Data Streams (ADSes hereafter). macOS did not support storing resource forks in ADSes on SMB volumes by default until
Mac OS X v10.6. In previous versions of the OS, including upgraded versions of 10.6, this feature can be enabled with a param change or by creating a special file.
Networked file sharing protocols such as NFSv3 and FTP do not have a concept of file metadata, and so there is no way to natively store resource forks. This is also true when writing to certain types of local file systems, including UFS, and on SMB volumes where Alternate Data Stream support is not enabled. In those cases, macOS stores metadata and resource forks using a technique called
AppleDouble, in which the data fork is written as one file, and the resource fork and metadata are written as an entirely separate file preceded by a "._" naming convention. For example: ExampleFile.psd would contain the data fork, and ._ExampleFile.psd would contain the resource fork and metadata.
Compatibility problems can arise because macOS will handle storage of resource forks differently, depending on macOS version, settings, and file system type. For example, on an SMB network with a mixture of 10.5 and 10.6 clients. A freshly installed 10.6 client will look for and store resource forks on an SMB volume in ADSes, but the 10.5 client will (by default) ignore ADSes and use
AppleDouble format to handle forks. If a fileserver supports both AFP and NFS, then clients using NFS will store files in
AppleDouble format, whereas AFP users will stored the resource fork natively. In those cases, compatibility can sometimes be maintained by forcing clients to use, or not use,
AppleDouble format.
Many fileservers providing AFP support do not natively support resource forks on their local file systems. In those cases the forks may be stored in special ways, such as specially named files, special directories, or even Alternate Data Streams.
Another challenge is preserving resource forks when transmitting files using non-resource fork-aware applications or with certain transfer methods, including email and FTP. A number of file formats, such as
MacBinary and
BinHex, have been created to handle this. Command-line system tools
SplitForks
and
FixupResourceForks
allow manual flattening and merging of resource forks. In addition, a file server seeking to present file systems to Macintosh clients must accommodate the resource fork as well as the data fork of files;
UNIX
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
servers providing AFP support usually implement this with hidden directories.
Older applications written with the
Carbon API have a potential issue when being ported to the current
Intel
Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California, and Delaware General Corporation Law, incorporated in Delaware. Intel designs, manufactures, and sells computer compo ...
Macs. While the Resource Manager and operating system know how to deserialize data correctly for common resources like '
snd
' or '
moov
', resources created using TMPL resources have to be byte swapped manually to ensure file interoperability between PPC and Intel-based versions of an application. (While the resource map and other implementation details are
big-endian
'' Jonathan_Swift.html" ;"title="Gulliver's Travels'' by Jonathan Swift">Gulliver's Travels'' by Jonathan Swift, the novel from which the term was coined
In computing, endianness is the order in which bytes within a word (data type), word of d ...
, the Resource Manager by itself does not have any knowledge of the contents of a generic resource, and so cannot perform the byte swapping automatically.)
Until the advent of
Mac OS X v10.4, the standard UNIX command-line utilities in macOS (such as
cp
and
mv
) did not respect resource forks. To copy files with resource forks, one had to use
ditto
or CpMac and MvMac.
Other operating systems
The concept of a resource manager for graphics objects, to save memory, originated in the OOZE package on the
Xerox Alto in Smalltalk-76.
The concept is now largely universal in all modern operating systems. However, the concept of the resource fork remains peculiar to the Macintosh. Most operating systems used a binary file containing resources, which is then "tacked onto" the end of an existing program file. This solution is used on
Microsoft Windows
Windows is a Product lining, product line of Proprietary software, proprietary graphical user interface, graphical operating systems developed and marketed by Microsoft. It is grouped into families and subfamilies that cater to particular sec ...
for instance, and similar solutions are used with the
X Window System
The X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems.
X originated as part of Project Athena at Massachusetts Institute of Technology (MIT) in 1984. The X protocol has been at ...
, although the resources are often left as a separate file.
The
Windows NT
Windows NT is a Proprietary software, proprietary Graphical user interface, graphical operating system produced by Microsoft as part of its Windows product line, the first version of which, Windows NT 3.1, was released on July 27, 1993. Original ...
NTFS can support forks (and so can be a file server for Mac files), the native feature providing that support is called an
alternate data stream. Windows operating system features (such as the standard Summary tab in the Properties page for non-Office files) and Windows applications use them and Microsoft was developing a
next-generation file system that has this sort of feature as basis.
Early versions of the
BeOS implemented a database within the file system, which could be used in a manner analogous to a resource fork. Performance issues led to a change in later releases to a system of complex file system attributes. Under this system resources were handled in a fashion somewhat more analogous to the Mac.
AmigaOS
AmigaOS is a family of proprietary native operating systems of the Amiga and AmigaOne personal computers. It was developed first by Commodore International and introduced with the launch of the first Amiga, the Amiga 1000, in 1985. Early versions ...
does not use forked files. Its
executable files are internally divided into a modular structure of large pieces (
hunk) capable of storing code, data, and additional information. Similarly, data and project files have a
chunk structure codified in the
IFF
In logic and related fields such as mathematics and philosophy, "if and only if" (often shortened as "iff") is paraphrased by the biconditional, a logical connective between statements. The biconditional is true in two cases, where either both ...
standard. Other file types are stored similarly to other operating systems. Though not strictly a resource fork,
AmigaOS
AmigaOS is a family of proprietary native operating systems of the Amiga and AmigaOne personal computers. It was developed first by Commodore International and introduced with the launch of the first Amiga, the Amiga 1000, in 1985. Early versions ...
stores meta data in files known as
.info
files.
.info
files can be identified by the
.info
extension; for example, if you save a project to a disk, two files will be saved,
MyProject
and
MyProject.info
.
MyProject
would be the actual project data and
MyProject.info
would contain the project icon, information regarding which program is needed to open the project (since there is no
application binding in AmigaOS), special project options and any user comments.
.info
files are invisible on the Amiga's desktop (
Workbench). The icon on the desktop, taken from the
.info
itself, is the
interface metaphor through which the user interacts both with the project itself and its associated
.info
file. A dialog box accessible by right-clicking the icon allows the user to see and modify the metadata present in the
.info
file.
.info
files can be seen as individual files in the
command-line interface
A command-line interface (CLI) is a means of interacting with software via command (computing), commands each formatted as a line of text. Command-line interfaces emerged in the mid-1960s, on computer terminals, as an interactive and more user ...
or a
File manager
A file manager or file browser is a computer program that provides a user interface to manage computer files, files and folder (computing), folders. The most common Computer file#Operations, operations performed on files or groups of files incl ...
. Modern AmigaOS clones (
AROS,
MorphOS and
AOS4) inherit the structure (complete with metadata) of the
.info
files of older AmigaOS versions, and can also accept standard
PNG graphic files as icon bitmaps in their
.info
files.
NeXT
NeXT, Inc. (later NeXT Computer, Inc. and NeXT Software, Inc.) was an American technology company headquartered in Redwood City, California that specialized in computer workstations for higher education and business markets, and later develope ...
operating systems
NeXTSTEP and
OPENSTEP, their successor,
macOS
macOS, previously OS X and originally Mac OS X, is a Unix, Unix-based operating system developed and marketed by Apple Inc., Apple since 2001. It is the current operating system for Apple's Mac (computer), Mac computers. With ...
, and other systems like
RISC OS implemented another solution. Under these systems the resources are left in an original format, for instance, pictures are included as complete
TIFF files instead of being encoded into some sort of container. These resources are then placed in a directory along with the executable code and "raw data". The directory (called a "
bundle" or "
application directory") is then presented to the user as the application itself. This solution provides all of the same functionality as the resource fork, but allows the resources to be easily manipulated by any application a "resource editor" (like
ResEdit) is not needed. From the command-line interface, the bundle appears to be a normal directory. This approach was not an option on the
classic Mac OS
Mac OS (originally System Software; retronym: Classic Mac OS) is the series of operating systems developed for the Mac (computer), Macintosh family of personal computers by Apple Computer, Inc. from 1984 to 2001, starting with System 1 and end ...
, since the file system (
MFS) did not support separate catalog directories. When catalog file support was included in Mac OS, with the HFS filesystem, the resource fork was retained. macOS does retain the classic Resource Manager
API
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
as part of its
Carbon
Carbon () is a chemical element; it has chemical symbol, symbol C and atomic number 6. It is nonmetallic and tetravalence, tetravalent—meaning that its atoms are able to form up to four covalent bonds due to its valence shell exhibiting 4 ...
libraries for backward compatibility. However, the resources themselves can now be stored in separate data files within the file system the Resource Manager now hides this implementation change from the client code.
See also
*
Fork (file system)
References
External links
Description of the Resource File Format*
ttps://web.archive.org/web/20061023221041/http://www.folklore.org/StoryView.py?project=Macintosh&story=The_Grand_Unified_Model.txt The Grand Unified ModelHistory of the resource fork, from folklore.org
RezycleResource extraction tool
Mac OS X ServicesA Mac OS X Service to delete the resource fork of a file through context menu
What's up with Mac OS X Resource forks, Extended Attributes, NTFS Streams and Dot-Underscore files?When I save a file using SMB protocol, what information is saved in the "dot-underscore" (._) files? How is this information stored on an NTFS file system?
{{DEFAULTSORT:Resource Fork
Macintosh operating systems
Apple Inc. file systems