<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div>This may be a pipe dream, but XDG is the best place I know to propose something like this:<br><br></div>We need a new mechanism for distributing end-user applications on free desktop platforms.<br><br></div>Traditionally, distro packaging is considered the right way to distribute applications. However, I believe that distro packaging is designed to distribute libraries, frameworks and such tools for developers and sysadmins, not end user applications. Specifically:<br><br></div>* Distro packages are almost always out of date. Even with 'quick' six month release cycles, the gap between the developer making a release and users getting it is measured in weeks or months, when we (application developers) want it to be hours or days.<br></div>* More broadly, distros put a layer between developers and users. That has some benefits, but with end user applications we generally want to engage more directly with the user, to present the image we choose and get feedback directly.<br></div><div>* You need to provide different instructions for each distro - like this download page for 0AD: <a href="http://play0ad.com/download/linux/">play0ad.com/download/linux/</a><br></div>* If you want to package your application yourself, you realistically need to deal with at least .deb and .rpm package formats, and if you care enough about smaller distributions, there are still more formats. LSB attempted to declare RPM the standard, but that hasn't really worked.<br></div>* On most distros, packages can only be installed as root, so to get even some trivial game working, you have to hand it the keys to the kingdom.<br><br></div>As a result, on many application webpages, the download button gives you a .tar.gz file - e.g. Firefox, Eclipse, Pycharm and Zotero. That avoids all of the issues listed above, but it can't add things to $PATH, install .desktop files, set up automatic updates, and so on, unless the application's own code completes its installation when it's first run. And if users are as lazy as me, they end up with applications 'installed' in their Downloads folder, which doesn't seem quite right.<br><br></div>Still other applications try to rely on language specific packaging tools. My background is in Python, and I've seen applications recommend you install them with pip. Python packaging tools are pretty bad even for the things they're supposed to do, and distributing applications is not one of those things.<br><br></div>So, I would like a mechanism whereby:<br><br></div>1. Developers can publish applications without going through distro maintainers. This could either be self-hosted installer files, or a centralised location where you're free to claim a name (like PyPI, CPAN, etc.)<br></div>2. When the user installs an application, it can set up command line tools on $PATH and .desktop files to launch the application from the GUI.<br></div>3. Applications can be installed into ~/.local without giving them root privileges<br></div>3.a For bonus points: capabilities based security, because root is not the only thing we care about: <a href="http://xkcd.com/1200/">http://xkcd.com/1200/</a><br></div>4. The installer should be able to specify dependencies on system packages for any relevant packaging systems, because the developer shouldn't be forced to bundle dependencies any more than they should be forced to unbundle them.<br></div>5. A user with an application installed should be notified of updates, without every application having to implement its own update checker and downloader.<br></div>6. Ideally, all of this should be an addition to a tarball, so sites can offer a single .app.tar.gz file, and users without the installer mechanism can extract the files and launch the application manually.<br></div><div>7. This should, of course, be distro and desktop independent. We definitely can't afford to fragment it by GNOME vs. KDE, or Debian vs. Red Hat. Applications should have *one* button to download for Linux.<br></div><div><br></div>I am working on an end-user application, and I will try to build something like this and test it by distributing that (glossing over 3a and probably skipping 5 for the first iteration). Feedback, offers of help, and telling me about similar things that already exist are all welcome.<br><br>Thanks,<br></div>Thomas<br><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>