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 signficantly 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)
