whohas is a command line tool that allows querying several package lists at once - currently supported are Arch, Debian, Fedora, Gentoo, Slackware (and linuxpackages.net), Source Mage, Ubuntu, FreeBSD, NetBSD, OpenBSD, Fink and DarwinPorts. whohas is written in Perl and was designed to help package maintainers find ebuilds, pkgbuilds and similar package definitions from other distributions to learn from. However, it can also be used by normal users who want to know:
- Which distribution provides packages on which the user depends.
- What version of a given package is in use in each distribution, or in each release of a distribution (implemented only for Debian).
Screenshot of 0.14
It is suggested you use Unix command line tools to enhance your search results. whohas is optimised for fast execution. This is done by threading, and the order of results cannot be guaranteed. To nonetheless get a standardised output, alphabetically sorted by distribution, use the sort tool:
whohas gimp | sort
You can use grep to improve your search results. Depending on whether you want only packages whose names begin with your search term, end with your search term, or exactly match, you would use a space before, after or on both sides of your search term, respectively:
whohas gimp | sort | grep " gimp"
whohas vim | sort | grep "vim "
whohas gimp | sort | grep " gimp "
The spaces will ensure that only results for the package gimp are displayed, not for gimp-print etc.
If you want results for a particular distribution only, do
whohas arch | grep "^Arch"
Output for each module will still be ordered, so you don't need to sort results in this case, although you may wish to do so for some distributions. Distribution names are abbreviated as "Arch", "Debian", "Fedora", "Gentoo", "Slackware", "Source Mage" and FreeBSD, NetBSD, OpenBSD, Fink and DarwinPorts.
Output in version 0.1 looked like this. The first column is the name of the distribution, the second the name of the package, the third the version number, then the date, repository name and a url linking to more information about the package. Future versions will have package size information, too. Column lengths are fixed, so you can use cut:
whohas vim | grep " vim " | cut -b 38-47
The first bytes of the data fields at the time of writing are 13, 39, 50, 55, 66 and 78.
Here is an example of whohas 0.1 in a terminal session, showing how it works with grep and cut.
Features and limitations
Debian refers to the binary distribution. Slackware queries Current only. Binary sizes for Fedora are package sizes - space needed on disk will be greater by about factor 2. Binary sizes for Debian are unpacked sizes. All details (including availability, version numbers and binary sizes) are for the x86 architecture.
Debian version numbers in rare cases may not be for x86 (will be fixed). Gentoo version availability may not be for x86 (will be fixed). I recommend you consult the URLs provided in the output, which give detailed and accurate information about each package. You may want to use a terminal that recognises hyperlinks and allows easy access through the browser, such as gnome-terminal.
For Fedora, only release 4 is enabled by default, and only the most up to date package will be listed if different versions are available.
I would like to encourage distributors at this time to provide web query interfaces to package lists, and specifically provide the following information: package name, version, date, size and a url to further information (maintainer, build information etc.)
- date utility
- LWP::UserAgent (usually packaged as perl-libwww or libwww-perl)
Currently, the local repositories created in the user's home directory take up 900K.
Thanks to Andrew "ruskie" Levstik for suggesting the Source Mage module and providing a small package list file on their server for whohas to parse.
Thanks to Ladislav Bodnar of Distrowatch for advice on version checking, and his list of seminal Linux packages and stable version numbers.
Thanks to Asari Takashi for a Mac OS X patch.
whohas started life as whichdistro.pl, but its author preferred the shorter, hopefully more memorable name which is more conducive to word play.
updated 8 August 2005