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