Launchd

Last updated

launchd
Original author(s) Dave Zarzycki
Developer(s) Apple Inc.
Initial releaseApril 29, 2005;18 years ago (2005-04-29)
Written in C
Operating system macOS, FreeBSD, iOS, watchOS
Type Init daemon
License Proprietary software (previously APSL and later Apache License 2.0)
Website opensource.apple.com/tarballs/launchd/   OOjs UI icon edit-ltr-progressive.svg

launchd is an init and operating system service management daemon created by Apple Inc. as part of macOS to replace its BSD-style init and SystemStarter. There have been efforts to port launchd to FreeBSD and derived systems.

Contents

Components

There are two main programs in the launchd system: launchd and launchctl.

launchd manages the daemons at both a system and user level. Similar to xinetd, launchd can start daemons on demand. Similar to watchdogd, launchd can monitor daemons to make sure that they keep running. launchd also has replaced init as PID 1 on macOS and as a result it is responsible for starting the system at boot time.

Configuration files define the parameters of services run by launchd. Stored in the LaunchAgents and LaunchDaemons subdirectories of the Library folders, the property list-based files have approximately thirty different keys that can be set. launchd itself has no knowledge of these configuration files or any ability to read them - that is the responsibility of "launchctl".

launchctl is a command line application which talks to launchd using IPC and knows how to parse the property list files used to describe launchd jobs, serializing them using a specialized dictionary protocol that launchd understands. launchctl can be used to load and unload daemons, start and stop launchd controlled jobs, get system utilization statistics for launchd and its child processes, and set environment settings.

launchd

launchd has two main tasks. The first is to boot the system, and the second is to load and maintain services.

Here is a simplified view of the Mac OS X Tiger system startup on a PowerPC Mac (on an Intel Mac, EFI replaces Open Firmware and boot.efi replaces BootX):

  1. Open Firmware activates, initializes the hardware, and then loads BootX.
  2. BootX loads the kernel, spins the pinwheel cursor, and loads any needed kernel extensions (kexts).
  3. The kernel loads launchd.
  4. launchd runs /etc/rc, various scripts which scan through /System/Library/LaunchDaemons and /Library/LaunchDaemons, calling launchctl on the plists as needed, then launchd starts the login window.

In step 4, the startup scripts scan through a few different directories for jobs to run. There are two different directories that are scanned:

  1. The LaunchDaemons directories contain items that will run as root, generally background processes.
  2. The LaunchAgents directories contain jobs, called agent applications, that will run as a user or in the context of userland. These may be scripts or other foreground items, and they can even include a user interface.

These directories are all kept in the typical Library directories of Mac OS X.

launchd is very different from SystemStarter in that it may not actually launch all the daemons at boot time. Key to launchd, and similar to xinetd, is the idea of launch-on-demand daemons. When launchctl scans through the job plists at boot time, it asks launchd to reserve and listen on all of the ports requested by those jobs. If so indicated in the plist by the "OnDemand" key, the daemon is not actually loaded at the time. Rather, launchd will listen on the port, start the daemon when needed, and shut it down when it is no longer needed. After a daemon is loaded, launchd will keep track of it and make sure it is running if needed. In this way it is like watchdogd, and shares watchdogd's requirement that processes do not attempt to fork or daemonize on their own. If a process goes into the background, launchd will lose track of it and attempt to relaunch it.

Mac OS X Tiger, consequently, boots much faster than previous releases. The system only has to register the daemons that are to run and does not actually launch them until they are needed. In fact, the progress bar that appears during boot time is just a placebo application (named WaitingForLoginWindow [1] ) that does not really show anything other than the passage of time.

The hardest part to manage during a launchd boot is dependencies. SystemStarter had a very simple system of dependencies that used the "Uses", "Requires", and "Provides" keys in the plist of a startup item. There are two main strategies when creating launchd dependencies on Tiger: IPC allows daemons to talk amongst themselves to work out dependencies, or daemons can watch files or paths for changes. Using IPC is much more subtle than the SystemStarter's keys and requires more work from the developer, but it may[ citation needed ] lead to cleaner and quicker startups. SystemStarter was still supported up to OS X Mountain Lion, but was removed in OS X Yosemite.

launchctl

In launchd, control of services is centralized in the launchctl application.

On its own, launchctl can take commands from the command line, from standard in, or operate in interactive mode. With superuser privileges, launchctl can be used to make changes on a global scale. A set of launchctl commands can be made permanent when stored in /etc/launchd.conf. (A per-user ~/.launchd.conf file appears to have been considered, but is not supported in any existing version of macOS. [2] )

launchctl communicates with launchd via a Mach-specific IPC mechanism.

Property list

A property list (plist) is a type of file that launchd uses for program configuration. When launchd scans a folder, or a job is submitted with launchctl, it reads a plist file that describes how the program is to be run.

A list of often used keys follows below. All keys are optional unless otherwise noted. For a full list, see Apple's manual page for launchd.plist. [3]

KeyTypeDescription
LabelStringThe name of the job. By convention, the job label is the same as the plist file name, without the .plist extension. Required.
ProgramStringA path to an executable. Useful for simple launches. At least one of Program or ProgramArguments is required.
ProgramArgumentsArray of stringsAn array of strings representing a UNIX command. The first string is generally a path to an executable, while latter strings contain options or parameters. At least one of Program or ProgramArguments is required.
UserNameString
(defaults to root or current user)
The job will be run as the given user, who may (or may not) be the user who submitted it to launchd.
OnDemand

(Deprecated since 10.5)

Boolean
(defaults to YES)
Deprecated as of 10.5 with the more powerful KeepAlive option. A boolean flag that defines if a job runs continuously or not.
RunAtLoadBoolean
(defaults to NO)
A boolean flag that defines if a task is launched immediately when the job is loaded into launchd.
StartOnMountBoolean
(defaults to NO)
A boolean flag that defines if a task is launched when a new filesystem is mounted.
QueueDirectoriesArray of stringsWatch a directory for new files. The directory must be empty to begin with, and must be returned to an empty state before QueueDirectories will launch its task again.
WatchPathsArray of stringsWatch a filesystem path for changes. Can be a file or folder.
StartIntervalIntegerSchedules job to run on a repeating schedule. Indicates number of seconds to wait between runs.
StartCalendarIntervalDictionary of integers
or
Array of dictionaries of integers
Job scheduling. The syntax is similar to cron.
RootDirectoryStringThe job will be chrooted into this directory before execution.
WorkingDirectoryStringThe job will be chdired into this directory before execution.

StandardInPath,
StandardOutPath,
StandardErrorPath

StringKeys to determine files for input and output for the launched process.
LowPriorityIOBooleanTells the kernel that this task is of a low priority when doing filesystem I/O.
AbandonProcessGroupBoolean
(defaults to NO)
A boolean flag that defines whether subprocesses launched from a task launched by launchd will be killed when the task ends. Useful where a short-lived task starts a long-lived subtask, but may result in zombie processes.
SessionCreateBoolean
(defaults to NO)
A boolean flag that defines whether a security session will be created for the task and its subprocesses.

Socket activation protocol

The name of each key under Sockets will be placed into the environment of the job when it is run, and the file descriptor of that socket will be available in that environment variable. This differs from systemd's socket activation in that the name of a socket definition inside of the job configuration is hardcoded into the application. This protocol is less flexible, although it does not, as systemd does, require the daemon to hardcode a starting file descriptor (as of 2014, it is 3). [4]

History

The software was designed and coded by Dave Zarzycki at Apple. The company planned for all of the following to be superseded in OS X environments –

– and most of those things were superseded when launchd was introduced with Mac OS X v10.4 (Tiger).

In 2005, R. Tyler Croy ported launchd to FreeBSD as part of Google Summer of Code Project. It could not be run as PID 1 (only a session init), and it was not commonly used on that platform. [5]

In 2006, the Ubuntu Linux distribution considered using launchd. The option was rejected because the source code was subject to the Apple Public Source License – described as an "inescapable licence problem". [6] Ubuntu instead developed and switched to its own service management tool, Upstart.

In August 2006, Apple relicensed launchd under the Apache License, Version 2.0 in an effort to make adoption by other open source developers easier. [7] Most Linux distributions use systemd or Upstart, or continue with init, and the BSDs also continue with init.

In December 2013, R. Tyler Croy announced his intent to resume work on his port of launchd to FreeBSD, and his "openlaunchd" GitHub repo subsequently rose in activity. [8]

The last Wayback Machine capture of the Mac OS Forge area for launchd was in June 2012, [9] and the most recent open source version from Apple was 842.92.1 in code for OS X 10.9.5.

In 2014, with OS X 10.10 and iOS 8, Apple moved code for launchd to closed source libxpc. [10]

In August 2015 Jordan Hubbard and Kip Macy announced NextBSD, which is based on FreeBSD-CURRENT kernel while adding in Mach IPC, Libdispatch, notifyd, asld, launchd, and other components derived from Darwin, Apple's open-source code for OS X.

Apple open source release history

Version License Included in macOS versionsIncluded Apple Developer Tools versions
launchd 106 Apple Public Source License [11]
  • Mac OS X 10.4 [12]
  • Mac OS X 10.4.1 [13]
launchd 106.3 Apple Public Source License [14]
  • Mac OS X 10.4.2 [15]
  • Mac OS X 10.4.3 [16]
  • Mac OS X 10.4.4.ppc [17]
  • Mac OS X 10.4.5.ppc [18]
launchd 106.10 Apple Public Source License [19]
  • Mac OS X 10.4.4.x86 [20]
  • Mac OS X 10.4.5.x86 [21]
launchd 106.13 Apple Public Source License [22]
  • Mac OS X 10.4.6.ppc [23]
  • Mac OS X 10.4.6.x86 [24]
launchd 106.14 Apple Public Source License [25]
  • Mac OS X 10.4.7.ppc [26]
  • Mac OS X 10.4.7.x86 [27]
  • Mac OS X 10.4.8.ppc [28]
  • Mac OS X 10.4.9.ppc [29]
  • Mac OS X 10.4.10.ppc [30]
  • Mac OS X 10.4.11.ppc [31]
launchd 106.20 Apple Public Source License [32]
  • Mac OS X 10.4.8.x86 [33]
  • Mac OS X 10.4.9.x86 [34]
  • Mac OS X 10.4.10.x86 [35]
  • Mac OS X 10.4.11.x86 [36]
  • Developer Tools 2.4 [37]
launchd 152 Apache License 2.0 [38]
launchd 257 Apache License 2.0 [39]
  • Mac OS X 10.5 [40]
  • Mac OS X 10.5.1 [41]
  • Developer Tools 3.1 [42]
  • Developer Tools 3.1b [43]
  • Developer Tools 3.1.1 [44]
  • Developer Tools 3.1.2 [45]
  • Developer Tools 3.1.3 [46]
  • Developer Tools 3.1.4 [47]
launchd 258.1 Apache License 2.0 [48]
  • Mac OS X 10.5.2 [49]
launchd 258.12 Apache License 2.0 [50]
  • Mac OS X 10.5.3 [51]
  • Mac OS X 10.5.4 [52]
launchd 258.18 Apache License 2.0 [53]
  • Mac OS X 10.5.5 [54]
launchd 258.19 Apache License 2.0 [55]
  • Mac OS X 10.5.6 [56]
launchd 258.22 Apache License 2.0 [57]
  • Mac OS X 10.5.7 [58]
launchd 258.25 Apache License 2.0 [59]
  • Mac OS X 10.5.8 [60]
launchd 328 Apache License 2.0 [61]
  • Mac OS X 10.6 [62]
  • Mac OS X 10.6.1 [63]
  • Mac OS X 10.6.2 [64]
  • Developer Tools 3.2.1 [65]
  • Developer Tools 3.2.2 [66]
  • Developer Tools 3.2.3 [67]
  • Developer Tools 3.2.4 [68]
launchd 329.3 Apache License 2.0 [69]
  • Mac OS X 10.6.3 [70]
launchd 329.3.1 Apache License 2.0 [71]
  • Mac OS X 10.6.4 [72]
  • Developer Tools 3.2.5 [73]
  • Developer Tools 3.2.6 [74]
launchd 329.3.2 Apache License 2.0 [75]
  • Mac OS X 10.6.5 [76]
launchd 329.3.3 Apache License 2.0 [77]
  • Mac OS X 10.6.6 [78]
  • Mac OS X 10.6.7 [79]
  • Mac OS X 10.6.8 [80]
launchd 392.18 Apache License 2.0 [81]
  • Mac OS X 10.7 [82]
  • Mac OS X 10.7.1 [83]
launchd 392.35 Apache License 2.0 [84]
  • Mac OS X 10.7.2 [85]
launchd 392.36 Apache License 2.0 [86]
  • Mac OS X 10.7.3 [87]
launchd 392.38 Apache License 2.0 [88]
  • Mac OS X 10.7.4 [89]
launchd 392.39 Apache License 2.0 [90]
  • Mac OS X 10.7.5 [91]
launchd 442.21 Apache License 2.0 [92]
  • Mac OS X 10.8 [93]
  • Mac OS X 10.8.1 [94]
launchd 442.26.2 Apache License 2.0 [95]
  • Mac OS X 10.8.2 [96]
  • Mac OS X 10.8.3 [97]
  • Mac OS X 10.8.4 [98]
  • Mac OS X 10.8.5 [99]
launchd 842.1.4 Apache License 2.0 [100]
launchd 842.90.1 Apache License 2.0 [103]
launchd 842.92.1 Apache License 2.0 [106]

See also

Related Research Articles

Darwin is the core Unix operating system of macOS, iOS, watchOS, tvOS, iPadOS, visionOS, and bridgeOS. It previously existed as an independent open-source operating system, first released by Apple Inc. in 2000. It is composed of code derived from NeXTSTEP, FreeBSD, other BSD operating systems, Mach, and other free software projects' code, as well as code developed by Apple.

<span class="mw-page-title-main">Portage (software)</span> Gentoo package management system

Portage is a package management system originally created for and used by Gentoo Linux and also by ChromeOS, Calculate, Sabayon, and Funtoo Linux among others. Portage is based on the concept of ports collections. Gentoo is sometimes referred to as a meta-distribution due to the extreme flexibility of Portage, which makes it operating-system-independent. The Gentoo/Alt project was concerned with using Portage to manage other operating systems, such as BSDs, macOS and Solaris. The most notable of these implementations is the Gentoo/FreeBSD project.

<span class="mw-page-title-main">Xcode</span> IDE including tools for developing software for Apple platforms

Xcode is Apple's integrated development environment (IDE) for macOS, used to develop software for macOS, iOS, iPadOS, watchOS, tvOS, and visionOS. It was initially released in late 2003; the latest stable release is version 15, released on September 18, 2023, and is available free of charge via the Mac App Store and the Apple Developer website. Registered developers can also download preview releases and prior versions of the suite through the Apple Developer website. Xcode includes command-line tools that enable UNIX-style development via the Terminal app in macOS. They can also be downloaded and installed without the GUI.

In computing, a loadable kernel module (LKM) is an object file that contains code to extend the running kernel, or so-called base kernel, of an operating system. LKMs are typically used to add support for new hardware and/or filesystems, or for adding system calls. When the functionality provided by an LKM is no longer required, it can be unloaded in order to free memory and other resources.

<span class="mw-page-title-main">Daemon (computing)</span> Computer program that runs as a background process

In multitasking computer operating systems, a daemon is a computer program that runs as a background process, rather than being under the direct control of an interactive user. Traditionally, the process names of a daemon end with the letter d, for clarification that the process is in fact a daemon, and for differentiation between a daemon and a normal computer program. For example, syslogd is a daemon that implements system logging facility, and sshd is a daemon that serves incoming SSH connections.

<span class="mw-page-title-main">XNU</span> Computer operating system kernel

XNU is the computer operating system (OS) kernel developed at Apple Inc. since December 1996 for use in the Mac OS X operating system and released as free and open-source software as part of the Darwin OS, which in addition to macOS is also the basis for the Apple TV Software, iOS, iPadOS, watchOS, visionOS, and tvOS OSes.

<span class="mw-page-title-main">Mac OS X Tiger</span> Fifth major release of Mac OS X

Mac OS X Tiger is the 5th major release of macOS, Apple's desktop and server operating system for Mac computers. Tiger was released to the public on April 29, 2005 for US$129.95 as the successor to Mac OS X 10.3 Panther. Included features were a fast searching system called Spotlight, a new version of the Safari web browser, Dashboard, a new 'Unified' theme, and improved support for 64-bit addressing on Power Mac G5s. Mac OS X 10.4 Tiger also had a number of additional features that Microsoft had spent several years struggling to add to Windows with acceptable performance, such as fast file searching and improved graphics processing.

PearPC is an architecture-independent PowerPC platform emulator capable of running many PowerPC operating systems, including pre-Intel versions of Mac OS X, Darwin and Linux. It is released under the terms of the GNU General Public License (GPL). It can be executed on Microsoft Windows, Linux, FreeBSD and other systems based on POSIX-X11. The first official release was made on May 10, 2004.

<span class="mw-page-title-main">QEMU</span> Free virtualization and emulation software

QEMU is a free and open-source emulator. It emulates a computer's processor through dynamic binary translation and provides a set of different hardware and device models for the machine, enabling it to run a variety of guest operating systems. It can interoperate with Kernel-based Virtual Machine (KVM) to run virtual machines at near-native speed. QEMU can also do emulation for user-level processes, allowing applications compiled for one architecture to run on another.

init UNIX system component

In Unix-based computer operating systems, init is the first process started during booting of the operating system. Init is a daemon process that continues running until the system is shut down. It is the direct or indirect ancestor of all other processes and automatically adopts all orphaned processes. Init is started by the kernel during the booting process; a kernel panic will occur if the kernel is unable to start it, or it should die for any reason. Init is typically assigned process identifier 1.

In the macOS, iOS, NeXTSTEP, and GNUstep programming frameworks, property list files are files that store serialized objects. Property list files use the filename extension .plist, and thus are often referred to as p-list files.

<span class="mw-page-title-main">Hackintosh</span> Non-Apple computer running macOS

A Hackintosh is a computer that runs Apple's Macintosh operating system macOS on computer hardware that is not authorized for the purpose by Apple. This can also include running Macintosh software on hardware it is not originally authorized for. Benefits of "Hackintoshing" can include cost, ease of repair and piecemeal upgrade, and freedom to use customized choices of components that are not available in the branded Apple products. macOS can also be run on several non-Apple virtualization platforms, although such systems are not usually described as Hackintoshes. Hackintosh laptops are sometimes referred to as "Hackbooks".

<span class="mw-page-title-main">Architecture of macOS</span> Layers of the operating system

The architecture of macOS describes the layers of the operating system that is the culmination of Apple Inc.'s decade-long research and development process to replace the classic Mac OS.

<span class="mw-page-title-main">EFI system partition</span> Partition used by Unified Extensible Firmware Interface

The EFIsystem partition or ESP is a partition on a data storage device that is used by computers that have the Unified Extensible Firmware Interface (UEFI). When a computer is booted, UEFI firmware loads files stored on the ESP to start operating systems and various utilities.

<span class="mw-page-title-main">FreeBSD</span> Free and open-source Unix-like operating system

FreeBSD is a free and open-source Unix-like operating system descended from the Berkeley Software Distribution (BSD). The first version of FreeBSD was released in 1993 developed from 386BSD and the current version runs on x86, ARM, PowerPC and RISC-V processors. The project is supported and promoted by the FreeBSD Foundation.

The Linux booting process involves multiple stages and is in many ways similar to the BSD and other Unix-style boot processes, from which it derives. Although the Linux booting process depend very much on the computer architecture, those architectures share similar stages and software components, including system startup, bootloader execution, loading and startup of a Linux kernel image, and execution of various startup scripts and daemons. Those are grouped into 4 steps: system startup, bootloader stage, kernel stage, and init process. When a Linux system is powered up or reset, its processor will execute a specific firmware/program for system initialization, such as Power-on self-test, invoking the reset vector to start a program at a known address in flash/ROM, then load the bootloader into RAM for later execution. In personal computer (PC), not only limited to Linux-distro PC, this firmware/program is called BIOS, which is stored in the mainboard. In embedded Linux system, this firmware/program is called boot ROM. After being loaded into RAM, bootloader will execute to load the second-stage bootloader. The second-stage bootloader will load the kernel image into memory, decompress and initialize it then pass control to this kernel image. Second-stage bootloader also performs several operation on the system such as system hardware check, mounting the root device, loading the necessary kernel modules,... Finally, the very first user-space process starts, and other high-level system initializations are performed.

ptrace is a system call found in Unix and several Unix-like operating systems. By using ptrace one process can control another, enabling the controller to inspect and manipulate the internal state of its target. ptrace is used by debuggers and other code-analysis tools, mostly as aids to software development.

systemd Suite of system components for Linux

systemd is a software suite that provides an array of system components for Linux operating systems. The main aim is to unify service configuration and behavior across Linux distributions. Its primary component is a "system and service manager" – an init system used to bootstrap user space and manage user processes. It also provides replacements for various daemons and utilities, including device management, login management, network connection management, and event logging. The name systemd adheres to the Unix convention of naming daemons by appending the letter d. It also plays on the term "System D", which refers to a person's ability to adapt quickly and improvise to solve problems.

<span class="mw-page-title-main">OpenRC</span> Init system for Unix-like computer operating systems

OpenRC is a dependency-based init system for Unix-like computer operating systems. It was created by Roy Marples, a NetBSD developer who was also active in the Gentoo project. It became more broadly adopted as an init system outside of Gentoo following the decision by some Linux distributions not to adopt systemd.

<span class="mw-page-title-main">NextBSD</span> Operating system

NextBSD was an operating system initially based on the trunk version of FreeBSD as of August 2015. It was a fork of FreeBSD which implemented new features developed on branches, but not yet implemented in FreeBSD. As of 2019, the website is defunct, with the last commits on GitHub dating to October 2019. The Wayback Machine captures of the website after December 15, 2017 are domain squatter pages, and as of March 17, 2021, the site is redirects to a fake "Apple Support" page.

References

  1. "Tiger Details". Daring Fireball . WaitingForLoginWindow. Retrieved February 23, 2020.
  2. Mac OS X Manual Page For launchd.conf(5)
  3. Mac OS X Manual Page For launchd.plist(5)
  4. little-big-h (January 30, 2014). "node-launchd" . Retrieved April 10, 2014.
  5. "Launchd". FreeBSD wiki. Retrieved December 8, 2013.
  6. "ReplacementInit". UbuntuWiki. Retrieved July 2, 2007.
  7. Prabhakar, Ernest (August 7, 2006). "Apple Opens Up: Kernel, Mac OS Forge, iCal Server, Bonjour, Launchd". darwin-dev (Mailing list). Retrieved March 25, 2023.
  8. Croy, R Tyler. "The scratchiest neckbeard, or FreeBSD on my Thinkpad X200". unethicalblogger.com. Archived from the original on November 13, 2017. Retrieved December 8, 2013.{{cite web}}: CS1 maint: unfit URL (link)
  9. "launchd". Mac OS Forge. Apple Inc. Archived from the original on June 9, 2012. Retrieved September 3, 2016.
  10. Levin, Jonathan (2014). "Launchd – At Your Service!" (PDF). p. 32. Retrieved September 3, 2016. … 10.10: moved to libxpc 559 (560 in iOS 8) – Source not available yet – and may not ever be – Libxpc is a closed source project …
  11. "launchd 106 license file".
  12. "Mac OS X 10.4 - Source".
  13. "Mac OS X 10.4.1 - Source".
  14. "launchd 106.3 license file".
  15. "Mac OS X 10.4.2 - Source".
  16. "Mac OS X 10.4.3 - Source".
  17. "Mac OS X 10.4.4.ppc - Source".
  18. "Mac OS X 10.4.5.ppc - Source".
  19. "launchd 106.10 license file".
  20. "Mac OS X 10.4.4.x86 - Source".
  21. "Mac OS X 10.4.5.x86 - Source".
  22. "launchd 106.13 license file".
  23. "Mac OS X 10.4.6.ppc - Source".
  24. "Mac OS X 10.4.6.x86 - Source".
  25. "launchd 106.14 license file".
  26. "Mac OS X 10.4.7.ppc - Source".
  27. "Mac OS X 10.4.7.x86 - Source".
  28. "Mac OS X 10.4.8.ppc - Source".
  29. "Mac OS X 10.4.9.ppc - Source".
  30. "Mac OS X 10.4.10.ppc - Source".
  31. "Mac OS X 10.4.11.ppc - Source".
  32. "launchd 106.20 license file".
  33. "Mac OS X 10.4.8.x86 - Source".
  34. "Mac OS X 10.4.9.x86 - Source".
  35. "Mac OS X 10.4.10.x86 - Source".
  36. "Mac OS X 10.4.11.x86 - Source".
  37. "Developer Tools 2.4 - Source".
  38. "launchd 152 license file".
  39. "launchd 257 license file".
  40. "Mac OS X 10.5 - Source".
  41. "Mac OS X 10.5.1 - Source".
  42. "Developer Tools 3.1 - Source".
  43. "Developer Tools 3.1b - Source".
  44. "Developer Tools 3.1.1 - Source".
  45. "Developer Tools 3.1.2 - Source".
  46. "Developer Tools 3.1.3 - Source".
  47. "Developer Tools 3.1.4 - Source".
  48. "launchd 258.1 license file".
  49. "Mac OS X 10.5.2 - Source". Archived from the original on September 21, 2020. Retrieved August 19, 2019.
  50. "launchd 258.12 license file".
  51. "Mac OS X 10.5.3 - Source".
  52. "Mac OS X 10.5.4 - Source".
  53. "launchd 258.18 license file".
  54. "Mac OS X 10.5.5 - Source".
  55. "launchd 258.19 license file".
  56. "Mac OS X 10.5.6 - Source".
  57. "launchd 258.22 license file".
  58. "Mac OS X 10.5.7 - Source".
  59. "launchd 258.25 license file".
  60. "Mac OS X 10.5.8 - Source".
  61. "launchd 328 license file".
  62. "Mac OS X 10.6 - Source".
  63. "Mac OS X 10.6.1 - Source".
  64. "Mac OS X 10.6.2 - Source".
  65. "Developer Tools 3.2.1 - Source".
  66. "Developer Tools 3.2.2 - Source".
  67. "Developer Tools 3.2.3 - Source".
  68. "Developer Tools 3.2.4 - Source".
  69. "launchd 329.3 license file".
  70. "Mac OS X 10.6.3 - Source".
  71. "launchd 329.3.1 license file".
  72. "Mac OS X 10.6.4 - Source".
  73. "Developer Tools 3.2.5 - Source".
  74. "Developer Tools 3.2.6 - Source".
  75. "launchd 329.3.2 license file".
  76. "Mac OS X 10.6.5 - Source".
  77. "launchd 329.3.3 license file".
  78. "Mac OS X 10.6.6 - Source".
  79. "Mac OS X 10.6.7 - Source".
  80. "Mac OS X 10.6.8 - Source".
  81. "launchd 392.18 license file".
  82. "Mac OS X 10.7 - Source".
  83. "Mac OS X 10.7.1 - Source".
  84. "launchd 392.35 license file".
  85. "Mac OS X 10.7.2 - Source".
  86. "launchd 392.36 license file".
  87. "Mac OS X 10.7.3 - Source".
  88. "launchd 392.38 license file".
  89. "Mac OS X 10.7.4 - Source".
  90. "launchd 392.39 license file".
  91. "Mac OS X 10.7.5 - Source".
  92. "licence header in launchd 442.21 source code".
  93. "Mac OS X 10.8 - Source".
  94. "Mac OS X 10.8.1 - Source".
  95. "license header in launchd 442.26.2 source code".
  96. "Mac OS X 10.8.2 - Source".
  97. "Mac OS X 10.8.3 - Source".
  98. "Mac OS X 10.8.4 - Source".
  99. "Mac OS X 10.8.5 - Source".
  100. "license header in launchd 842.1.4 source code".
  101. "OS X 10.9 - Source".
  102. "OS X 10.9.1 - Source".
  103. "license header in launchd 842.90.1 source code".
  104. "OS X 10.9.2 - Source".
  105. "OS X 10.9.3 - Source".
  106. "license header in launchd 842.92.1 source code".
  107. "OS X 10.9.4 - Source".
  108. "OS X 10.9.5 - Source".

Apple Developer:

Apple Developer Retired Documents Library:

Other links: