Zero Install

the antidote to app-stores

Roadmap

This document explains what we've done and where we're going with future versions.

  1. History
  2. Current and future plans

History

This is a quick overview of the major features added to Zero Install. It focuses on features available to feed authors, who want to know which features they can safely use while supporting users on older distributions.

2005 (versions 0.1 to 0.17)

Zero Install was created in 2003 as a distributed network filesystem. In 2005, it was redesigned to the current "injector" system. Feed files from version 0.2 can still be run using the current (0.51) version.

2006 (versions 0.18 to 0.24)

Major features added in 2006:

  • Support FTP downloads of archives.
  • XML signatures (not just plain GPG).
  • The <recipe> element allows combining multiple archives.
  • Restrictions on suitable versions of dependencies, using the <version> element.
  • Support for other secure hashes (not just sha1).
  • Support for extracting from RPM, Debian, Autopackage, zip and Cabinet format archives.
  • Compile a binary from source.
  • More flexible version numbering (e.g. "1.2-post7").

2007 (version 0.25 to 0.31)

  • Extracting from .tar.lzma and .tar (uncompressed) archives.
  • Background checking for updates.
  • Automatic secure sharing of downloads.
  • Bug reporting.
  • Native package manager integration for Debian and RPM systems.
  • Implementation bindings (<environment> directly inside <implementation>).

2008 (version 0.32 to 0.37)

  • Mirrors for feeds.
  • Manage applications added to the menu (GNOME and KDE).
  • Multi-arch support

2009 (versions 0.38 to 0.43)

  • Support for Fink (Mac OS X).
  • Easier compile-from-source ("Automatic" mode).
  • Key information server.
  • <needs-terminal> supported.
  • Downloading feeds over HTTPS.

2010 (versions 0.44 to 0.51)

  • Download progress bars in console mode.
  • Canonical CPU type names.
  • Gentoo, Slackware and FreeBSD Ports integration.
  • Apple dmg-format archives can be used on Mac OS X.
  • Specify distribution name in <package-implementation>.
  • Support for multiple hash algorithms for a single implementation.
  • Added 'local-path' attribute.
  • SAT solver handles complex version requirements.
  • Select implementations based on user's locale.
  • Support for PackageKit (prompt the user to install distribution packages where necessary).
  • Initial Windows support.
  • The <command> element allows passing extra arguments.
  • The <runner> element allows specifying the interpreter.

2011 (versions 0.52 onwards)

Current and future plans

This is a rough roadmap. Times are just estimates, subject to people being able to work on things. Volunteers welcome!

Version 1.6 (Jan 2012)

  • HTTP connection pooling, rate limiting and DNS caching

Version 2.x

More flexible <recipe>s
e.g. applying patch files, unpacking nested archives.
An app-store style interface
To help people get started quickly with 0install, it would be good to have a simple, familiar "app-store" user interface. Of course, without restricting people to just those applications.
Feed search
Add a free-text search engine for names and descriptions of locally cached feeds, to enable quick off-line searching.
Add missing features to Windows version
e.g. 0alias and other features available in the Linux version
Custom bug-report address
A feed should be able to specify where bug reports are to be sent. Currently, they all go to the 0install project itself.
Caching of solver results (for speed)
On less powerful machines (e.g. OLPC laptops) we can save CPU time by remembering which versions we selected rather than recalculating every time a program is executed.
Support for services
e.g. a 0service command that integrates with systemd
More sandboxing demos
Show integration with e.g. Rainbow, Plash or LXC, in addition to the current E support.
Better desktop integration
e.g. a better Firefox plugin, XFCE support.
wxWidgets GUI for Mac and Windows
Having a GUI that uses wxWidgets would make 0install much easier to use on Mac OS X and Windows, and would fit in better with the native look-and-feel.
Automatic cache cleaning
0install can keep all versions of all libraries on disk at once. This is useful, but there should be a way to clean out ones that aren't needed any more to free up disk space. Individual versions can be removed easily enough via the cache explorer, but it should be more automatic, a bit like "apt-get autoclean" or deborphan. In particular, we need a way to remove a version which was shared between multiple users safely (i.e. only remove it once no user requires it).
Managing instances (configurations/profiles) of programs
0install currently only manages code, not configuration. It is assumed that programs look in ~/.config and similar places for this. 0install should have support for multiple instances (configurations / profiles) for any program. This will be needed for sandboxing anyway.
Mirrors for archives
If a download site is unavailable, switch to another mirror. Support sf.net mirror system, custom mirror systems, coral cache, etc. May need to show sponsor logos during the download. See also: Metalink
Lazy dependencies
Support dependencies that are only downloaded when needed. For example, ROX-Filer's options box has a button to launch the MIME-Editor application. ROX-Filer should be able to depend on MIME-Editor in its feed, without requiring MIME-Editor to be downloaded before ROX-Filer can be started.
Plug-ins
It should be possible to add additional interfaces to a program's dependencies list. For example, you could add the interface for a French dictionary to a word processor to let you spell-check French documents. This would usually require some support from the application itself. A plug-in is a more general type of optional dependency; one which isn't listed in the main feed file at all.
More meta-data
Mailing list address, release notes, etc.
Peer-to-peer downloads
The tricky bit about P2P is normally the free-text searching, but we already know the secure hash of the manifest we want, and when we get it we have the hash of every file we need, so this should be easy! The idea is that if someone on your local network has already downloaded a program, you can get it from them automatically. See 0share for current experimental version.
Binary patches
We have the secure hash of the currently-cached versions, so we can check that they're unmodified. In that case, we could just download a delta to the next version rather than getting everything again. 0publish should create these deltas automatically. Rsync may also be an option for some sites.
Sandboxing
Provide better integration with sandboxing systems such as Plash. Sandboxed software must still be able to run other programs through Zero Install, adding them to the cache as needed in a secure fashion. EBox shows how this integration can work.

Other possible features

Kiosk mode
The system administrator can restrict what software users can install using Zero Install (white-list interface URIs or trusted public keys).
Third-party sign-off
A distribution can sign an upstream release ("Certified for use with SUSE 10.2", etc). Users can set a policy to run only approved versions by default. Or, a third-party could provide additional input to the hints box (we already provide the "Unreliable hints database", but a commercial organisation could offer a real service).