First of all, you should distinguish two things: the program called init
and an init process that linux runs after loading and doing basic startup - which is also called init by the kernel.
The first one is a program, just as any other, who's task is to initiate system startup by running various other programs and control their closing. The most popular program like that is sysvinit. This is the most popular implementation of a "parent of all processes", found on a majority of standard linux distributions and typically exists as /sbin/init
.
The second is just a command that linux kernel knows and runs automatically at boot. So you can tell the kernel to run any other program in place of init. For example, a popular approach for doing system recovery is to tell linux to run /bin/bash
or an applet of /sbin/busybox
(see comments below). That can be done by supplying the name of the program as boot parameter (like init=/bin/bash
).
Note that when the init process exits, the system is halted becomes practically unusable.
Apart from bash and busybox, there are several init replacements out there that can do more or less what init does. You might want to have a look at minit, runit, cinit, jinit, upstart or initng. But if you aim an absolutely minimal solution with no startup parallelism or advanced features, busybox can be the best choice.