The core Maxima system (in src) should have consistent, good-quality,
and widely useful notations and functionality that are actively
maintained by us. Every part of the core system should interoperate
nicely with every other part. Functions should cover a large part of
their domain and give clean errors or noun forms when used outside
their domain. Notations should be unambiguous and consistent. All
Maxima programs can depend on the core functionality being available;
incompatible changes should be avoided.
The share directory contains additional functionality which may be
special-purpose or unmaintained. The core system does not depend on
the share directory. Although share packages should strive for the
consistency and quality of the core system, different packages may use
different and non-standard notations or conventions, which are not
necessarily recommended by the Maxima project. Some share packages
may not only not interoperate correctly, but even cause problems if
loaded into the same Maxima system as other share packages. Functions
may only cover special cases, and may even give incorrect results
silently if applied outside their design domain. Implementation
mechanisms may be much more inefficient than core algorithms
(e.g. using pattern matching for simplification). User documentation
for functions defined in share should be contained in the main Maxima
user documentation. Share code should have regression tests, but they
need not be a part of the standard Maxima test suite.
The contrib directory contains packages which may be suitable for the
core system or the share directories, but which have not been
evaluated fully enough to put there.
By these definitions, there are several parts of the core system which
probably belong in share. One is poisson, which interoperates with
almost nothing else. Another is cf, which uses list notation to
represent continued fractions -- no other part of the system
understands this. Then there are cases where I think we agree that
the lack of interoperation is a bug we should fix (e.g. core matrix
inversion doesn't support floats or bfloats).