Linux goes a long way towards updating while running. In fact, in my seven years of administering Linux – and my distro updates once a week – I never had to reboot to continue an update. Every update - during and after - I could continue using my system exactly as I was using it before.
Enterprise Linux also has the feature of updating the kernel on-the-fly. The infrastructure for it has been open-source, and anyone could build a similar service for themselves if they wanted.
I'm pretty sure I've updated the kernel on the fly when trying to update the kernel on Digital Ocean-- the stock kernel loads (let's call it the bootstrap kernel) and then it eventually calls some code that replaces the running kernel with a newer more modern version. I've forgotten the details, as it sounded kludgy, but I'm pretty use like anything else Linux, a reboot isn't always required.
In fact, with Nano server, Microsoft is trying to go that direction too -- the less you have running, the easier to avoid reboots.
But the real solution is trying to be reboot-tolerant by having a slight bit of redundancy, I would think. Uptime matters more for pet/snowflake servers than for cattle....
> I'm pretty sure I've updated the kernel on the fly when trying to update the kernel on Digital Ocean
What you go on to describe sounds a lot like kexec, and a kexec is the same thing as a reboot for everything on a computer except the hardware. The new kernel during a kexec starts with a freshly-booted state.
What I meant was – and perhaps I wasn't clear enough – updating the kernel in-memory, while it runs so that even your userspace apps notice nothing - except perhaps a few fractions of seconds of time slipping by - and continue running while the kernel they're running on top of is patched with new code.
This has been possible for a while on Linux. It began with, IIRC, Ksplice as a college-project, then a startup, then bought-out by Oracle for Oracle Linux, then independent efforts at similar implementations by both Red Hat and Suse, which eventually got merged together and mainlined into Linus's tree.
For Linux it only really needs to reboot for kernel updates. If you don't update your kernel often, then you could do updates every day and not have to reboot at all.
At home I run Arch Linux, and I do updates almost every day. Usually my uptime can easily be measured in weeks.
At work I have Windows 7 on my laptop. I have to restart my laptop twice a week at a minimum, because every tiny fucking update requires a restart. And if I don't then it nags like a little bitch every 2-4 hours and breaks my concentration. And if you take too long then it forces the update and your work is lost. I hate having to close all my apps every 2 days and wait for ages while it restarts. From a user's perspective, Windows is the shittiest desktop experience available in a corporate environment.
Windows 7 is almost 7 years old though. Just the other day I noticed that my Windows 10 machine updated its video driver without having to restart. Things have definitely improved since Windows 7.