The Zero Install system

Dr Thomas Leonard [ contact | GPG public key | blog | donations ]

Roadmap

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

Despite its pre-1.0 version number, Zero Install is currently used by a large number of people, as it is the preferred method of installation for ROX, and is generally quite robust.

  1. File format stability
  2. Completed features
  3. Features planned for 1.0
  4. Other possible features

File format stability

Although we have not reached the 1.0 release, the injector has a very good record of backwards compatibility. In fact, you can run Edit with the XML interface file used to demonstrate version 0.2 of the injector (released 2005-03-14) on the very latest (0.22) version of the injector. The only incompatible change was between versions 0.1 and 0.2! Of course, it doesn't work the other way; interfaces designed to work with later versions of the injector will use features not available on older versions.

Completed features

This is a quick overview of the major features added to the injector. See the release notes for a much more detailed list.

Dependencies, graphical interface, user-set policies
Since 0.1
Updating over HTTP, GPG signatures
Since 0.2
Pass options to programs
Since 0.5
Create alias scripts
Since 0.7
Automatic public key fetching
Since 0.8
Allow symlinks
Since 0.10
RPM packages of the injector
Since 0.13
Local interfaces and adding additional remote feeds
Since 0.14
Support for architecture-dependant binaries
Since 0.15
Additional feeds in interfaces
Since 0.17
Support FTP downloads of archives, XML signatures and extracting from RPMs
Since 0.18
Icons for interfaces, graphical cache explorer, and 0publish command to help with creating interface files
Since 0.19
Recipes
Combine several archives to create a single version. Since 0.20
Restrictions on suitable versions of dependencies
Since 0.20
Extracting from Debian packages
Since 0.20
Support for other secure hashes
Since 0.20
Support for extracting from Autopackage and zip archives
Since 0.21
Secure local copy (checking the digest)
Since 0.22
Compile a binary from source
If a binary doesn't exist for your platform, the injector should be able to compile one from source for you. This should include downloading any necessary compilers, headers and build tools using Zero Install. The resulting binary should come with an automatically-generated interface file, ready for publishing the binary on the web. The archive should also include a provenance file listing the exact versions of dependencies used to build it, allowing it to be recompiled in the same environment later. Supported since version 0.23.
More flexible version numbering
The injector only supports a list of dot-separated integers. It would be useful to support some common modifiers, e.g. "1.0-pre1", "2.0.0-rc3", "5-post2". Since 0.24.
Extracting from Cabinet packages
Since 0.24
Extracting from .tar.lzma and .tar (uncompressed) archives
Since 0.25
Background checking for updates
Instead of making the user wait while we check for updates, start the program immediately and check in the background [ screenshot ]. Since 0.26.
Automatic secure sharing of downloads
If two users ask to run the same version of a program or library, it is only downloaded and stored once. The users don't need to trust each other; only genuine unmodified copies can be shared. See the sharing page for details. Since 0.26.
Bug reporting
Generate useful information for bug-reports, since we know exactly which version of each library was being used. 0compile already supports this if a build fails, but we could do something similar when running programs, too. Right-click on a component in the GUI to use this. Since 0.26.
Native package manager integration
If a Zero Install package requires a library, and the user already has a suitable version installed with another system (APT, RPM, etc) then the injector should be able to use that version. This would save unnecessarily downloading and storing a second copy of the library. The user should still have the option to get the library through Zero Install if they want though (e.g., if they want to try a newer version). See Distribution Integration for details. Since 0.28.
RPM integration
As above, but for RPM. Since 0.31.
Implementation bindings
In addition to attaching bindings to dependencies (which tell Zero Install how to tell a component about where its libraries are), it is now also possible to attach bindings directly to implementations (to tell them where they themselves are located). This simplifies packaging certain programs. Since 0.31.
Mirrors for feeds
Run a public mirror that periodically fetches the latest versions of feeds and makes them available from a single site, so that 0launch will download from the mirror if the upstream site becomes unavailable. Since 0.33, 0launch will download from the roscidus.com/0mirror mirror site if a feed takes longer than 5 seconds to download.

Features planned for 1.0

Automatic cache cleaning
The injector 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).
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
Optional dependencies
The interface file format only allows 'required' dependencies at present. It should also support the 'recommended' (optional and selected by default) and 'suggested' (optional and unselected by default) relationships.
Display release notes
The injector tells you that a new version is available, but it doesn't say what changed! At the very least, it should provide a link to the program's release notes on the web. [ Discussion ]

Other possible features

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 interface file at all. [ Discussion ]
More meta-data
License terms (and warn about incompatible licenses?), mailing list address, where to send bug reports, 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. [ Discussion ]
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. [ Discussion ]
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 (the injector's GUI contains a built-in "Unreliable hints database", but a commercial organisation could offer a real service).
Sandboxing
Provide better integration with sandboxing systems such as Plash. It should be possible to trust keys only in a limited way, so that such software must run in a sandbox. Sandboxed software must still be able to run other programs through Zero Install, adding them to the cache as needed in a secure fashion. [ Discussion ]