Engineering projects usually have a finished state. Software engineering is no different, no matter how much the industry wants you to believe otherwise.
Underlying hardware/OS/firmwares/JVM/etc change.
Dependencies break.
Security updates.
Etc.
Engineering projects usually hand off maintenance to their owner. Your house/car need maintenance. Your cities roads/bridges/tunnels need maintenance.
The difference with software is that maintenance is done by the producers as they own the code.
OSes also can be "excellent products". They don't need yearly updates, there's nothing inherent to them that would prevent them from being made perfect, finished and never updated again.
The only case when an otherwise perfect OS would truly need to update is when new hardware capabilities require OS-level changes to support. Sometimes it may be beneficial to expose these new hardware capabilities as APIs for apps to consume. But again, adding new APIs shouldn't break the existing ones. For example, on phones, this would include things like notched screens, fingerprint readers or multiple rear-facing cameras.
> Dependencies break.
Don't update dependencies. Pick one version that serves you well and stick with it forever. I'm serious.
> Security updates.
It seems like we've already realized that writing code that deals with complex data structures received from untrusted parties in memory-unsafe languages like C is a terrible idea. If you exclude memory safety vulnerabilities, the attack surface shrinks drastically. You'd run out of security vulnerabilities pretty fast if you'd have any to begin with.
> Your house/car need maintenance. Your cities roads/bridges/tunnels need maintenance.
Houses, cars, and road infrastructure are made out of atoms and exposed to elements and stress of our imperfect real world. They wear out. Code doesn't. In 100 years, the bits would be the same they are today (as long as you use a reliable enough storage medium).
The perfect OS doesn't exist yet. Right now, I'd rather use some OS than no OS.
Why a perfect OS doesn't exist? Good question. Maybe because the programming field is relatively immature so we're still figuring things out and we don't apply formal verification to everything. Compare that to say, architecture, where we can calculate how much weight a structure can withstand. Or the other way around: what do we need to do to support an X amount of load.
I guess the stakes are lower too. I wouldn't walk on a wobbly bridge, but I don't mind if a desktop app I use crashes occasionally under unusual circumstances. Critical software (say, aviation) is generally written with more care but it's still not perfect.
theres this thing called the internet, to which the OS connects, filled with adversarial actors, so no this is not correct at all
Imagine the gas stations (operating system) changed the kind of fuel they dispense every few years. No, by no means a car (software) that is fully finished today would be able to continue doing its thing tomorrow, without ongoing updates.
This also happens in the real world, it's just that changes are more likely in the decades or centuries, so we as humans don't perceive them so well.
The fact that Microsoft spends a whole lot of money to avoid this, is circumstantial. Apple doesn't so much, and at some point your finished software will stop working with newer MacOS releases if you don't update it to the newer system versions.
Linux is even more of a moving target. Good luck having a perfectly well working compiled program today, and trying to run it in 10 years time.
Look at macOS for example, which over the years has gained app sandboxing and mobile-like access permissions. Software pre-dating these additions that assumes that it has access to everything all the time will have its functionality impaired. Devs had to update their software to not make such huge assumptions and to handle no access cases gracefully.
Sounds like it's not "finished" if it needs all these updates.
As for why change the window dressing, the market for style changes over time. Why do car companies change the look of their products? Why does the outside of a cereal box ever change? Do the inside of our houses today look the same as the 80s? The 70s? The 40s?
Are you arguing that Windows and MacOS should continue to look like it's 1.0 release?
Edit:
"if it doesn't rely on any online services"
That is a big IF. How many things don't, at least indirectly? (e.g. by relying on HTTPS, which requires TLS, which requires keeping up with current cryptographic standards.)
Even in electronic hardware there's often continuation of design and refinement. Have you never seen a board with a revision number on it?
Real-world objects like these wear out. Code doesn't.
> Have you never seen a board with a revision number on it?
Of course I have. There's a difference though. You can't ship an electronic device that's unfinished with a promise to "fix it later". Yet this is what routinely happens with software these days. Also, if your device serves its purpose well, you'd probably have a "final" board revision with all flaws fixed. If you want to add features to an electronic device, you'd make it a different model, possibly sold concurrently with your existing one to serve people with different needs and budgets.
You just said "engineering". Bridges and roads are engineering as well buddy. And it's not even just the wear, it's the continued refinement and upgrade of these structures which is a constant engineering effort.
> Engineering projects usually have a finished state
This is the statement I'm addressing. And it's just not entirely accurate. Things change, assumptions get proven wrong, there's always a newer and better way to do something, etc.
Sure your widget was probably about as good as you could do at the time you first launched it, but several years later there's better components available. Or maybe a supplier stops making some part you were using. Or a few years later you start getting parts back failing early in their service life and need to make an update. What was once your finished state now isn't.