> It's an interesting problem. Live updates without requiring a restart is going to be a complex task, how do you reload a library in use by a program without crashing it?
They don't, the program keeps using the old library until it's restarted. Some Linux distributions restart daemons when they or their dependent libraries are updated, but that can't be done for desktop software. Firefox sometimes notices it's been updated and pops up a warning with a "Restart Firefox" button (which keeps the session state), though AFAIK it's only for updates to Firefox itself, not for any of the libraries it might have loaded.
If you never restart a Linux desktop (or at least log out), you will be running outdated libraries, even if you run updates in the background.
(The best solution would be what Android does, where every program is supposed to know how to checkpoint itself, and they are forcefully restarted on a upgrade, transparently to the user. But even there, updates to system libraries still require a full reboot.)
> services: they are specifically designed to be updated and restarted
I write plenty of daemons (you call them "services"). What exactly do I write
specifically for them to be able to continue to run when a library is
upgraded?
Sorry, I meant things like dependency management among services.
I don't think systemd supports what you are asking but it shouldn't be too hard to write a service that restarts other services if their shared libraries change?
Yes, but they continue to run while the library is being updated. That's the
point. They can get restarted once the update process finishes, which takes
a lot less time than be shut down, wait for update, and be started again.
From what I know, Windows doesn't allow a library to be replaced until it's
not used by anything, which is more intrusive and is IMO the root cause
(though indirect) why people hate updating Windows.
Well, how do Linux and other unices do that?