schmatzler wrote:The mentality in OSS often seems to be "Oh well, my fun programming exercise has finished now, lets do something new!" - maintaining software doesnt seem to be a priority for a lot of devs.
Windows is the exact opposite: many legacy APIs linger around for decades, so a lot of software continues to work without any maintenance, leading many developers into a false sense of security that OSes and APIs never change, and you never have to maintain older code.
When Microsoft finally does kill off an old API, the gap between the now-ancient code and knowledge of active developers (the people who actually understood the old APIs and designed and implemented the actual code have probably gone on to greener pastures years ago) is so great that it's virtually impossible to update the code to the new API.
When I started little over a year ago, I encountered a situation exactly like that: code was still running DirectX 9 and DirectShow. Sure, it works, but firstly, you're missing out on all the cool new stuff that DirectX 10/11/12 and Media Foundation can do. Secondly, because DirectX 9 is slowly fading out of active use, writing/optimizing drivers for DX9 is no longer a priority. On newer devices, DX11 drivers will be faster/more mature.
So at my job interview, they told me about DX9 and such, and that there has been an unfinished attempt to move to DX11 by my predecessor. They asked if that should be picked up again. I answered: "You should have done that 10 years ago. DX9 dates back to 2002! Even DX11 has been around since 2009, and DX12 has been out since 2015."
So first thing I did was to get the existing DX11 code into a working state. Then I implemented Media Foundation video encoding and decoding, and currently we are getting more performance and are using various features that would not have been possible without DX11+MF.
One particularly cool feature is that DX11 doesn't require a window or desktop at all. So you can execute code directly from a service. This allows us to execute DX11 code from an IIS webserver, and send an MP4 stream directly to your browser. Makes for all sorts of interesting cloud-based solutions that were never possible before.
Moral of the story: you need to find a happy medium between using old and 'reliable' code/APIs and keeping up with developments.
I think what Windows does is not necessarily bad in itself... It holds on to old APIs for TOO long. But application developers should be more like the linux people: update your code every now and them to make use of new features.
If you just ignore new APIs again and again, eventually you'll be too far behind (like my predecessor who didn't write the DX9 code, and wasn't familiar with DX11 either, so he couldn't make the transition. Whoever wrote the code has been gone for so long that I couldn't even track it down, because that part of the code's history had been lost during one of the various transitions to new version control systems).