And honestly, paying extra in 1998 to have the contractor write a Java app to support multiple operating systems would have been a huge waste of money, since there weren't really any other platforms that businesses used (or at least, not these businesses).
The real 'they deserve everything they get' is that they didn't start this process sooner. The IT departments should have gotten their hands on the Vista DVD, tested their custom software, seen which way the wind was blowing, and started a project to modernize their systems. They could have spread the project (and cost) out over seven years, but instead they didn't start the process until it was too late to avoid huge expenses. It's exactly the same as people who didn't take Y2K seriously until September 1999, and then said 'Okay we need to update all of our things, can we have that done by November just to make sure?'
That reads like a catalogue of worst practices. It's possible to make Java apps really portable by doing absolutely nothing. You compile Java code to .class format, and then you are done. You would probably want to include your own JVM and a shortcut or bash file invoking it on the bytecode, but the point is it's actually more effort to make them non-portable.
The people at such companies likely have no premise to judge whether the software product is built on sustainable technology - they just care that it does a fine job at operates their CNC mill or payroll system.
Sorry, but we'll have to stick with "or something"
Absolutely, yes. Bad decisions put companies out of business every day. Bad technical decisions should be no different. Better luck next time.
If it's an expensive product then the customer rightly expects it to last much longer than comparable items of lesser cost.
For a naturally expensive item like a CNC mill, where many customers will purchase their first one to replace a manual mill which has worn out after a decade or two, they often expect the modern CNC unit to fully replace the older piece with no further consideration (or cost) until the same familiar mode of mechanical wear occurs in another decade or two.
If your software or operating system does not live up to this expectation by design, then you are not giving the customer what they need to begin with.
If an industrial solution truly solves a problem, it stays solved well enough for the operator to move on to concentrate on their core competence (or different unsolved problems) from then on, and only incur insignificant costs or distractions from the previously unsolved problem.
A payroll or other office system is not that much different, but applies to many more businesses. Computerizing a formerly manual system, high up-front cost is expected to pay for itself in future efficiency. If no further features are desired, then the business should be able to rely on electro-mechanical integrity as the weakest point over the following decades. Replacing individual worn-out office machines as needed in the traditional way. Only "modernizing" company-wide on their own initiative and schedule. If you can not buy brand new machines as needed to continue your present office systems unchanged indefinitely if you want to, this does not mean there is a defect in your approach just because you need a solved problem to stay solved.
You may just be a victim of a consumer-centric (predatory) IT vendor structure even though you are paying top dollar for business solutions which are supposed to last.