According to the FreeBSD man pages, the rc(8) utility first appeared in the 4.0BSD release on 1980. That was 42 years ago. It has of course been modernized since then—But before we get into that, let’s first take a quick overview of its history.
The classic boot process was simple—the BSD kernel started init(8), which then passed control to the /etc/rc script before starting a getty(8) process to manage each virtual console. The /etc/rc script then called /etc/netstart to get network configuration up and running, and later /etc/rc called /etc/rc.local to start daemons that were not a part of the base system.
In 2000, NetBSD began modernizing this simple /etc/rc subsystem. First, NetBSD introduced an /etc/rc.d directory to contain separate scripts for each service. Second, they introduced the rcorder(8) command to determine the order in which these services would be started at system boot.
FreeBSD imported these improvements three years later, in FreeBSD 5.0-RELEASE, with improvements and bugfixes continuing to be added ever since.