I did have criticism of sysvinit 20+ years ago and still have them today, if not worse.
systemd saved us from this disaster that was happening on every Linux system used seriously (server or desktop mainly).
The countless crashes, locked out of sessions users, loss of data, impossible to restart daemons, not rebooting servers... were mostly because of sysvinit, which is an abomination (I'll explain why later). I quickly escaped from this on my own systems (that I build myself from scratch) to install other inits like simpleinit-msb and perfected the scripts so that I didn't have to flip a coin to have my servers or desktops actually reboot 100 %, well, 99 % of the time. And most of all not lose data.
The amount of Linux systems that were not sure to boot after a shutdown, or that would lose lots of data, is scary. Just here on ./, the amount of people that have stuck shutdown with systemd are so clueless they don't realize systemd actually does things right, where before sysvinit would have broke their system that would lose data or break in the process.
You at least read some inittab documentation, so you at least must have some of the knowledge that I acquired 20+ years ago that people today calling themselves "veteran Unix admins" still don't have.
But you still lack a lot of knowledge about both sysvinit and Linux, given the nonsense you put in some of your answers.
So let's see :
Parallelizing Socket Services
misunderstanding of initd. This is achievable using inittab by configuring the runlevel initd is going to enter *OR* configuring the runlevel it is in and then signal initd to re-read inittab and maintain those processes also.
No this is not achievable at all using the method you described. I actually tried that back in the day, and it was entirely dependant on the daemons behaviour. I once had a daemon enter a fork bomb and writing countless of pid files on the filesystem, having to power reboot and hope the system was going back safe.
This is a nightmare security wise and a recipe for disaster for any new service you add. The safeguards in RH boot scripts were not there for nothing. And this never worked right even when you manage to reel in your daemons, as some would still not behave correctly without sth like inetd, which didn't even work for socket activation, which is needed for parallelizing socket services.
Parallelizing Bus Services
again inittab *already does this exactly as above *OR* entire process groups can be started in
For lazy loading, the initd equivalent is 'ondemand' however this functionality needs a complementary eventd.
Again, no, you don't understand what socket activation is, it's not blindly launching a group of process, and socket activation requires no user or wrapper script interaction like the ondemand option of sysvinit. It's impossible to do socket activation with sysvinit. A separate eventd would just do the same thing as systemd already does. I had to do very racy things on my systems just to emulate socket activation and it never worked 100 %. I had to fine tune the scripts every time the hardware died and I changed it, or my perfectly working scripts would not even boot. And I was not even using sysvinit anymore, or the OS would never manage to boot.
Keeping the First User PID Small
Considering the size and scope of systemd now compared to how miniscule initd is in comparison this argument is really reversed now.
All of the arguments here a based on the assumption that the rc init scripts are the *ONLY* way to interact with initd when the core initd functionality is completely ignored.
The argument is not reversed at all: "Keeping the First User PID Small" has nothing to do with what you're talking about at first (size of initd versus size of systemd init, which has nothing to do with keeping size of iniitd small, it's not a comparison argument). It's related to the next topic and also a reason why Linux on servers was always a disaster waiting to happen.
There's a reason the distributions adopted this RH scheme or scripts, the same reason I abandoned using inittab directly after wondering why everyone was not doing the same. When sth fails, it's a disaster when restarted automatically by sysvinit, and when not, your service is out and you're not even aware, and can do nothing without a clever console scheme, when it manages your tty and console.
sysvinit has no way to boot countless systems like a distribution has to do, without tons of scripts calling tons of executables. Even my tuned scripts with execs everywhere would launch hundreds of processes before the first user could even start. This hasn't changed today, and distributions had easily processes PID in the thousands at boot. And on servers with high process counts (or even desktops), it lead to countless problems, bugs and crashes. One of the reasons I switched to simpleinit-msb decades ago was also to limit this count which would lead to countless problems.
I no longer have the biggest problem you missed out today because of the recent addition of pidfd to the Linux kernel and the 32 bit PID activated on my systemd OS. But for now, servers on Linux are still vulnerable to these decades old bugs and crashes introduced by sysvinit on Linux.
systemd crushes sysvinit in this department, and just mounting your disks when you have things like LVM, RAID, NFS and the like, will put you in the thousands of PID launched. This problem was so hard that server distributions did not even propose it at first, and it would be very error prone if you didn't know what you were doing (losing your data in the process). I saved countless servers professionnally, being the only one knowing what to do. Because I actually scripted all the mounting of LVM on software RAID on Linux (NFS too) before even udev, when you had to create the right devices by hand. People like me who actually used sysvinit and perfectly know the Linux boot process welcomed systemd like a saviour it was.
Keeping Track of Processes
Here we see the double fork argument. With a claim that an initd process should keep them around and manage the processes that crash which is exactly why crashed processes become owned by init. Essentially this part of the document criticizes sysVinitd for not doing something that it does in normal operation.
Here is the big flaw of sysvinit, and one of the reason sysvinit on Linux is a disaster and a design flaw from the start. And the reson I never took these so called "veteran Unix users" seriously.
There are two big problems:
- sysvinit is port of an init that was running on System V Unixes that had 32 bit PID while Linux, though having 32 bit PID today, still by default run with 16 bit PID (or is that 15 bit?)
- The System V Unixes were just designed to crash once their PID limit was reached, while Linux recycle its PID
And sysvinit was designed for, guess what, System V Unix, and just ported like that to Linux.
Back in the day, one of the first Unix admin courses told us about the malware like the fork bomb, which would crash the system. On Linux, it can go on and on, and you're forced to power cycle. But most importantly, on Linux, you reach the limit fast, and then when your PID start recycling, which happens a lot on high workload servers, all things have the potential to break, very badly. sysvinit was not designed at all to deal with recycling processes anyway, nor with double forking daemons. Some malwares use these flaws to try to replace other daemons and gain privileges.
Thanks to systemd, we have now countless of these disastrous bugs truly taken into accounts and at least people try to mitigate them in the Linux kernel. Thus why pidfd and now even 32 bit PID (which I activated on all my OS already), not counting lots of other bugs in the Linux kernel fixed thanks to systemd.
Now, Linux on the server is no longer a disaster waiting to happen, all Linux admins can rejoice I think, as soon as the distros start implementing these by default. sysvinit held us back long enough, I was desperate to see any other init catch on, even when systemd appeared, to save us from this abomination that is sysvinit. Today I can't be more than happy at the turn of event, systemd saved Linux from this disaster.
Controlling the Process Execution Environment
*THIS* is what rc scripts are for. rc scripts were never meant to be used to start processes, they were meant to set up environments for the process prior to activation from within inittab. like this pseudocoded, rc->environment settings, runlevel ready, switch runlevel, all processes configured in inittab for that runlevel activated *in paralell* in the background.
This is supposing that everyone master shell scripts and the notion of session. In the professional world, I only encountered one professional admin that had enough skills and understanding of init process to write correct scripts. Professional sysadmins would launch scripts directly under the process user or not, not realizing why it would lead to disaster. They never understood this process execution environment thing. And you're asking these people to right correct scripts? I'm talking professionals here.
I always had to modify proprietary daemons scripts which were all broken, every Java daemons all broken, had to do migration scripts that worked in KSH on every single different Unix at the time (even IRIX, and if you know the Unixes, you know how broken most of their tools are, you understand the pain of doing that right, some admins were outright instaling GNU tools directly on their Unix)...
Just reading ./ I see most systemd detractors are fools that have zero understanding of shells, init and Linux, that try to pass as knowledgeable but it's obvious they don't know what they're talking about, even the so-called "veteran Unix admins". I've met countless Unix admins, that mocked me at the time for my Linux OS, but I was correcting HACMP scripts finger in the nose while it was magic to them, remaking my own script tools instead of using the automatic scripting tools on AIX, Solaris and HP-UX. I remember when one was locked out of an admin console for a big iron Z80 IIRC, and I told him I could log him in without even knowing the password, which I did (hint: they were basically Linux custom desktops): he couldn't believe it.
Your utopia is just that, an utopia. In the real world, there is no way sth that didn't repair itself spontaneously in decades will happen just because you say it. Most of what you say I tried decades ago and it doesn't work anyway. When truely knowledgeable people like the systemd devs (from whom I even learned some things) or distro maintainers (who take all the bug reports and see the disaster first hand) look at the landscape, there's just no choice nowadays.
And no decent (in my view) sysadmin would recommand sysvinit, I realized how bad it was in less than 3 months. Perhaps you need to actually build an OS from scratch to realize that though. It's invaluable knowledge though, and required to even write good init shell scripts.