For me every year is the year of Linux on the Desktop, and servers, and Raspberries, etc.
I don't care much about systemd-vs-sysv and gnome/kde/whatever-desktop-sucks debates, other than for amusement, because I use the desktop manager I like (currently i3wm) and the init system I like (currently sysv), thanks to my distribution letting me choose between them.
Same for every other component, almost everything is replacable by a plethora of options to choose from.
Now, there are a few things that I would complain about:
Graphics drivers always have been a total mess, especially Nvidia drivers are split up into so many packages, same, don't let me start about getting CUDA or OpenCL working.
There's another issue with the way package management is done, which may actually be the main cause for older software refusing to work.
You generally only have the latest version available of any package in you package manager. Newer versions of shared libraries may be incompatible with older software, which then may refuse to compile.
On Windows they simply ship the needed dll's with the software, outdated dll's if needed. On Linux you generally only have the newest versions available, if you try older versions on a new system you quickly end up in dependency hell.
How could this be improved?
Maybe we could experiment with a package managing concept that does not forget about older versions, but references all historical versions instead.
An application would then be able to pull the exact version of any shared library it needs.
Package descriptions nowadays already contain all the dependency declarations, sometimes they even declare the exact versions of shared libraries, so it wouldn't even be a major change to existing packaging solutions.
A drawback would maybe be that storage requirements would be much higher for servers hosting repositories, as you would have to host all versions of a package, instead just the latest.