Second generation package manager

I have created many prototypes for advanced package manager features. Erich Schubert also made a tag cloud prototype.

Recently, I wrote:

We have lots of interesting, usable metadata; we have algorithms; we have prototypes; we have ideas for lots of cool, implementable features. The question is, are we able to write applications that just combines what is needed from all this treasure to provide the right interface(s) for our base(s) of users?

Most of the back-end code is already implemented in Python, and I'm thinking of putting it together into a working prototype for a new concept of a file manager.

This could be even implemented quickly, if someone joins me who is good at:

What follows is a sketch description of what I have in mind.

The user

Debora is 34, working as a web designer in a small enterprise. She has a laptop running Debian which she uses both for work and at home. She likes Debian for the wide range of software, that allows her to be always able to access the best tools for the job, even in a highly changing environment like the one of web design. At home she enjoys the various tools for photo editing and management, and of course, having a husband and a 6 years old son, the selection of games.

The tasks

Looking for new software

Use the smart tag search for searching: it allows a Google-like search interface, which afterwards allows categories to be used to semantically refine the results. This last step is conceptually very simple, as it maps to a sequence of "more like this" and "less like this".

The search results can be sorted using popcon suggestions, that are very effective at showing software not in the system that many other people use.

Looking at what is installed

Let's see if this package does what I need

Given an installed pacakge, show the contents of its bin/ directories and showing manpages as the details for the bin/ file: thanks to the Debian Policy, executables are all in /(usr/)?s?bin/ and they must have manpages.

For packages that are tagged as interface::3d, interface::text-mode or interface::x11, allow to run them directly from the interface.

Also show the contents of /usr/share/doc/pkgname and /usr/share/doc/suggested-and-recommended-pkgnames and allow to open documentation with the appropriate software. If there is an html directory which contains an index.html, only show that and not all the other HTML files.

Find info documentation and allow to open it into a proper info browser.

If there are manpages that don't have a corresponding executable, show them as extra documentation.

What was that nice package I installed yesterday?

List installed packages sorted by when was the last time they have been installed.

Let's get rid of the cruft

There are also some "unusefulness" scores one can compute, but I haven't yet been playing with them yet:

Task filter

Have a look at the popcon suggestion page: there is a "Suggestion type" box.

Of course the same idea can be used in a package manager to restrict it to a significant subset of the packages. More filters, as you can imagine, can be easily created.

This is how it is implemented:

case "any": $filter = "'!role::shared-lib'"; break;
case "gui": $filter = "'!role::shared-lib && role::program && (interface::x11 || interface::3d)'"; break;
case "devel": $filter = "'!role::shared-lib && devel::*'"; break;
case "game": $filter = "'!role::shared-lib && role::program && game::*'"; break;
default: $filter = ""; break;

The same filter can be gived to Debtags:

debtags search '!role::shared-lib'
debtags search '!role::shared-lib && role::program && (interface::x11 || interface::3d)'
debtags search '!role::shared-lib && devel::*'
debtags search '!role::shared-lib && role::program && game::*'

Conclusion

As I said:

There is so much really cool stuff to be written, just within reach.

So?