> The mindset that _I_ object too, strongly, is the parrot-talk about how linux will never succeed.
Linux has already succeeded to a large extend in servers, routers, DVRs, and phones. Linux could also succeed on the desktop with some adjustment. Some things that are required:
- No crazy desktop changes in stable versions. I do like GNOME 3 and Unity, but the changes should've been more evolutionary.
- A stable ABI that is shared between all Linux distributions.
- An easy way to install third-party software. As easy as drag and drop. I know that this is technically possible today, but it requires the previous point plus maybe something like fat binaries. Also, the process of creating an application bundle should be easy.
- The core of the system and third-party applications should be decoupled more. It should be easy to continue running, say Debian Stable or Ubuntu LTS, while being able to upgrade your applications without upgrading the base system, X11, toolkits, or the desktop environment.
I certainly believe that Ubuntu's PPAs (and SUSE's build system) have made live a bit easier for everyone: as a developer I can simply put a source package in the archive, and packages are built for i386 and amd64, and it is relatively easy to maintain packages for multiple Ubuntu versions. But it is still not trivial for a non-expert user to add PPAs, let alone mix them (since multiple PPAs may provide different versions of the same dependencies).
As a developer, I also have too many moving targets. E.g. one piece of software that we wrote and provide requires Berkeley DB XML. DB XML is not available in most Linux distributions, and requires db(++), xqilla, and Xerces. Some distributions provide the versions of db, xqilla, and xerces that DB XML requires, there we "only" need to roll our own packages for DB XML in addition to our own software. On older distributions the dependencies are too old and newer distributions provide incompatible versions of xqilla. There we have cascading dependencies that we need to roll our own packages for. So, on modern distributions, we have to (at least) roll packages for our own software, DB XML, and xqilla. Not only is this a big hassle, package maintenance becomes as much work as software maintenance, there is a growing risk of conflicts with packages from other people's repositories. In addition to that, our users have Ubuntu, Debian, and CentOS in many different versions (Ubuntu being particularly ugly with their half-year releases) and platforms.
In contrast to that: on MacOS I just build one version on OS X 10.6 and it works for every OS X user. On Windows, I compile on any version with Visual Studio, and it works on all versions since Windows 2000. The result is that we pretty much ignore Linux, except for Ubuntu, and tell users to compile the software and some dependencies themselves on other distributions.
Given enough time, I'll probably roll a Linux version that includes all library dependencies and provide a wrapper script that sets LD_LIBRARY_PATH. But it would help tremendously if there was something standardized along the lines of an application bundle *and* a standardized ABI, so that we do not have to copy every library that the application depends on into that bundle (which in the case of the application discussed above would amount to including 50 libraries, or 76MB). Another possibility would be to statically link the application, but that has its own problems (e.g. no dlopen()).