classic rookie mistake to just call a program that doesn't exit a daemon...
proper daemons can stay up for years.
Running "in the background", handling of stdin/out/err, logging, detaching from tty, creating a new process group/session, closing fds, and much more is handled these days mostly by systemd. No need to put all this into your program at all.
I'll give you that signal handling still needs to be done in the target process, if the defaults don't satisfy you.
But you really don't need anything special anymore to make any old script into a daemon.
if someone else runs it on a system without systemd it won't work correctly?
Without systemd you can use daemonize from shell, for example. I either run these kinds of service scripts via systemd in production, or via my special program that takes care of starting and monitoring, and restarting when the code of the script changes.
Why should I stuff daemonization machinery into every single script I might want to run as a daemon, especially when it's cumbersome in many languages where I want to do it, like bash or PHP, and in general less flexible than using some external tool?
it is true that it's rare to see a daemonize flag these days...
If it's something like sshd, it better not prevent any filesystems from umounting unless necessary.