Coinst - computes the co-installability kernel of a package repostory

**coinst [options]**

**coinst** reads a package repository in debian format or RPM format from
standard input, and computes the co-installability kernel of the repository
(see below). The graph of the kernel is written in dot format to a file, and a
diagnostic is written to standard output. This diagnostic consists by default
of:

- -
- the list of equivalence classes of packages

- -
- the list of non-installable packages

- -
- the list of not co-installable pairs of packages

A set of packages is called co-installable with respect to a repository R if it
can be extended to a set of packages from R that satisfies all inter-package
relations (dependencies, conflicts, etc.). In particular, a package p is
installable if the set {p} consisting of p only is co-installable.

This tool reduces a repository R to a much smaller one, its so-called
co-installability kernel R', that behaves exactly the same as far as
co-installability of package is concerned: Any set of packages P is
co-installable with respect to P iff it co-installable with respect to R'.
This is achieved by

- -
- dropping all relations that are not relevant for this
purpose. For instance, dependencies that do not lead directly or
indirectly to any conflicts are dropped.

- -
- identifying all packages that behave the same. For
instance, packages that are not in conflict with any other package (even
not through dependency chains) behave the same since they are
co-installable together with any other co-installable set of packages, and
packages that are not installable at all behave the same since they may
never be part of any co-installable set of packages.

A more precise explanation can be found in the original research article
underlying this tool.

The interest of computing the kernel is that it is typically orders of magnitude
smaller than the original repository.

**-deb**
- expect input in the format of a debian Packages file
(default).

**-rpm**
- expect input in the format of an RPM hdlist.cz file.

**-ignore ***package*
- ignore the package named
*package*.

**-o ***file*
- write the graph to
*file* instead of graph.dot

**-all**
- include all packages in the coinstallability graph

**-root ***p*
- draw only the relevant portion of the graph around package
*p*.

**-explain**
- explain the list of non-installable pairs of packages.

**-stats**
- show statistics regarding the input and output repositories

**-help, --help**
- show command synopsis

Reduce a current debian Packages file to its kernel:

coinst -all -o raw.dot < sid_main_binary-amd64_Packages

Layout the graph:

dot raw.dot -o layout.dot:

View the graph with dotty, or the viewer from the coinst_viewer package:

dotty layout.dot

coinst_viewer layout.dot

Coinst has been written by Jérome Vouillôn. This manpage has been
compiled by Ralf Treinen from the original coinst documentation.

**dot**(1),

**dotty**(1),

**coinst_viewer**(1)

*http://coinst.irill.org*

The original research article decribing the algorithm behind this tool is
Roberto Di Cosmo and Jérôme Vouillon,

*On software
component* *co-installability*, 19th ACM SIGSOFT Symposium on the
Foundations of Software Engineering (FSE-19) and ESEC'11: 13rd European
Software Engineering Conference (ESEC-13), Szeged, Hungary, September 5-9,
2011, pages 256-266.