Features:
=========

* config: configs that do not need to be matched by fnmatch() could be using a
  vector instead of a list. This way we could search in it by calling
  bsearch().

* index: drop the "open(), seek(), read()" implementation and use another one
  with mmap(). When lookup() is called and the file is not mmaped, mmap it.

* create test-mock library to be LD_PRELOAD'ed before running the binaries
  so we're able to create unit tests

* Add functions to dump configuration

* Add functions list all modules known by modules.dep

* provide 1:1 compatibility with module-init-tools's modprobe
   - dump configuration

* provide modules.archive, a cache file with all modules compressed
  and a fast access. It's like a tar.gz, but with each entry
  compressed as opposed to the whole tar compressed, easy to pick
  individual entries, that is, more like .gz.tar. As zlib compression
  does not store the uncompressed file size, this could provide
  it. The file format should be something like:
     MAGIC-ID
     DIRECTORY-ENTRY-SIZE
     DIRECTORY (hash-like format, points to file offset and size)
     ENTRIES (each is a compressed module)
  Helper binary to:
     kmod-archive list
     kmod-archive add path.ko
     kmod-archive rm path.ko
     kmod-archive get path.ko
     kmod-archive exists path.ko

Known Bugs:
===========


Notes for future development:
=============================

* Kill support for /etc/modprobe.conf

* Kill support for map files

Things to be added removed in kernel (check what is really needed):
===================================================================

* list of currently loaded modules

* module's size should be available under /sys

* kill /proc/modules ?
