Survey of the state of the art in dependencies management
Summary
External software that provides non-trivial dependency management logic
These may be package management tools, or tools for checking repository integrity. They all have the following features:
Others
Papers
RPM
rpmlint
The
rpmlint tool is a static RPM checker developed at Mandriva.
Smart
The
Smart is a multi-distribution package management
tool written in Python.
Yum
The
Yellow Dog Updater, Modified is a RPM package manager. Its working logic is provided by the
RPM library.
URPMI
The
URPMI tool is used in Mandriva Linux.
Debian APT
The
Debian APT system is being extensively studied in WP2.
Related tools that might be interesting from a dependency point of view:
- equivs: Tool for creating fake packages providing dependencies.
This package provides a tool to create Debian packages that only contain
dependency information.
If a package P is not installed on the system, packages that depend on P
cannot normally be installed. However, if equivalent functionality to P is
known to be installed, this tool can be used to trick the Debian package
management system into believing that package P is actually installed.
Other related tools:
- Search tools
- ara
- madison-lite: display versions of Debian packages in an archive
- dpkg-www: powerful WEB based Debian package browser
- Interfaces for apt and dpkg
- gnome-apt: gui for apt (same code)
- gdeb: graphical package inspection tool - allows to view a .deb
- feta: simpler interface to APT, dpkg, and other package tools
- synaptic: graphical package manager
- dselect: user tool to manage Debian packages
- tasksel: Tool for selecting tasks for installation on Debian system
- wajig: simplified Debian package management front end
- aptitude: terminal-based apt frontend
- Miscellaneous
- fai: FAI is a non-interactive system to install a Debian GNU/Linux operating system unattended on a PC cluster.
- pkgsync: automated package list synchronization
- dak: Debian's archive maintenance scripts
- auto-apt: package search by file and on-demand package installation tool
- cron-apt: automatic update of packages using apt-get
- Installation tracking:
- installwatch:
- checkinstall: installation tracker
- cruft: cruft is a program to look over your system for anything that shouldn't be there, but is; or for anything that should be there, but isn't.
Gentoo
See
Gentoo.
FreeBSD ports
See
FreeBSD Porter's Handbook,
particularly part 5.7 (dependencies).
- Library dependencies are specified using a list of regular-expressions -> possibility of using them for disjunctive dependencies ?
- Tools
- Directives
Declare$ a conflict with the pkgcflname package, as the two packages contain references to the same files, and so cannot co-exist
on the same system.
Declare a dependency on the pkgname package. The pkgname package
must be installed before this package may be installed, and this
package must be deinstalled before the pkgname package is deinstalled.
Multiple @pkgdep directives may be used if the package
depends on multiple other packages.
The ports building technology does not tolerate circular dependencies.
CVS access:
% cvs -d :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs login
Password:anoncvs
% cvs -d :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs co src/usr.sbin/pkg_install
Slackware TGZ
Slackware .tgz packages are gzip-compressed tar files that are meant to be
packet at the root directory, except that they contain an /install
directory which contans a "slack-desc" file which is just a human-readable
description, and eventually configuration and removal scripts. There is
no dependency data.
Uludag
Uludag is a Linux distribution
developed by the
Turkish Institute for Scientific Research and seems to somewhat follow the
recommendations from the Trove project in that there are different
databases for persons and softwares. They are using their own packaging
format, metadata, installer and dependency management software. The
metadata is in XML. The software is written in Python and is called PISI
(Packages Installed Successfully as Intended). The dependency information
is reduced to a simple "Depends" field. As a consequence, the
installability problem becomes trivial. The distribution being not yet
ready, the feasibility of this approach remains unknown. They have an
interesting
technical report
which formalizes the dependency algorithm in their subversion repository.
The algorithm is the well-known topological sorting algorithm.
Progeny
Progeny This company provides custom Linux distributions for servers. Ian Murdock (from DebIAN) works there.
The platform is delivered via APT repositories.
The Itsy package management system a.k.a. Ipkg
Ipkg is a dpkg-replacement mostly
for iPaq handhelds. It aims to be lightweight. It is very Debian-inspired,
the control files have the same syntax. The dependency fields are the
Debian dependency fields.
The tool is written in C and supports complex dependency resolution à la APT.
iPkg is a very lightweight package management system. It was designed for Linux
installations with severe storage limitations such as handheld computers. iPKG
is more than just an embedded Linux flash image builder, (although it does that
fairly well). It also allows for dynamic installation/removal of packages on a
running system.
iPKG is itsy in several ways:
- The control programs themselves are small, (currently about 13kB)
- The installed meta-data tries to be only what is absolutely essential, (currently about 38kB for a 16MB compressed flash iPAQ distribution)
- The available packages are small. (The idea is that the package tree should be as fine-grain as possible. Much of this still needs some work)
To get the source:
cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs login
Password: anoncvs
cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs co familiar
cd familiar/dist/ipkg/C
Trove
Trove This old proposal by Eric S. Raymond is more focused on software archive maintenance issues and does not even mention dependency problems. It proposes to use the same dependency fields as in Debian.
The Dublin Core Metadata Initiative This large bureaucratic mammoth proposes nothing less than:
The Dublin Core Metadata Initiative (DCMI) is an organization dedicated to promoting the widespread adoption of interoperable metadata standards and developing specialized metadata vocabularies for describing resources that enable more intelligent information discovery systems.
Conary
ConaryWiki An interesting package management system that is based on an enhanced source control system including local changesets (describing local modifications to configuration files) and shadows (which allows creation of a branch in the source control system that follows the evolutions of its parents). Used in rPath linux.
~~Conary can be described as a packaging system that works like a source
control system.~~
RPM-metadata at Duke University
They propose a XML format for describing all the package metadata. From a dependency viewpoint, their DTD is based on RPM and provides the following fields :
- Package:
- Requires: Entry list
- Provides: Entry list
- Obsoletes: Entry list
- Conflicts: Entry list
- Entry:
- Name: string;
- Flags: flags;
- Body: Version list
- Version:
- | No_version
- | Version(epoch, version, release)
LUAU
The Lib Update/AutoUpdate
Luau is a system for retrieving software updates and status messages from package maintainers individually
Does not provide automatic dependency tracking and downloading
Oasis
coverpages.org
The Solution Installation Schema specification defines "the schema of an
XML document describing the characteristics of an installable unit (IU) of
software that are relevant for its deployment, configuration and
maintenance. The XML schema is referred to as the Installable Unit
Deployment Descriptor or IUDD schema.
See
Installable Unit Package Format Specification Version
1.0
To check: no dependency information ?
OSGi Bundles
Overview of the Open Service Gateway Initiative (OSGi) is available at
OSGi. OSGi gateway defines a service framework that requires services be
packaged into bundles and download to the gateway device. A service bundle
is a JAR that contains the following:
- Contains the resources implementing zero or more services. These resources may be class files for the Java programming language, as well as any other data (such as HTML help files, icons, and so on).
- States static dependencies on other resources, such as Java packages. If any dependencies are stated, the framework takes the appropriate actions to make the required resource available.
- Optionally contains classes that help the framework install, configure, activate and update a service.
- Declares which class should be used to start or stop a service.
The service framework also maintains the relationship between services
implementations, and the dependencies between services and bundles.
Similar to the J2EE application server, the OSGi gateway service framework
defines a hosting environment that fits in the solution installation
architecture. OSGi bundles to the OSGi gateway is what the J2EE
applications to the J2EE application server. Thus OSGi bundles can be
encapsulated in an installable unit package defined by this document, and
deployed through an OSGi gateway touch point.
Linux-Pack (previously Slack-Pack)
Linux-Pack started as an apt-get/urpmi
clone for Slackware. Very amateurish.
GODI
GODI is a framework to download, compile, install, and package O'Caml software
...
Currently, GODI knows two kinds of dependencies: strict dependencies, and build dependencies.
Encap
Encap is a tool that install each piece of software in its own directory under
/usr/encap/ and then creates symbolic links from
/usr/local/bin,
/usr/local/man, etc.
Language-specific modules
Java archives
Ocaml Findlib
CTAN
The Comprehensive Tex Archive Network is a searchable on-line archive
of TeX-related files : TeX sources, documentation, fonts, packages.
The entries are categorized, there is author, description, location
and related packages metadata, but no dependency information.
CPAN
Comprehensive Perl Archive Network. This is intended for developers - dependencies are to be resolved by hand, with "use" statements. The archive stores no dependency information.
Python Cheese Shop
This
archive of Python modules does the same thing for Python that CTAN and CPAN do for TeX and Perl. There is no dependency information.
ESP package manager
The
Easy Software Package
manager is a meta-packager that
allows easy creation of binary packages for various Unix and Linux
flavours. It has its own package description format, which could be
interesting. It aims to provide all the features of all the package
formats. It thus supports various kinds of dependencies. However, as it
only creates packages, it has no dependency resolution of any kind. Their
manual page has a nice table summarizing the features of the different
packaging formats. The software is GPL licensed.
Ruby
- libneedle dependency injector for ruby
Needle is a dependency-injection/inversion-of-control container for Ruby,
which takes advantage of Ruby's dynamic nature to provide a rich and
powerful interface for managing dependencies.
RubyGems is an advanced package management tool for Ruby libraries. It supports
remote searching, downloading, and installation while handling library
dependencies and supporting coexisting versions.
MacOS
OS/2
Windows Installshield
Deliver
J2EE
Grid Services Deployment
Eclipse
Sources:
citeseer
ACM
Sciencedirect
Google
alltheweb
Google Scholar
gnu.org
Freshmeat
Did the following searches:
- System (440)
- Software distribution (214) OK
- Software distribution tools (186) OK
- Systems administration (1604)"
- Search "package" OK
- Search "dependency", "dependencies" OK
- Installation/Setup (357)
- Archiving (1011)
- Clustering/Distributed networks (282)
- Utilities
- Software development
- Information management
- Database
- Symbolic Link Managers
- Ports-like systems
- Linuxports
- Gentoo
- Source Mage
- conary
- gentoo
- slackpkg
- poldek: A full-featured console frontend to RPM.
- apt-build: An apt-get frontend for compiling software optimised.
- apt-proxy: A simple apt-get proxy cache.
- stash: A script that eases the installation of software into a user's home directory.
- Porthole: A frontend to the Gentoo Portage system.
- Source Mage GNU/Linux a.k.a. sorcery
Sorcery has full-tree problem resolution, where it doesn't just stop compiling
everything if one compile breaks, it stops compiling only those that depend on
it. Gentoo kills the entire compile.
…
Source Mage has a rich provider and conflicts logic and optional dependency
system that is competitive with gentoo (for the most part identical in power
except their triggers replacement, "cdepends" is not yet in CVS).
…
Again, it's all written in bash, and we consider Sorcery an example of the
power of bash for high-level application development.
Example of the DEPENDS file of abiword-common:
depends libpng "with-libpng" &&
depends gtk+2 &&
...
optional_depends imagemagick \
"" \
"" \
"to manipulte images" &&
optional_depends psiconv \
"" \
"" \
"to import Psion files" &&
...
Categories
- Functions
- Compilation
- Dependency management
- Virtual packages
- Disjunctive dependencies
- Dependency on compilation options
- Binary constraints
- Binary installation
List
Depot is a software management tool providing a simple, yet flexible, mechanism
for maintaining third party and locally developed software in large
heterogeneous computing environments. Depot integrates separately maintained
software packages, known as collections, into a common directory hierarchy
consisting of a union of all the collections. This common directory is defined
as the software environment. A set of configuration options manages
interactions and intersections between collections in the environment. Depot
facilitates the introduction, update, and removal of collections in a software
environment. Custom environments and complete test environments can be easily
created for individual machines or for sets of machines. Collections with
unexpected problems can be replaced with previous versions or simply removed.
Individual collections or files can be moved from remote filesystems to the
local disks of workstations without the worry that the files may become stale.
All this is achieved with minimal wasted disk space and administrative
overhead.
- stowES
- reflect: A symlink-style package management tool similar to stow.
- XStow: A replacement of GNU Stow written in C++.
- KPortage: A graphical frontend for the Gentoo Linux portage system.
- SlackIns: A pkgtool interface for Slackware.
- pkgusage: Keeps track of when you last used your RPM or DEB packages.
- apt-iselect: An interactive wrapper for apt-cache search and apt-get install.
- apt-best: A program to find the most popular Debian packages.
- UniPKG: A modular package manager.
UniPKG (Universal PaCkaGe manager) is a modular package manager. It supports
the RPM, DEB, and Slackware TGZ package formats and doesn't depend of any
distribution-specific tools. It is completely self-sufficient, as formats such
as cpio were reimplemented.
…
Note that UniPKG doesn't handle dependencies (it is not supposed to), however,
a dependency-handling utility similar to apt-get is planned in far future.
- opt_depot
- relink: is a package management tool for organization and management of software packages. It should run on any UNIX platform that runs PERL. Similar tools include: rpm(REDHAT/Mandrake), pkgadd(Slackware/SUN), stow(GNU) and depot(CMU). NO DEPENDENCY MANAGEMENT
- LFS
- Linuxports: FreeBSD-like ports for Linux
- univSrcPkg
- alien
- encap
- graft: Graft provides a mechanism for managing multiple packages under a single directory hierarchy. It was inspired by both Depot (Carnegie Mellon University) and Stow (Bob Glickstein).
- gar: FreeBSD-like ports collection
The GAR system is a similar system to the BSD ports collection. It's a mechanism for automating the compilation and installation of third-party source code. It appears in the form of a tree of directories containing Makefiles and other ancillary bookkeeping files (such as installation manifests and checksum lists).
- garstow: slight modification of gar
- Package Installation Manager: a script that assists with uninstalling applications that don't provide the facility themselves. It operates in a manner similar to GNU Stow.
- GNU stow:
GNU Stow is a program for managing the installation of software packages, keeping them separate (/usr/local/stow/emacs vs. /usr/local/stow/perl, for example) while making them appear to be installed in the same place (/usr/local).
/package reuses the filesystem as the database:
- Downloading or creating files in /package/admin/daemontools-0.76 automatically registers them as being part of the admin/daemontools package, version 0.76. We don't need special database-editing tools; we simply use standard tools for handling the filesystem.
- A source package is compiled in its package directory. It doesn't need to be separately installed. Exception: Adding programs to the commands-available-to-users list means creating symbolic links in a central directory, /command, as well as in /usr/local/bin for compatibility.
- slapt-get: An APT like system for Slackware package management. Written in C. Clean code, but resolution is interleaved with resolution. Handles disjunctive dependencies. Handles conflicts, suggests, but does not seem to do complete resolution.
It allows one to search slackware mirrors and third party sources for packages, compare them with installed packages, install new packages, or upgrade all installed packages. Great for scripting as well.
- rpmgraph: A tool that creates a graph of installed RPMs.
- NRH-up2date: A server for RedHat's up2date utility.
- BitRock InstallBuilder: Build easy-to-use installers on Linux, OS X, Windows, AIX, HPUX, Solaris, BSD.
- toast: A simple source-and-symlinks package manager for both root and non-root users.
toast is a simple package manager for Unix. It automatically locates and
downloads source code, determines how to compile it, installs each package in
its own directory tree, and makes the resulting binaries available through an
encap/GNU stow-like symlink tree. It also supports binary packages. It is often
used to install and manage software in a non-root user's home directory.
- WPKG: A Samba add-on that will help distribute software and updates to many clients. Homepage
- make_uninstall: A program that creates records of make install for later easy removal.
- JDistro: A Java desktop, shared runtime, and software distribution system.
- WDFink: WDFink is a GUI wrapper for the Fink project.
- fink: A source-retrieving package manager for Mac OS X.
To achieve these goals, Fink relies on the excellent package management tools produced by the Debian project - dpkg, dselect and apt-get
- AutoRPM: An RPM auto-installer and/or FTP mirrorer.
- APT-RPM: The APT package tool for RPM based distributions.
- apt4rpm: Creates an apt, yum, or metadata repository from a random RPM directory.
- autopackage: A framework for producing powerful, distribution-neutral packages.
This things looks more like a mix of autoconf and findlib. A kind of
InstallShield for Linux. Instead of detecting the installation status of
libpng by checking a package database, it searches it in the system.
Their philosophy is to dynamically link to popular libraries (libc, gtk) but to statically
link unpopular or unstable libraries (wxwidgets, libobscurexmlparser).
Autopackage Wiki
Autopackage CVS repository
autopackage allows developers to produce "install anywhere" packages for
3rd party Linux software. The resulting packages support both graphical and
terminal frontends, support dependency checking and resolution, and use
deep desktop integration
…
Automatically verifies and resolves dependencies no matter how the software
was installed.
- gnome-pkgtool: GUI for Slackware's pkgtool
- gnupdate
- gpkg: The gpkg tool is the command-line GNUpdate package management tool. It provides functionality similar to the rpm, dpkg, and apt-get tools.
- libpackman: (stalled) The libpackman (Package Management) library provides a single API for accessing multiple package formats and package databases. NO DEPENDENCY RESOLUTION
- epkg: epkg is a package manager which uses the Encap Package Management System
- swpkg: ~~'swpkg' is a collection of tools for building, installing, and maintaining software packages. It is based on a fairly simple philosophy intended to simplify the management of third party software and their inter-dependencies.
Each software package is installed in a different directory, and symbolic links are used to populate common directories (typically /usr/local/bin, /usr/local/sbin, ..) which are then referenced by users (in their PATH and so on). The directories where the software actually lives are never referenced directly by users. For most software packages, setup and installation is as straight forward as if you were installing them directly in /usr/local. ~~
http://web.taranis.org/swpkg/
- GDPM: GNOME Debian Package Manager. Calls APT.
- mpkg: A FreeBSD-like ports collection for DEC OSF/1, Linux, Solaris.
Solaris
- Darwin pkg: A port of the FreeBSD software package system to the Darwin OS.
- Sencap: Simple ENCAP software manager. OK
- Spkgtool: The Scrudgeware Package Tool. Encap + Ports
- spkg: A Slackware package management utility.
Written in shell script. No dependency checking.
- darwinports: see OpenDarwin
- xpkg: Package management system of the OpenDarwin project. (Work in progress)
xpkg is a package management system much like dpkg and rpm. It tries to improve
on other package systems by handling virtual packages, complicated
dependencies, and transferring ACLs and EAs.
package {
requires : item list
provides : item list
}
item {
name : string
major : int
minor : in
}
No explicit conflicts.
- syspkg: A powerful multi-OS, multi-platform packaging mechanism.
Versioned dependency management.
# Comments and newlines are accepted. Errant entries are tossed out.
# You cannot put a comment after a variable, however.
archive=file-x.x.x.tar.gz
url=http://www.site.com/directory/
# 'distdir' is for specifying the directory in which the tarball is in.
distdir=../archives
# 'expand' is the directory in which the tarball will expand to, for packages
# such as netcat.
expand=file-x.x.x
dist=file-x.x.x
pkgname=file
pkgvers=x.x.x
pkgdep=anotherpackage >= x.x.x
pkgdep=yetanother == x.x.x
pkgdep=onemore
pkgdesc=This is a sample description. You can specify multiple 'pkgdesc='
pkgdesc=lines like this.
# 'make' works just as well as build.
build=make
install=make install
clean=make clean
file=/usr/bin/program
syspkg is a powerful multi-platform packaging system for most Unix variants. Originally designed for the upcoming Linux distribution 0sys, it is able to handle the most critical aspects of package management: Viewing package files (and/or directories), handling versions, removal, and dependencies. It is also a great way to manage packages built from source with minimal effort. Dependencies can be against packages, or packages of a certain version (greater-than, less- than, or equal-to).
Aims to handle dependencies, conflicts, options, option dependencies, option conflicts.
- EPOR: EPOR is an extensible package organiser for Unix-like systems.
It's written to trace filesystem changes (something being installed) and save this information in a simple text database (this, as any other provided feature, is customisable via the embedded Guile interpreter). Database entries contain information supplied by the command line (package name, version, etc.) and traced by filesystem changes (new directories, files, etc.). This is achieved using the "LD_PRELOAD method''.
- Perl2RPM: Scripts which automatically build RPMs of Perl modules.
- Splack Linux: A port of Slackware to SPARC.
- PAR Packaging and Deployment tool: A packager for Perl programs.
- NSBD: Not-So-Bad Distribution (automated free software distribution) by Bell Labs. Focused on secure package installation (limiting rights of installation scripts, cryptographically signing packages in a web of trust, etc.)
- syncopt: Yet another approach to the standard sysadmin problem of keeping multiple machines' software installations up to date.
- apteryx: A simple wrapper for apt-cache and apt-get.
- slackcurrent: A script for updating Slackware installations.
- Kemerge: A graphical KDE Gentoo emerge tool.
- openbechede: An OpenBSD packages tool (install/remove/update/system upgrade).
Written in shell script, simple dependency management, no conflicts.
- gslapt: A GTK version of slapt-get.
- UPMS: A universal package managment system for any FHS-compliant Linux distribution.
Based on the BSD ports system.
- apt-cacher: A CGI script proxy for apt-get.
- PKGsummon: A utility for management of slackware packages.
- slackselect: A Slackware package manager.
- XPKGTOOL: A Slackware Package Manager for X.
- Ports Manipulator: A ports collection manipulator for BSD.
- pkgutils: Package management utilities for Linux, used by the CRUX distribution. Written in C++. No dependency management, only storage management with conflict detection on files.
- CruxPorts4Slack: A ports system for Slackware.
- cpan2tgz: a utility to create Slackware packages from CPAN Perl module distributions, inspired by Erick Calder's cpan2rpm.
- mongoose: The Mongoose Package Manager is a full featured packager, supporting installation from source, advanced dependency resolution, and optional features. Written in C++. Slotted à la Gentoo.
- klik: klik provides an easy way to download and use software for most major distributions. Used Debian APT technology.
- RPM SuperVisor: Eases administration for RPM-based systems.
- spill: symbolic link manager
- slaktool-scripts: A set of scripts to improve slackware package management. It's a part of the slaktool project.
Slaktool is a project to improve the Slackware package manager with all the features of the more advanced package managers while retaining the classic .tgz format
Written in shell script.
- UniPackage: A non-distribution-specific, dependency free package system.
UniPackage packages are tar.bz2 archives which contain a self-contained "AppDir" which can be moved anywhere in the filesystem without disturbing the application's installation. … The issue of dependencies is avoided by bundling all required libraries in the AppDir.
- swup: an advanced tool for installing, upgrading, and querying software packages, independent of the package format. It handles dependencies between software packages. Being actively developed. Written in Python. Seems to have complete resolution logic.
- Zero Install: A system for running software without needing to install it.
- yum4sol: A Solaris port of the YUM package updater.
- yumtk: yumtk is a GUI front-end for yum
- aduva: Aduva Manager is a package manager with automatic download and dependency checking
- tinypackage: a lightweight package manager for UNIX systems. No dependency management.
- aptsh: Aptsh is a pseudo-shell for systems with the APT package managing tool
- Upgrade-oldest: A tool to upgrade the oldest Debian packages.
Upgrade-oldest selectively upgrades a Debian system by upgrading the packages with the oldest and most significant version numbers. It can be limited to certain sections, and the level of version differece necessary to trigger an upgrade can be controlled.
- Pdbv Package DataBase View: Pdbv outputs a HTML view of a RPM or dpkg database.
See a
demo
- AutoUpdate: Automatically upgrades RPM-based systems via (S)FTP or HTTP(S).
- debfoster: Efficiently manages package dependencies on Debian systems.
Most Debian application packages depend on other packages, containing libraries
or other utilities. When the application package is removed, the dependencies
will still linger on the system. Debfoster can detect such "orphaned"
dependencies and will clean them up. It can be used as a front-end to apt or
standalone.
- pkgusage: Keeps track of when you last used your RPM or DEB packages.
- syncopt: A Flexible and Simple Approach to Package Install
- sptools: Tools for managing slashpackage installations.
Written in shell script.
- oblisk: Open Binary Linux Install System Kit
OBLISK aims to make any package install on any modern GNU/Linux system. OBLISK packages are sent in an appdir-like package and can be run entirely in place, but also have an installer, which makes it possible for them to be installed to /usr or any other path.
- rpm-analyzer: Helps you analyze rpm dependencies. Actually, it does no analysis at all. It just allows the user to browse the hdlist using treeview lists.
- Emerde: A port of Gentoo's Portage system for other distributions.
Emerde is the port of Gentoo's portage system that installs, removes, updates,
maintains your system rapidly and easily. Furthermore on Slackware distribution it
cooperates with the Slackware's db and allows to install .tgz files directly, using
dependences checking.
- Red Hat Update: A replacement for up2date.
- lt package manager: A light package management tool. Symbolic link manager.
Sourceforge
Usenet