kmod 30
=======

- Improvements
	- Stop adding duplicate information on modules.builtin.alias.bin, just use
	  the modules.builtin.bin index

	- Speedup depmod, particularly under qemu with emulated arch, by
	  avoiding a lot of open/read/close of modules.alias.bin. On an
	  emulated ARM rootfs, depmod with only 2 modules was taking ~32s
	  vs ~0.07s now.

	- Add kmod_module_new_from_name_lookup() which allows doing a lookup by
	  module name, without considering the aliases. Other than that search
	  order is similar to kmod_module_new_from_lookup().

	- modinfo learned the --modname option to explicitely show information
	  about the module, even if there is an alias with the same name. This
	  allows showing information about e.g. kernel/lib/crc32.ko, even if
	  kernel also exports a crc32 alias in modules.alias:

		alias crc32 crc32_pclmul
		alias crc32 crc32_generic

	  Same behavior will be used to other modules and to aliases provided
	  by user/distro.

	- depmod.conf learned a new "excludedir" directive so distro/user can
	  configure more directories to be excluded from its search, besides
	  the hardcoded values "build" and "source".

	- Better group modprobe options on help output under "Management, Query and General".

	- modprobe learned a --wait <MSEC> option to be used together with -r
	  when removing a module. This allows modprobe to keep trying the
	  removal if it fails because the module is still in use. An exponential backoff
	  time is used for further retries.

	  The wait behavior provided by the kernel when not passing O_NONBLOCK
	  to delete_module() was removed in v3.13 due to not be used and the
	  consequences of having to support it in the kernel. However there may
	  be some users, particularly on testsuites for individual susbsystems, that
	  would want that. So provide a userspace implementation inside modprobe for
	  such users. "rmmod" doesn't have a --wait as it remains a bare minimal over
	  the API provided by the kernel. In future the --wait behavior can be added
	  to libkmod for testsuites not exec'ing modprobe for module removal.

	- kmod_module_remove_module() learned a new flag to silence output when
	  caller wants to handle them - this is particularly important for the
	  --wait flag to modprobe, as it's not desired to keep seeing error messages
	  while waiting for the module to be unused.

	- Add SM3 hash algo support to modinfo output, as already available in the kernel.

- Bug Fixes
	- Fix modinfo output when showing information for a .ko module when running
	  on a kernel that has that module as builtin.

	- Fix kmod_module_new_from_lookup() returning > 0 rather than 0
	  when it matches an alias.

	- Fix modinfo segfault when module doesn't exist.

	- Add missing function in the html documentation: kmod_get_dirname().

	- Fix modprobe incorrectly handling number of arguments when prepending values from
	  MODPROBE_OPTIONS environment variable.

	- Fix modprobe -r --remove-dependencies and since "dependencies" was a
	  misnomer, add the preferred argument option: "--remove-holders". This
	  is the same name used by the kernel. It allows users to also remove
	  other modules holding the one that is being removed.

	- Fix off-by-one in max module name length in depmod.

- Infra/internal
	- Start some changes in the out-of-tree test modules in kmod so they are useful
	  for being really inserted in the kernel rather than relying on kmod's mock
	  interface. This helps manual testing and may be used to exercise to test
	  changes in the kernel.

kmod 29
=======

- Improvements
	- Add support to use /usr/local as a place for configuration files. This makes it easier
	  to install locally without overriding distro files.

- Bug fixes
	- Fix `modinfo -F` when module is builtin: when we asked by a specific field from modinfo,
	  it was not working correctly if the module was builtin

	- Documentation fixes on precedence order of /etc and /run: the correct order is
	  /etc/modprobe.d, /run/modprobe.d, /lib/modprobe.d

	- Fix the priority order that we use for searching configuration files. The
	  correct one is /etc, /run, /usr/local/lib, /lib, for both modprobe.d
	  and depmo.d

	- Fix kernel command line parsing when there are quotes present. Grub
	  mangles the command line and changes it from 'module.option="val with
	  spaces"' to '"module.option=val with spaces"'. Although this is weird
	  behavior and grub could have been fixed, the kernel understands it
	  correctly for builtin modules. So change libkmod to also parse it
	  correctly. This also brings another hidden behavior from the kernel:
	  newline in the kernel command line is also allowed and can be used to
	  separate options.

	- Fix a memory leak, overflow and double free on error path

	- Fix documentation for return value from kmod_module_get_info(): we
	  return the number of entries we added to the list

	- Fix output of modules.builtin.alias.bin index: we were writing an empty file due to
	  the misuse of kmod_module_get_info()

- Infra/internal
	- Retire integration with semaphoreci

	- Declare the github mirror also as an official upstream source: now besides accepting
	  patches via mailing list, PRs on github are also acceptable

	- Misc improvements to testsuite, so we can use it reliably regardless
	  of the configuration used: now tests will skip if we don't have the
	  build dependencies)

kmod 28
=======

- Improvements
	- Add Zstandard to the supported compression formats using libzstd
	  (pass --with-zstd to configure)

- Bug fixes
	- Ignore ill-formed kernel command line, e.g. with "ivrs_acpihid[00:14.5]=AMD0020:0"
	  option in it
	- Fix some memory leaks
	- Fix 0-length builtin.alias.bin: it needs at least the index header

kmod 27
=======

- Improvements
	- Link to libcrypto rather than requiring openssl

	- Print a better error message when kernel doesn't support module unload

	- Use PKCS#7 instead of CMS for parsing module signature to be
	  compatible with LibreSSL and OpenSSL < 1.1.0

	- Teach modinfo to parse modules.builtin.modinfo. When using Linux kernel
	  >= v5.2-rc1 it's possible to get module information from this new file. Now
	  modinfo is able to show it instead of an error message that the module is
	  built-in:

	  Before:
	  $ modinfo ext4
	  modinfo: ERROR: Module ext4 not found.

	  After:
	  $ modinfo ext4
	  name:           ext4
	  filename:       (builtin)
	  softdep:        pre: crc32c
	  license:        GPL
	  description:    Fourth Extended Filesystem
	  author:         Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
	  alias:          fs-ext4
	  alias:          ext3
	  alias:          fs-ext3
	  alias:          ext2
	  alias:          fs-ext2

- Bug fixes
	- Do not link python bindings with libpython to be compatible with
	  python3.8

	- Fix module removal with `modprobe -r` when a dependency is built-in.
	  Now it properly ignores them and proceed with removal of other
	  dependencies

	- Fix propagation of return code from install/remove commands to the
	  the probe function. The return values of kmod_module_probe_insert_module()
	  have very specific meanings, do not confuse the caller by return codes
	  from system()

	- Fix softdep config parsing leading to buffer overflow

kmod 26
=======

- Improvements
	- Add more error-checking in library functions and remove warnings on newer
	  toolchains

	- Depmod now handles parallel invoctions better by protecting the temporary
	  files being used

	- Improvements to testsuite and added tests to check the our behavior
	  regardless of the features enabled in the kernel, or libraries we link to

	- Teach the --show-exports option to modprobe. This works similarly to
	  --show-modversions, but it reports the exported symbols from that module.
	  Under the hood this reads the .symtab and .strtab section rather than
	  __versions so it shows useful data even if kernel is configured without
	  modversions (CONFIG_MODVERSIONS)

	- Teach pkcs7 parsing to modinfo by using openssl. This allows modinfo to
	  correctly parse the signature appended to a module by the kernel build
	  system when configured with CONFIG_MODULE_SIG_ALL, or when externally
	  signed by the distro. Traditionally modules were signed and a struct
	  was appended together with the signature to the end of the module.
	  This has changed on the kernel for pkcs#7 and now the structure isn't
	  filled out with useful information.  So we have to parse the signature
	  block in order to return useful data to the user.

	  If kmod is linked with openssl we parse the signature and return the
	  fields as we do for other signatures. An example of the relevant part
	  on the output of modinfo is below:

	  Before:
		  sig_id:         PKCS#7
		  signer:
		  sig_key:
		  sig_hashalgo:   md4
	  After:
		  sig_id:         PKCS#7
		  signer:         Fedora kernel signing key
		  sig_key:        51:C4:0C:6D:7E:A5:6C:D8:8F:B4:3A:DF:91:78:4F:18:BC:D5:E4:C5
		  sig_hashalgo:   sha256

	  If kmod is not linked to openssl we just start printing "unknonwn" in the
	  sig_hashalgo field rather than the bogus value.


kmod 25
=======

- Improvements
	- Add module signature to modinfo output

	- Add support for external directories in depmod: now there's a new
	  "external" keyword parsed by depmod when calculating the dependencies.
	  It allows to add modules to other directories which are not relative
	  to where the modules are commonly installed.  This results in
	  modules.dep and friends now understanding absolute paths rather than
	  relative paths only. For more information see depmod.d(1).

	- Add support for CONFIG_MODULE_REL_CRCS

	- Add missing documentation references in man pages

	- Handle the case in which module has a .TOC symbol already while
	  calculating dependencies

	- Improve testsuite and allow to use mkosi to run testsuite in different
	  distros

kmod 24
=======

- Improvements:
	- Add more information on dependency loop

	- Sanitize use of strcpy and allow to grow from small strings on stack
	  (common case) to bigger strings on heap when needed

- Bug fixes
	- Fix wrong dependency loops being reported by depmod

	- Fix crashes when reporting dependency loops

	- Fix parsing kernel command line containing quotes

	- Fix leaks on error paths

kmod 23
=======

- Improvements:
	- Don't add comment to modules.devname if it would otherwise be empty
	  to play nice with tools detecting empty files

	- Allow building with BSD sed, that doesn't have -E flag

	- Ignore .TOC. symbols in depmod parsing as it's for PPC64 the
	  equivalent of _GLOBAL_OFFSET_TABLE_

	- Teach modinfo about PKCS#7 module signatures: it doesn't add any
	  other info besides telling the user the module is signed since
	  kernel doesn't add other info on the module section

- Bug fixes

	- Fix -s and -p compat options to insmod triggering force flag

	- Fix long lines from /proc/modules not being handled correctly by
	  kmod_module_new_from_loaded() and kmod_module_get_size() and several
	  other library functions that use them

	- Fix crash on modinfo while checking for available signature of
	  unknown type

	- Fix documentation generation with gtk-doc

kmod 22
=======

- Tools:
	- Change defaul log level for tools to WARNING rather than ERROR and update
	  some log levels for current messages

	- depmod doesn't fallback to uname if a bad version is passed in the command
	  line anymore. We just exit with an error.

	- insmod was taught the -f flag, just like in modprobe. It was previously
	  silently ignoring it.

- libkmod
	- New kmod_get_dirname() API to get the module directory set in the
	  context

- Bug fixes:
	- Fix return code in error path of kmod_module_insert_module(). We were
	  previously returning ENOSYS rather than ENOENT.

kmod 21
=======

- New features:
	- kmod tool started to learn the "insert" and "remove" commands that
	  are the simplified versions of the older modprobe tool.  These
	  commands are still work in progress so they are hidden behind a
	  --enable-experimental flag during build.  It should not be enabled
	  unless you know what you're doing.
	- kmod tool now prints the relevant configuration options it was built
	  with when the "--version" argument is passed. This helps to mitigate
	  problems for example when the user is trying to load a compressed
	  module but kmod was built without support for the compression method.

- Improvements to testsuite:
	- Cache built modules so it is easier to run "make check" on build
	  servers by distro maintainers. If kmod is configured with
	  --disable-test-modules the modules from cache will be used by
	  "make check". No changes to the tests are needed and all of them
	  can run fine.

kmod 20
=======
- Bug fixes:
	- Handle bogus values from ELF, making sure they don't overflow while
	  parsing the file
	- Fix leak in depmod when -b flag is passed multiple times
	- Multiple minor fixes from static analysis by coverity and
	  clang-analyze
	- Fix race between loading modules and checking if it's loaded in the
	  kernel

- New features:
	- There's a change in behavior regarding builtin modules: we now only
	  consider as builtin those that are present in modules.builtin index.
	  Previously we were also checking the presence of
	  /sys/module/<module-name>, but this is racy and only modules that
	  contain parameters are the ones creating a directory in sysfs.

	  Now some commands will start to fail, e.g. "modprobe vt". Since vt
	  can't be compiled as a module it's not present in modules.builtin
	  index. Previously we would report at as builtin, but now we fail
	  because we couldn't find the module.

- Improvements:
	- Integration of gcov into the build. Currently libkmod is at ~70%
	  covered and tools at ~50% by tests in the testsuite. Utility
	  functions and structures in shared have more than 90% of coverage.
	- Upload build to coverity

- Improvements to testsuite:
	- Fix parsing return codes of init_module() calls
	- Add tests for utility functions in shared/
	- Add tests for kmod_module_remove_module()
	- Add playground, in which our own modules are compiled
	- Port all tests to use modules from module-playground instead of
	  copying prebuilt modules to the repository
	- Properly handle binaries that exit with no output
	- Besides comparing the output of commands, allow to copy to
	  stdout/stderr

kmod 19
=======

- Bug fixes:
	- Fix missing CLOEXEC in library
	- Fix error message while opening kmod's index

- New features:
	- Add kmod(8) man page
	- Allow to build with libc's without be32toh()
	- Move code around separating common code and data structures into a
	  shared directory. This allows to share more code between library and
	  tools, making the binary size of tools smaller.
	- Clarify tools vs library licenses
	- static-nodes: when writing in tmpfiles format, indicate that
	  creation of static nodes should only happen at boot. This is used and
	  required by systemd-217+.

- Improvements to testsuite:
	- Add tests for newly created shared/ code
	- Improve how tests are declared so there's less boilerplate code for
	  each test.

kmod 18
=======

- Bug fixes:
	- Fix leaks in error paths
	- Fix use-after-free in hash implementation causing a wrong index to be
	  generated by depmod with out-of-tree modules

- New features:
	- Calling depmod with modules creating a dependency loop will now make
	  depmod return an error and not update the indexes. This is to protect
	  the current index not being overridden by another index that may cause
	  a boot failure, depending on the buggy module. It's a necessary
	  change in behavior regarding previous kmod releases and
	  module-init-tools. The error message was also improved to output
	  the modules that caused the dependency cycle.

- Improvements to testsuite:
	- Fix and improve expected-fail test
	- Add tests for hashmap implementation

kmod 17
=======

- Bug fixes:
	- Fix matching a "." in kernel cmdline, making garbage in the command
	  line be parsed as kmod options
	- Fix man pages to clarify we don't fallback to parsing modules.dep
	  but instead we depend on modules.dep.bin (generated by depmod) to
	  be present
	- Fix ELF parsing on 32 bit systems assigning the wrong class.
	- Fix partial matches of search directives in depmod. Previously having
	  a line in depmod.conf such as "search foo foobar built-in" would cause
	  unpretictable results because foo is a partial match of foobar as well.
	- Fix unaligned access in modinfo when getting the signature from a
	  module
	- Make sure softdeps are treated as optional dependencies

- New features:
	- Accept special files given to "-C" switch in modprobe. This way it's
	  possible to skip system configuration with "modprobe -C /dev/null"
	- Do not require xsltproc on released tarballs
	- Don't use Werror anymore
	- Add experimental python bindings, merged from python-kmod repository
	  (https://github.com/agrover/python-kmod)
	- Parse softdeps exported by the kernel as
	  /lib/modules/`uname -r`/modules.softdep

- Improvements to testsuite:
	- Check the list of loaded modules after a test

kmod 16
=======

- Bug fixes:
	- Fix usage of readdir_r()
	- Add some missing checks for memory allocation errors

- New features:
	- Remove option from libkmod to allow waiting on module removal if
	  the module is being used. It's dangerous since it can block the
	  caller indefinitely.
	- Improve compatibility with musl libc
	- Add fallback implementation for compilers without _Static_assert(),
	  e.g. gcc < 4.6
	- Minor optimizations to the hash table
	- Make depmod warn if a module has incorrect devname specification
	- Use cleanup attribute

kmod 15
=======

- Bug fixes:
	- kmod static-nodes doesn't fail if modules.devname isn't available
	- Fix getting boolean parameter from kernel cmdline in case the value
	  is omitted
	- Fix some mkdir_p() corner cases (used in testsuite and static-nodes)

- New features:
	- kmod static-nodes creates parent directories if given a -o option
	- kmod binary statically links to libkmod - if distro is only interested
	  in the kmod tool (for example in an initrd) it can refrain from
	  installing the library
	- Add shell completion for kmod tool

kmod 14
=======

- Bug fixes:
	- Fix some format strings
	- Protect against NULL being passed around to index
	- Avoid calling syscall() with -1 when finit_module() is not available,
	  since this doesn't always work
	- Fix not being able to remove alias due to checking the module's
	  refcount
	- Minor fixes and refactors

- New features:
	- Improve libkmod documentation, particularly on how flags are dealt
	  with.
	- Remove ability to build a static libkmod
	- Add static-nodes command to kmod that parses modules.devname
	  generating output in useful formats

kmod 13
=======

- Bug fixes:
	- Add the long option --symbol-prefix option to depmod (it was absent)
	  and fix its behavior
	- Don't abort if there's a bogus line in configuration file like "alias
	  psmouse off". Some distros are carrying this since the days of
	  modutils

- New features:
	- Add support for finit_module(2). If the module is load straight from
	  the disk and without compression we use finit_module() syscall when
	  available, falling back to init_module() otherwise
	- kmod_module_get_info() also returns the signature if the module is
	  signed and modinfo uses it
	- Use secure_getenv if available
	- rmmod understands builtin modules, just like modprobe does
	- Improve compatibility with musl-libc
	- Test cases exit with success when receiving a signal if they are
	  xfail tests

kmod 12
=======

- Bug fixes:
	- Fix removing vermagic from module when told to force load a module
	- Fix removing __versions section when told to force load a module: we
	  need to mangle the section header, not the section.
	- modinfo no longer fails while loading a module from file when path
	  contains ".ko" substring

kmod 11
=======

- Improvements to testsuite:
	- Fix testsuite defining symbols twice on 32 bit systems
	- Allow to check generated files against correct ones

- New features:
	- libkmod now keeps a file opened after the first call to
	  kmod_module_get_{info,versions,symbols,dependency_symbols}. This
	  reduces significantly the amount of time depmod tool takes to
	  execute. Particularly if compressed modules are used.
	- Remove --with-rootprefix from build system. It was not a great idea
	  after all and should not be use since it causes more harm then
	  benefits.
	- Hide --wait option on rmmod. This feature is being targeted for
	  removal from kernel. rmmod still accepts this option, but it's hidden
	  now: man page and usage() say nothing about it and if it's used,
	  user will get a 10s sleep. This way we can check and help if anyone
	  is using this feature.
	- Refactor message logging on all tools, giving proper prefix, routing
	  everything to syslog when asked for, etc.

- Bug fixes:
	- Fix parsing of modules.order when using compressed modules
	- Usage messages go to stdout instead of stderr
	- Fix memory leak in hash implementation

kmod 10
=======

- New features:
	- Read coresize from /sys if supported

	- Add flag to kmod_module_probe_insert() to apply blacklisting during
	  probe only if mod is an alias. Now modprobe uses this flag by default.
	  This is needed to fix a change in behavior regarding module-init-tools
	  and ultimately makes us loading a blacklisted module.

- Better formatting in man pages

- Add option to disable building man pages at build time

- Fixes in the testsuite and refactoring of LDPRELOAD'ed libraries

- Re-licensing testsuite as LGPL

kmod 9
======

- Improvements to the testsuite:
	- Check for correct handling of softdep loops
	- Check for correct handling of install command loops

- Bug fixes:
	- Fix build with compilers that don't support --gc-sections
	- Handle errors when dealing with gzipped modules
	- depmod now handles errors while writing indices, so it doesn't end up
	  with a corrupted index without telling the user

kmod 8
======

- No new features, small bug fixes only.
	- Fix a bug in "modprobe -c" output: be compatible with
	  module-init-tools

	- Give a useful error message when init_module fails due to bad
	  parameter or unknown symbols

	- Fix doc generation

kmod 7
======

- Re-order dirs for configuration files to match the change in systemd and
  udev: now the priority is:
	1. /etc/modprobe.d
	2. /run/modprobe.d
	3. /lib/modprobe.d

- Fix setting CFLAGS/LDFLAGS in build system. This prevented us from not
  allowing the user to set his preferences.

- Bug fixes:
	- Return same error codes of module-init-tools when removing modules
	  with modprobe
	- Fix builtin output in "--show-depends" when target kernel is not the
	  same of the running kernel
	- 'modprobe -r' always look at all command line arguments
	- Fix '-q' usage in modprobe

kmod 6
======

- New API in libkmod:
	- kmod_module_apply_filter(): a generic function to apply filters in a
	  list of modules. This deprecates the use of
	  kmod_module_get_filtered_blacklist()

- More tests in testsuite

- Add compatibility with uClibc again

- Lookup modules.builtin.bin to decide if a module is built in kernel

- Downgrade some log messages so we don't annoy people with useless messages

- Bug fixes:
	- Flag --ignore-loaded was not being properly handled
	- Infinite loop with softdeps
	- Infinite loop with dumb user configuration with install commands
	- Fix leak in index when there's a partial match

- Move repository and tarballs to kernel.org

kmod 5
======

- Break libkmod's API to insert a module like modprobe does. It now accepts
  extra an extra argument to print its action and acceptable flags were
  sanitized.

- Share more code between modprobe and libkmod: using the new version of
  kmod_module_probe_insert_module() it's possible to share a great amount of
  code between modprobe and libkmod

- modprobe no longer works with paths: it only accepts module names and/or
  aliases now.

- testsuite was added to repository, allowing automated tests to be run and
  easing the way bugs are reproduced.

- modprobe: when dumping configuration ('-c' option) separate config
  and indexes by adding a commented line between them.

- Fix bugs wrt normalizing aliases and module names

- Fix bug wrt inserting an alias that resolves to multiple modules: we should
  not stop on the first error, but rather continue to try loading other
  modules.

- Fix unaligned memory access in hash function, causing depmod to output wrong
  information in ARMv5

- Fix man page build and install: now they are only installed if tools are
  enabled

kmod 4
======

- New APIs in libkmod to:
	- Get configuration lists: blacklists, install commands, remove
	  commands, aliases, options and softdeps
	- Dump indexes

- Several bugs fixed in libkmod, modprobe, depmod and modinfo

- API documentation: if configure with run with --enable-gtk-doc, the API doc
  will be generated by make. Gtk-doc is required for that.

- Man pages are built, which replace man pages from module-init-tools

- 'include' and 'config' options in *.conf files were deprecated

- configure is not run by autogen.sh. Instead, a common set of options is
  printed. If you are hacking on kmod, consider using bootstrap-configure
  script.

- 'modprobe -c' works as expected now. As opposed to module-init-tools, it
  dumps the parsed configuration, not only the file contents.

kmod 3
======

- New APIs in libkmod to:
	- Get symbols from module, parsing the ELF section
	- Get dependency symbols
	- Check if resources are still valid or if libkmod must be reloaded
	- Insert module like modprobe, checking (soft-)dependencies, commands,
	  blacklist. It can run commands by itself and to call a callback
	  function.

- Support to load modules compressed with xz

- Tools are now bundled together in a single tool called kmod. It can be
  called using symlinks with the same names as tools from module-init-tools.
  E.g: /usr/bin/lsmod -> /usr/bin/kmod. With this we are aiming to complete a
  1:1 replacement of module-init-tools.

- The only missing tool, depmod, was added to kmod together with the necessary
  APIs in libkmod.

- If a program using libkmod runs for a long time, as for example udev, it must
  check if it doesn't have to re-load libkmod. A new helper function was added
  in libkmod to check if context is still valid and udev is already using it.

- An 'unaligned access' bug was fixed. So those architecture that does not
  handle unaligned access can use kmod, too.

kmod 2
======

Some bugs fixed: the worst of them was with an infinite loop when an alias
matched more than one module.

- New APIs in libkmod to:
	- Get soft dependencies
	- Get info from module files parsing ELF
	- Get modversions from files parsing ELF

- Support to load gzipped kernel modules: kmod can be compiled with support to
  gzipped modules by giving the --enable-zlib flag

- Support to forcefully load modules, both vermagic and modversion

- Support to force and nowait removal flags

- Configuration files are parsed in the same order as modprobe: files are
  sorted alphabetically (independently of their dir) and files with the same
  name obey a precedence order

- New tool: kmod-modinfo

- kmod-modprobe gained several features to be a 1:1 replacement for modprobe.
  The only missing things are the options '--showconfig' and '-t / -l'. These
  last ones have been deprecated long ago and they will be removed from
  modprobe. A lot of effort has been put on kmod-modprobe to ensure it
  maintains compabitility with modprobe.

- linux-modules@vger.kernel.org became the official mailing list for kmod

kmod 1
======

First version of kmod and its library, libkmod.

In the libkmod it's currently possible to:
	- List modules currently loaded
	- Get information about loaded modules such as initstate, refcount,
	  holders, sections, address and size
	- Lookup modules by alias, module name or path
	- Insert modules: options from configuration and extra options can be
	  passed, but flags are not implemented, yet
	- Remove modules
	- Filter list of modules using blacklist
	- For each module, get the its list of options and install/remove
	  commands
	- Indexes can be loaded on startup to speedup lookups later

Tools provided with the same set of options as in module-init-tools:
	- kmod-lsmod
	- kmod-insmod
	- kmod-rmmod
	- kmod-modprobe, with some functionality still missing (use of softdep,
	  dump configuration, show modversions)
