Zero Install Injector Changelog

What's new in Zero Install Injector 2.8

Nov 13, 2014
  • 0install gained support for source dependencies (where one program depends on the source code to another).
  • The OPAM OCaml package manager is now available through 0install.

New in Zero Install Injector 2.6 (Jan 21, 2014)

  • 0install 2.6 completes the transition from Python to OCaml. There is no remaining Python code in 0install and, therefore, no need to have Python installed in order to build or run it. However, there are some problems using the GTK plugin on OS X - see the thread for details. There's also another blog post in my series for people wanting to get up to speed on OCaml: Polymorphism for Beginners.

New in Zero Install Injector 2.0 (Mar 6, 2013)

  • This version enhances the XML package metadata syntax, allowing more precise specification of dependencies.
  • Support for using distribution-provided packages as dependencies has been extended and now covers Arch Linux, Cygwin, Darwin, Debian, Fink, FreeBSD Ports, Gentoo, MacPorts, Mint, openSUSE, Red Hat, Slackware, and Windows.
  • The 0install software now supports apps, an easier way to manage 0install applications, improved diagnostics when no compatible versions can be selected, improved usability, and better support for use on headless servers.

New in Zero Install Injector 1.16 (Feb 28, 2013)

  • Running an app when some previously selected packages are no longer present now forces an update in the foreground.
  • Arch-style Java version numbers are now supported.
  • The Makefile now copes with Arch's Python naming.
  • Various minor bugs were fixed.
  • This is a 2.0 release candidate.

New in Zero Install Injector 1.15 (Feb 14, 2013)

  • Requirements can now be restricted to a particular distribution, allowing e.g. MacPorts Python libraries to specify that they work only with MacPorts Python.
  • Environment variables can be expanded into multiple arguments, which is useful for passing options. .NET Framework installations are now detected on Windows.
  • The diagnostics displayed when no selection is possible have been further improved to show the restrictions that prevented the selection of each candidate.

New in Zero Install Injector 1.13 (Nov 10, 2012)

  • We have added much improved solver diagnostics to 0install - instead of just telling you which components it failed to select, it now explains why none of the versions was suitable. 0install 1.12.1 for Windows was released, bringing over several new features from the pure-Python version and fixing a number of bugs. Discussion about ABI annotations (e.g. for C++ programs) continued on the list.

New in Zero Install Injector 1.12 (Sep 26, 2012)

  • Support was added for OS-specific dependencies (e.g. for dependencies only needed on Windows) and for constraints in native package implementations (e.g. Debian's python3-gi package cannot be used with Python 2).
  • "0install man" allows the man command to work with 0install applications.
  • "0install digest" now has an option to display the manifest.
  • A bug in the PackageKit support which meant it sometimes failed to detect candidate packages was fixed.

New in Zero Install Injector 1.10 (Jul 27, 2012)

  • This version adds support for Python 3, PyGObject, and GTK 3 (while continuing to support Python 2, PyGTK, and GTK 2).
  • A new directory naming scheme supports cmake and other programs which can't cope with "=" characters in pathnames.
  • The new element allows adding version constraints without creating a dependency.
  • The new recipe step allows renaming files and directories when unpacking. Various minor bugs have been fixed.

New in Zero Install Injector 1.6 (Feb 13, 2012)

  • Arch Linux native packages can now be used as dependencies.
  • "0install update" informs the user if a newer version exists but was not selected for some reason.
  • A workaround was added for Python's lack of SSL hostname checking.
  • Various minor bugs were fixed.

New in Zero Install Injector 1.3 (Sep 19, 2011)

  • There's a new guide to Using Zero Install as a plugin manager for your application

New in Zero Install Injector 1.2 (Jul 25, 2011)

  • If a program needs to run some command (for example, "make") then this can be specified using the new executable-in-var or executable-in-path binding types.
  • A performance problem in the GUI with packages with many dependencies (more than 100) was fixed.

New in Zero Install Injector 1.1 (Jun 27, 2011)

  • adding support for optional dependencies, custom path separators in environment bindings and a new command for calculating digests easily.

New in Zero Install Injector 0.54 (Apr 11, 2011)

  • Fewer key confirmation boxes
  • Support for Ruby gems and an important bug-fix for the support.
  • The Mac OS X binary package is much improved.
  • 0compile 0.23 has been released with support for compiling Java programs.
  • Improved cache explorer and feed search features are under development.

New in Zero Install Injector 0.53 (Mar 14, 2011)

  • New keys can be approved automatically if known to the key-info server.
  • Support for the Ruby gem archive format was added.
  • The rules for finding the best language match have been improved.
  • A bug in the new feature was fixed.

New in Zero Install Injector 0.51.1 (Dec 8, 2010)

  • The new work has now been merged. This is intended to replace 'main', 'test' and similar attributes with a more flexible and generic system. It allows passing extra arguments to commands (including passing dependencies), having command-specific dependencies, and being able to specify an intepreter in a cross-platform way.

New in Zero Install Injector 0.50 (Aug 22, 2010)

  • Installing to your home directory is now simpler.
  • A new --show option provides an easy way to see where downloaded packages are stored on disk.
  • The new "alias:prog" syntax can be used as a short way to specify a URI.
  • The key confirmation process is simpler in the case where the key is known to the key-info server (and harder when it isn't).

New in Zero Install Injector 0.49 (Jul 3, 2010)

  • NEW FEATURES:
  • PackageKit integration: if we need a distribution package that isn't installed, try to install it using PackageKit (Aleksey Lim, Thomas Leonard and Anders F Bjorklund).
  • Include selections XML in bug reports. This allows the receiver to try to reproduce the problem using the same versions of everything.
  • CHANGES:
  • The ~/.config/0install.net/injector/user_overrides directory is now deprecated. It is replaced by two directories: "feeds" and "interfaces", reflecting the fact that these are separate concepts (feed information includes the user stability ratings for versions in the feed; interfaces settings contain the locations of extra feeds).
  • We now warn about and lt;package-implementation>s with dependencies. http://rox4debian.berlios.de/0install/Python-Wnck.xml uses this (probably accidentally).
  • BUG FIXES:
  • Fixed handling of 'extract' attribute in unpack_archive_over. Reported by Anders F Björklund. The old openttd feed was relying on this bug; a newer feed is available as http://repo.roscidus.com/games/openttd
  • When reading distribution version numbers, replace underscores with dashes (Anders F Bjorklund).
  • Unittest fix: temporary directories weren't getting deleted afterwards. Also, stopped the unittests from running the tests in the abstract base class.
  • Various epydoc fixes.
  • Propagate errors correctly from Selections.download_missing().
  • Updated GUI to avoid deprecated API. Policy.recalculate didn't update the display properly for asynchronous downloads. Use solve_with_downloads instead.
  • Test against Python 2.7 too. Fixed a warning about Python 3 compatibility.
  • Removed out-of-date check that 'id' contains '='.
  • Fixed parsing of Ports package names (Anders F Bjorklund).
  • Fix bug that made user selected per feed stability not work (Rene Lopez).
  • PYTHON API:
  • Model information about distribution packages as separate feeds. Before, reading in a feed containing a and lt;package-implementation> element would expand this to a list of packages provided by the distribution's package manager (installed or not) and include them in the feeds 'implementations'. Now, feed with such an element has a corresponding "distribution feed", which is the feed's URL prefixed with "distribuion:". This feed contains the distribution packages. Initially, it contains only installed packages. After updating it, it may also contain candidate (uninstalled) version. This has two advantages: the loaded representation of feed no longer depends on the host distribution, which is cleaner, and fetching candidates can be done asynchronously (needed for PackageKit).
  • fetch_candidates doesn't have to be async.
  • Added update_local attribute to solve_with_downloads. If set, feeds starting with 'distribution:' are refreshed but others aren't. The idea is that these feeds represent information from a local package manager (needed for PackageKit).
  • Added writer.save_feed. Before, information for feeds and interfaces went into a single file in "user_overrides". Now, feed information is saved under "feeds" and interface settings go under "interfaces". The old files will be loaded if the new ones aren't found.
  • distro.py removes a leading "epoch:" from all version numbers.
  • TRANSLATIONS:
  • Many more Python unicode work-arounds, so that more errors report useful information instead of complaining that the error can't be displayed because of encoding issues.
  • Use "xgettext --sort-by-file" for diff-able translations (Anders F Bjorklund).
  • Allow localized summary/description (Anders F Bjorklund).
  • Translate some missing strings (Anders F Bjorklund).
  • Updated Swedish translation (Anders F Björklund).
  • Update Spanish l10n (Rene Lopez).
  • Make strings use named arguments for better i18n (Rene Lopez).
  • WINDOWS SUPPORT:
  • Replaced x.startswith('/') with os.path.isabs(x) (Bastian Eicher).
  • Added support for Windows in ro_rmtree (Rene Lopez).
  • Find basedir/XDG equivalents on Windows (Bastian Eicher).
  • Replaced os.uname() with platform.uname() (Bastian Eicher).
  • Replaced locale.LC_MESSAGES with locale.LC_ALL (Bastian Eicher).
  • Replaced hard-coded ':' as path separator symbol with os.pathsep (Bastian Eicher).
  • Always use '/' in manifests, even on Windows. Reported by Bastian Eicher.

New in Zero Install Injector 0.48 (May 31, 2010)

  • NEW FEATRUES:
  • Choose implementations by locale (Aleksey Lim). A feed can now list a selection of implementations for different languages and 0launch will choose the right one automatically.
  • Added SlackDistribution, allowing 0launch to detect installed native Slackware packages (Anders F Bjorklund).
  • If a distribution package is selected, prompt the user to install it. Before, Zero Install would list available (but uninstalled) distribution packages but would never select them. Now they can be selected, and the user is told to install them using their distribution tools. This is based on code in the PackageKit patches from Aleksey Lim. Actual support for PackageKit is being worked on, but didn't make it for this release.
  • CHANGES:
  • Reverted SVG icon support. GDK's SVG loader segfaults even on non-malicious XML (e.g. an HTML 404 page).
  • Do not compare full version strings if one of two implementaions is native (Aleksey Lim). For example, we no longer consider '3.1-5' to be newer than '3.1' if one is a distribution package and the other isn't.
  • API:
  • Allow a custom 0launch command for .desktop files (Aleksey Lim).
  • Use Feed rather than Interface in many places. Originally, we only had Interfaces, which included the XML. Then we split this into Interface for configuration (e.g. user's preferred stability policy) and Feeds (for the XML). Before, iface_cache only cached interfaces (each of which contained a single feed). That meant that if you only wanted a feed, we had to make up a dummy interface for it. This patch updates the terminology in many places and passes around Feed objects where it makes sense. To see if you're using a deprecated API, uncomment the "warnings" lines in model.py.
  • Refactor canonicalize_os (Anders F Bjorklund).
  • BUGS:
  • Be stricter about detecting old-style IDs. Only match algorithms known to old versions, not just anything with an "=" in it.
  • Discard stderr from "dpkg-query -W". Avoids "No packages found matching" warning message.
  • Import ngettext explicitly. Assumed that it was in builtins, which fails when used as a library,
  • Don't translate warnings: Python's warnings module doesn't support Unicode.
  • Allow missing configuration values. This is useful to allow the administrator to set some values in /etc/xdg while leaving others with their built-in defaults.
  • Fixed "'NoneType' object has no attribute 'version'" error. Reported by Aleksey Lim.
  • locale.bindtextdomain isn't portable (Anders F Bjorklund).
  • Use the canonical_machine function to convert RPM and Slackware machine types (Anders F Bjorklund).
  • Make the GTKBuilder files fully compatible with GTK 2.12 (Rene Lopez). Reported by Anders F Bjorklund.
  • Open '.manifest' files in binary mode (Rene Lopez). For Windows.
  • Cope with the distribution cache changing while we're running. DistributionImplementation.installed rechecks, in case the user installs the package manually while 0launch is running.
  • Use new Cache class for dpkg cache. Also, only include "installed" packages. Previously, we counted a package that had been installed and then uninstalled as "installed".
  • More encoding fixes for error messages.
  • Hide "Open cached copy" for package implementations (Aleksey Lim).
  • Fixed some bugs spotted by pychecker. Two missing imports.

New in Zero Install Injector 0.47 (May 3, 2010)

  • NEW FEATURES:
  • Added PortsDistribution (for FreeBSD) (Anders F Bjorklund).
  • Added support for Apple disk image (.dmg) archives (Anders F Bjorklund).
  • Support svg feed icons #2983195 (Aleksey Lim).
  • CHANGES:
  • Highlight the selected version in bold in the GUI, rather than moving it to the top of the list. This avoids the versions jumping around in a confusing way as you change the settings. Closes #2982862 (reported by Aleksey Lim).
  • Allow passing command line arguments the unittest.main. This allows you to say which test cases you want to run. Closes #2982815 (Aleksey Lim). You can also say, for example, "./testdistro.py --help" to see what options are available.
  • BUG FIXES:
  • Selections.download_missing now ignores package implementations. There's no way to put a distribution package back to a given version, so just ignore them instead of giving an error. The error was: File "../zeroinstall/zerostore/__init__.py", line 246, in lookup_any: AssertionError
  • Set machine for Gentoo native packages #2982836 (Aleksey Lim).
  • Clear USD XDG_CONFIG_DIRS when running tests. Avoids system's configuration settings interfering with them.
  • Record correct machine type for distribution packages. Before, we used "x86_64" for amd64 packages and "*" for everything else, including 32-bit binaries (which could then be selected with 64-bit binaries).
  • Allow passing the location of pkgcache to DebianDistribution. Avoids having the unittests try to use the host's cache, giving an error on non-Debian systems. Reported by Aleksey Lim.
  • TRANSLATIONS:
  • Run unit-tests in the "C" locale. This prevents testing translation support, but the tests didn't work because they match on error message text.
  • Cope with non-ASCII Python exceptions of type "str". Python's IOException has 'str' type, but may contain UTF-8 sequences. This causes an error when trying to report the error if the message template is unicode.
  • If we don't find translations in the system path, try a relative path. This is useful when running a developer version or when Zero Install is used to run itself.
  • Assume errors from GPG are UTF-8. Error messages were not reported correctly in some locales.

New in Zero Install Injector 0.46 (Apr 2, 2010)

  • New features:
  • SAT solver: Instead of just picking the locally-best version of each interface and hoping the dependencies work out, turn all the interdependencies into a huge boolean equation and solve it using the DPLL algorithm. This means we don't get stuck if, for example, the newest version of a package can't be installed because it depends on a distribution package that you don't have. See
  • http://thread.gmane.org/gmane.comp.file-systems.zero-install.devel/3082 for details.
  • Debian integration: consider uninstalled packages too. As well as adding installed packages to the list of candidates, also add the latest available version we could install using apt-get. The result is that currently an uninstalled distribution package will show up in the list of versions but it cannot be selected. It's not hugely useful, but it doesn't seem harmful either. The plan is to use PackageKit to install such packages in future, if the user has admin access. It should also be easy to add support for finding available RPMs, either via PackageKit or via "yum list".
  • Bug fixes:
  • Fixed the creation of .desktop files with incorrect category when using a non English locale (Rene Lopez).
  • Cope with UTF-8 in GPG key names.
  • For bad signatures, also display any output from GPG. Currently, only on the console.
  • Converted --import to the new API so that it no longer prints a warning when used, and can display key information.
  • Don't abort if importing curses fails. Python can be built without curses support. Just assume the screen is 80 columns wide in that case.
  • Allow Fetcher.feed_mirror to be None to disable mirroring. This is useful for 0mirror, to stop it falling back to itself
  • Don't select uncached implementations with no download location.
  • Fixed error message about replay attacks to say which interface is causing the problem.

New in Zero Install Injector 0.44 (Jan 23, 2010)

  • Improvements include a progress display in console mode, support for GnuPG 2, canonicalisation of architectures and some minor bug-fixes.

New in Zero Install Injector 0.42.1 (Sep 11, 2009)

  • Fix zero-install.ui duplicate object (Rene Lopez). GUI failed to start on latest Debian/unstable.
  • 0desktop now sets the Terminal flag correctly. If a feed declares then put Terminal=true in the .desktop file we generate. This got lost somehow when zero2desktop became 0desktop. Also, running a program from the 0manage window tries to locate a suitable terminal emulator if one is needed.
  • In the Preferences box, sort the domains in the list of trusted keys.
  • Removed unused instances of gtk.tooltips (Rene Lopez). Removed unused variable COMPILE.

New in Zero Install Injector 0.42 (Sep 7, 2009)

  • When a new GPG key is seen, Zero Install is able to look up information about it from a server.
  • The default service informs you if the feed is signed by a member of the Debian project, in addition to showing information from the old database.
  • Distribution integration now also works with multi-arch RPMs.
  • libglade is no longer a dependency.
  • Internationalization support has been improved.

New in Zero Install Injector 0.41 (Jun 28, 2009)

  • UI improvements:
  • "Compile" is now a sub-menu with Automatic and Manual options. The
  • Automatic option uses the new "0compile autocompile --gui" feature.
  • Improved UI for versions menu. There is now a single popup menu, with
  • both the stability ratings and the function for opening the cached
  • copy, and it can be opened by clicking anywhere on a row.
  • Moved trust_box.py to gtkui. This allows it to be used by other
  • programs (e.g. 0compile's GUI).
  • Display a warning icon in the trust box for unknown keys.
  • Keys:
  • New key for Ilja Honkonen. Previous key has expired.
  • Added new GPG key for Thomas Leonard.
  • Bugs:
  • Fixed reporting of bad network use config setting.
  • When there are no valid signatures, say which feed in the error
  • message.
  • Escape < characters in error messages to notifier.
  • Include full stack trace for unexpected errors during background
  • updates.
  • Fixed error with --main=/.
  • Don't rely on filesystem's report of symlink length. eCryptfs returns
  • zero (reported by Dave Arnold).
  • Translations:
  • Added spanish translated strings to .desktop and .directory files
  • (Rene Lopez)

New in Zero Install Injector 0.40 (Apr 25, 2009)

  • Added --with-store option. This allows extra implementation cache directories to be appended to the search path.
  • Fix download problem on FreeBSD. Socket gets wrapped in an "addclosehook" object.
  • Added VersionRestriction to force a particular version.
  • Minor epydoc fixes.
  • Fix Python 2.6 deprecation warning (Rafał Mużyło)
  • Removed used of deprecated os.open2. Better unit-test for gpg.load_keys.
  • --get-selections with --console didn't work if we needed to download anything.
  • Send console trust prompt to stderr, not stdout. Ask using stderr, because we may be writing XML to stdout.

New in Zero Install Injector 0.39 (Mar 8, 2009)

  • The main features of this release are support for translations and an alternative system for background updates to work-around features removed in Ubuntu/Jaunty.
  • Packagers will need to adjust their scripts to include the translations.
  • Also, note that Zero Install now depends on Python >= 2.5.
  • TRANSLATIONS:
  • Add i18n, gettext translations (Anders F Bjorklund).
  • Make more strings translatable (Anders F Bjorklund).
  • Add Swedish translation (Anders F Bjorklund).
  • Include .mo translation files in releases.
  • BACKGROUND UPDATES:
  • Added --systray option to the GUI. Instead of opening the usual window, display an icon in the system tray and start the download automatically. Needed on Ubuntu/Jaunty because its new notification system doesn't allow asking questions in notification messages. If the notification system doesn't support actions, download anyway.
  • If we need to confirm keys in a background check, use --systray. Also, run the GUI on the root interface, not just the one where confirmation was needed.
  • Don't assume D-BUS is missing just because we can't get the SessionBus. SystemBus might still be available (this is used to find out whether we are on-line).

New in Zero Install Injector 0.38 (Jan 18, 2009)

  • NEW FEATURES:
  • Get the LZMA archive decompressor through Zero Install if missing
  • (suggested by Frank Richter).
  • Added --message option to display a hint to the user. This is useful
  • if the user might be confused about why a download box has suddenly
  • appeared. Added messages to explain the compile process, and about
  • getting the LZMA decompressor.
  • Added "0store audit" command. Verifies every implementation in each of
  • the given cache directories, or in all of the default cache
  • directories if no arguments are given. This will detect any packages
  • which have been tampered with since they were unpacked.
  • Cope better with being run through sudo. If we find ourselves running
  • as root but $HOME is owned by a user, get root's real home from
  • /etc/passwd and use that for the configuration and cache files and for
  • gpg's home. Otherwise, we are likely to create root-owned files in the
  • user's home directory.
  • Log "Missing " at info level, not warning. It's not really
  • an error to include a feed that doesn't know about your one.
  • CHANGES:
  • Use subprocess instead of deprecated popen2 module (reported by Keith
  • Hopper).
  • Fixed some deprecation warnings from Python 2.6.
  • Better check for Debian-style distribution. Check for
  • '/var/lib/dpkg/status', not just '/var/lib/dpkg' (reported by Markus
  • Rathgeb).
  • New key for Eric Wasylishen.
  • BUG FIXES:
  • Only cache a "no" icon if the policy returned a fetcher for
  • downloading the icon. This fixes occasional display of the default
  • icon even though a feed has an icon (Frank Richter).
  • Fixed typo in manpage (Rabbe Fogelholm).
  • When changing the network preference, call solve_with_downloads().
  • recalculate() is deprecated and doesn't update the display properly if
  • feeds have to be downloaded.
  • Versions list didn't work if the solver hadn't reached it. If the
  • solver doesn't get as far as evaluating a component then we try to
  • just list all the versions sorted version number, not solver
  • preference. Due to a type change, this had stopped working.
  • Ignore off-line mode setting when the user explicitly clicks Refresh.
  • Downloading fixed selections failed if the feed was known. Typo in
  • selections.py. Added a test to check it.
  • --download-only option was ignored if used with --set-selections.
  • Fixed bug importing multiple feeds at once.

New in Zero Install Injector 0.37 (Nov 30, 2008)

  • Include all attributes in selections. XML Meta-data such as the license and compile command weren't previously included.
  • Increase delay before checking for updates If NetworkManager says we're not connected yet, wait 2 minutes before trying anyway (not 20 seconds).
  • zeroinstall.injector.gpg.load_keys(): Use the primary UID for the name of a key (Frank Richter).
  • BUGS:
  • App list box: Get rid of horizontal scrollbar (Frank Richter). Actions are right aligned, and the app description fills all the width between icon and actions columns.
  • Ensure over_overrides file is flushed before renaming. Reported on ROX web-site.
  • Allow changing the stability rating of implementations in feeds. Before, it tried to save the settings for the interface, not the feed.
  • Don't filter out feeds with no machine type when looking for source code. We treated a missing machine type in a as "any", but that doesn't match if we're looking for source code.
  • Don't treat "src" as an architecture group. After selecting a "src" package, it assumed this was a 32-bit architecture and tried to find dependencies to match.
  • "Manage feeds" dialog: limit size of icons displayed in list (Frank Richter).
  • Fixed last-check-attempt time-stamp code. When checking for updates we store a time-stamp so that we don't keep re-checking the same feed in a short period. If the time-stamp file already existed, this code failed to update it.
  • UNIT TESTS:
  • Rename duplicate-named test (Mark Seaborn)
  • Tidy: remove some dead test code (Mark Seaborn)
  • Tidy: remove unused imports (Mark Seaborn)
  • If http_proxy is set it can cause the download tests to fail (Mark Seaborn)

New in Zero Install Injector 0.36 (Sep 7, 2008)

  • Downloading should now be less CPU-intensive.
  • A distribution is no longer assumed to be RPM-based just because /var/lib/rpm exists.
  • When considering Debian distribution packages, the architecture is now considered: for example, a 64-bit Debian library cannot be used with a 32-bit main executable.
  • Some progress has been made towards supporting Windows.