This directory is supposed to contain "extra" modules that are for various
reasons not included in the main distribution, e.g. because they depend
on third party modules with incompatible licenses.
