Monolithic design: Systemd is a large, complex piece of software that combines many system management functions, rather than having separate, specialized tools as in the traditional Unix philosophy.
It’s a large, complex project, but it’s not a single large piece of software: it’s a lot of components that work well together. Yes, it includes some useless crap (like hostnamed), but it’s not that you have to buy into all of them at once or not use systemd. For example, I don’t use networkd, nor resolved and neither oomd, yet my system is working perfectly fine.
Proprietary configuration format: Systemd uses its own configuration file format (.service, .socket, etc.) rather than traditional plaintext configuration files.
Have you ever opened one? You would have learnt they’re text files with this super-proprietary and complicated format:
[Section]
Property=Value
Departure from Unix principles: Systemd is seen by some as moving away from the Unix philosophy of “do one thing and do it well” in favor of a more centralized, opinionated system management approach.
NixOS is the apotheosis of the centralised (single configuration file for an entire system) and opinionated (a single configuration language, forcing every software to be built, linked and configured in the same way, breaking software not built for NixOS by default, …) approach to systemd management. NixOS even completely subverts the Filesystem Hierarchy Standard (FHS) to achieve reproducibility and atomic updates.
I’m not sure how you could possibly like NixOS if it weren’t for systemd.
Complexity: The systemd codebase is very large and feature-rich, which some see as unnecessary complexity compared to simpler init systems like SysV init or BSD init.
It’s complex because it does a lot more that just initialising the system. Some of the things it does it does quite poorly (for example, the journal file format objectively sucks compared even to plain old text log with rotation), but some are pretty good and are used extensively to make what NixOS is today (declarative configuration for services, mounting filesystems, ordering services dynamically after devices, dynamic user IDs and GIDs, ephemeral services, security hardening, container management…)
Tight integration: Systemd is deeply integrated with the kernel and other core system components, rather than maintaining a more modular, loosely-coupled architecture.
It’s developed for and targeting a typical GNU/Linux desktop or server, yes. I don’t see what’s bad about it. It would cool if you could use it on some BSD or tiny embedded system, but I wouldn’t run NixOS on those anyway.
I guess I just defended systemd. I didn’t think it would have ever happen, but most of these points are so ludicrous I had to.