Linux Desktop, Package Management, and Commercial Software

Say I’m a company considering porting my program to linux. I find I’m entering a world where everything is streamlined for a different kind of software. The “right” way to install software is through the package manager, but the package manager expects software to come from centralized sources which “package” software developed by others, and to make it worse, different versions of linux use the same software packaged by different people and managed by different package managers. There’s no practical way for me to wedge my way into that system. I have a few choices:

  1. I can take over the work of the package maintainers and set up repositoriesĀ for all the major distros for my program and provide people with directions for how to add a repository to their package manager. (which isn’t exactly smooth sailing for a non-power-user, and which is also a lot of work for me)
  2. I can provide package file downloads for the major distributions, losing the package managers ability to keep track of updates, but at least that way having a link to a file people can download and then just click in their file browsers to install. (still quite a bit of work, but at least it’s easy for my users)
  3. I can provide a self-extracting installer, completely ignoring the package manager and installing to a directory owned by the user, although by that mechanism I also run the risk of having dependency issues. I don’t mention installers that ignore the package manager and install system-wide… cause that’s a no-no. (fairly easy, but can be frustrating for a user if dependency issues crop up)

All of these solutions have a tendency to build up a lot off cruft somewhere in the system if commercial software becomes seriously used on the linux desktop, which it will have to be for linux to become a serious contender in the desktop market. So, if linux is ever to succeed as a desktop OS, we need to have an elegant, simple, and broadly accepted solution for installing applications (by which I mean programs with minimal integration into the system) which is capable of allowing all of the following:

  1. Unprivileged install to user-owned area, while possibly pulling in dependencies for the entire system
  2. Privileged install to entire system
  3. Dependency integration (one way; apps can depend on OS level stuff, but not the other way around) between it and the OS-level package managers for the different distros
  4. Repository support, which needs to be flexible enough to support many ways of distributing content such as bittorrent (since some applications can be BIG), able to handle large numbers of small repositories well from a use model point of view, and easily integrated into browsers and such so that people can provide “install links” which add the repository and install the package
  5. Installation from physical media which is also easily integrated into current GUIs and such
  6. The ability for programs to integrate with their own update procedures through this system, since some programs cease to function altogether when they are not up to date (clients for certain large network applications, for example) so they need to automatically check that they are up to date when they are run

In order to accomplish this, a few things need to be well defined:

  1. An interface to the OS level package manager that any implementation of this system will use, which will need to include a lexicon of names and common expectations for OS-level software that can be depended on, since names are not the same across distros
  2. A common format for repositories, both on physical media and on the internet

If those 2 standards can be agreed upon, then implementations of such a system can compete for user approval in the usual manner of open source software, while requiring application vendors to supply only a single object to their customers regardless of distro or implementation of this higher-level system.

Leave a comment