Zero Install

Zero Install: Comparison with other systems

This matrix shows some desirable features in a packaging system, and shows which systems provide them. Obviously, these things tend to be a bit biased (both in terms of what features are chosen for comparison, and of what is considered to be a 'pass') but it should give the general idea.

Feature Source tarball APT Autopackage Klik Java WS Zero Install
Users can install software Yes No Yes Yes Yes Yes
Dependencies handled automatically No Yes Yes No Yes Yes
Automatic upgrading No Yes No No Yes Yes
Libraries shared between programs Yes Yes Yes No Yes Yes
Downloads shared between users No No user downloads No No No Yes
Multiple versions coexist Yes No No Yes No Yes
Uninstall Sometimes Yes Yes Yes (cache) (cache)
Digital signatures No Yes No No Only one Yes
Conflict-free No No No Yes Yes Yes
Decentralised Yes No Yes No Yes Yes
Non-root install of system Yes No Yes Yes Yes Yes
All programming languages Yes Yes Yes Yes Only Java Yes
Supports sandboxing No No No No Yes Yes
Usable when off-line Yes Yes Yes Yes Yes Yes
Thousands of packages available Yes Yes No Yes Unknown No

Explanation of features

Users can install software
A user without root privileges can install software using this system (without unreasonable extra effort).
Dependencies handled automatically
If a program requires some library to function, the system will locate, download and install the library too.
Automatic upgrading
The system can check for and install upgrades automatically or at the operator's request. User does not have to perform a full install operation manually on each package.
Libraries shared between programs
If two programs use the same library, the library is only downloaded and stored once. Upgrading a library will benefit all programs that use it.
Downloads shared between users
If two users install/use the same program, it is only downloaded once and stored once.
See Sharing for how to set this up with Zero Install.
Multiple versions coexist
Two versions of a program or library can be installed at the same time, and the user can choose which one to run.
Uninstall
Programs can be cleanly removed from the system easily (reversing the effects of the install).
Signatures
Software comes with a digital signature, which is checked automatically by the system.
Note: Java Web-Start requires all components to be signed with the same key.
Conflict-free
If program A requires an old version of a library, and program B requires a new version, A and B can both be installed and used at the same time. The system will never refuse to install one program because some other program is installed.
Decentralised
A program packaged for this system can be installed easily, without having to be in some special centralised repository.
Notes: Debian allows extra repositories to be added, but this is a manual step, requires root access, and is a considerable security risk.
Non-root install of system
The packaging system itself can be easily installed without administrator privileges, and the normal selection of software will be available.
All programming languages
All types of program can be accessed using this system.
Supports sandboxing
If you have a way of running an application in a sandboxed environment (eg, a Java virtual machine), then the installation system will let you install and run the program without forcing you to run any of the downloaded code outside of the sandbox.
The easiest way to get sandboxing with the injector is to run it twice: once in download-only mode with write access to the cache, and then again in offline mode with read-only access to actually run the program. To control access, you can use a program such as Plash, e.g.:
plash$ !!0launch --download-only 'http://0install.net/2006/interfaces/0publish'
plash$ 0launch --offline 'http://0install.net/2006/interfaces/0publish' + ~/.cache ~/.config
This downloads and runs the 0publish program (which will display its help message) without granting it write access to anything. Even if it contained a bug which made it try to delete all your files, plash should prevent it from doing any harm. If you use it to process a file, you can give it write access to just that file by using => in the normal plash manner. In future versions, this should all be made automatic, so you don't have to run 0launch twice.
Usable when off-line
Once a program has been installed, the program can be run again while disconnected.
Thousands of packages available
The system is widely adopted.

See also