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

* review API, maybe unify all of these setters:
   - kmod_module_version_get_symbol()
   - kmod_module_version_get_crc()
   - kmod_module_symbol_get_symbol()
   - kmod_module_symbol_get_crc()
   - kmod_module_dependency_symbol_get_symbol()
   - kmod_module_dependency_symbol_get_crc()
   - kmod_module_versions_free_list()
   - kmod_module_symbols_free_list()
   - kmod_module_dependency_symbols_free_list()

* unify code from modprobe and libkmod:
   - remove kmod_module_probe_insert() and turn it into
     kmod_module_probe_get_list(); this way modprobe can use it too

* 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:
===========


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

* list of currently loaded modules
	- readdir() in /sys/modules: dirs without a 'initstate' file mean the
	  modules is builtin.

* module's size should be available under /sys
	- DONE in 3.3: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=cca3e707301862ca9b9327e6a732463982f8cd1b

* kill /proc/modules ?
	- Unlikely, given other tools might depend on it

Things that are different from module-init-tools on purpose (!TODO)
===================================================================

modprobe
--------

* 'modprobe -l' was marked as deprecated and does not exist anymore

* 'modprobe -t' is gone, together with 'modprobe -l'

* there's and additional '--remove-dependencies' flags to kmod-modprobe so we
  can remove modules depending on that one

* kmod-modprobe doesn't parse configuration files whose name don't end on
  '.alias'  or '.conf'. modprobe used to warn about these files.

* kmod-modprobe doesn't parse 'config' and 'include' commands in configuration
  files.

* we don't use <module-dir>/modules.builtin{,.bin} indexes. Instead we rely on
  module appearing on /sys/modules/* without a initstate file to determine if
  it is builtin.

* modprobe from m-i-t does not honour softdeps for install commands. E.g.:
  config:

        install bli "echo bli"
	install bla "echo bla"
	softdep bla pre: bli

  With m-i-t, the output of 'modprobe --show-depends bla' will be:
        install "echo bla"

  While with kmod:
        install "echo bli"
        install "echo bla"

* kmod doesn't dump the configuration as is in the config files. Instead it
  dumps the configuration as it was parsed. Therefore, comments and file names
  are not dumped, but on the good side we know what the exact configuration
  kmod is using. We did this because if we only want to know the entire content
  of configuration files, it's enough to use find(1) in modprobe.d directories

depmod
------

* there's no 'depmod -m' option: legacy modules.*map files are gone

lsmod
-----

* information is parsed from /sys instead of /proc/modules
