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