First comment in this thread that's hit the nail on the head with regards to why software requires maintenance. After all, if I write an algorithm, how on earth does it just stop working after a while?

Fixing flaws is a separate and legitimate concern, but whether feature or security, this is solved by the idea of a warranty where the purchase price includes the product, and some time-limited obligation to ensure that it is fit for purpose. Once that's up, it's up to the developer to determine whether it's worth their while continuing to support it - but at least the end user can run it on the platform they originally purchased it on. Theoretically.

Then comes the hiding-in-plain-sight pernicious moneymaker mentioned: platform planned obsolescence. It comes in many forms, forced upgrades as mentioned, but also things like "turn on auto-updates because that's just what you do these days", "oh this is a 32-bit app so you can't run it anymore - pester the developer". Then there's all the developer-side stuff like "32-bit apps don't work anymore, update", "Oh neither does the older SDK, update that too", "Oh didn't we mention there's this new screen shape and you have to add support for that too", and "oh if you don't do all this stuff your app will disappear from the store in X days". What about the less obvious stuff like "this new SDK/toolkit/platform library is the way to build new apps! There's not really a clear upgrade path, but it's the one true way. Until the next one."

It's next to impossible for developers to solve this problem because it is an externality imposed on them by platform vendors. It is the main reason why software, in the short term, needs to be maintained. Of course, long term you expect that big developments and innovations would result in some level of obsolescence, but the devices and software industries have an incredibly fast rate of churn even for the pace of innovation. It's very interesting using systems from 5, 10, 20 years ago just to see how far we've come (or in many cases, how far we haven't).

Apple in particular has driven this by consistently eschewing backwards compatibility, constantly churning their SDKs, and continuously breaking older platforms. It's no surprise, they have two strong financial incentives to do so: if new software requires new Apple hardware, that's new revenue for them, providing they can convince us to buy it. If new hardware requires new software, that's new revenue for them thanks to their app stores. If they can get developers to move to subscription models well, that increases the recurring revenue via IAPs. Force them to use your payment and accounting services too, clipping the ticket along the way? More revenue!

We're the suckers though - we've been conditioned so hard to expect their stuff to be somewhat fragile, expensive to repair, and severely limited in lifespan that we almost like it. You dropped your phone? Oh the glass on the back has all broken. That's integral to the chassis, so it's a really expensive repair - over half the cost of a new one. Might as well treat yourself. No don't listen to that Rossmann guy, he's obviously <unsafe/counterfeit/untrustworthy>, eyes over here buddy, look at my pretty blue shirt. Oh hey, if you go to him Face ID won't work, because a nation-state actor might have installed an intercept on his dodgy counterfeit screen. You want to keep secure right? Anyway what were we saying again? Oh yeah, the new one. Oh you also ran out of storage? It's only been 5 years, the base model still has the same amount, so why don't you pay a bit more and get the upgrade. After all it only makes sense that you'd accumulate stuff over time right? What did you say, SD card? RAM stick? nVME SSD? No no no, they're way too slow/insecure/low-tech/dangerous to work with iPhone/Mac. No no your friend who put one in his computer has a PC - these are Macs, entirely different type of thing. Of course software needs to be maintained, of course it does. How could it possibly work on your new machines, how on earth! I digress...