forked from gap-system/gap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMODULE-PROPOSAL
109 lines (102 loc) · 3.98 KB
/
MODULE-PROPOSAL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
1. What is a module
A module is a part of GAP that
- provides a describable functionality.
- consists of a discrete set of files
[unless there is a very good reason]
- has a well-defined set of authors/maintainers.
- get credited separately (see below)
Typical examples would be:
- Rational functions
- Lie Algebras
- The (Library) MeatAxe
- Stabilizer Chains
- The small groups
- The Mac interface
- GASMAN The memory manager
- the documentation building and conversion scripts
A module has to define its interfaces to the rest of the system.
(Typically this is done in one or more .gd
files but the module proposal could specify something else.)
Code outside the module is should use the modules only through
its published interface, except in special cases, which should be
recorded
somewhere.
2. User interface/documentation
To the user a module integrates seamlessly in the system. Module
credit is
listed in the front of the reference manual (see below).
3. How does code become a module
(As crediting is a minefield the following process is quite formal
-- this
is mainly to avoid later disagreements)
A collection of files becomes a module if the author/maintainer
announces this on gap-dev (specifying a descriptive name and the set
of
files involved, the author list can continue ``historic'' authors who
wrote
the original code but are not maintaining it any longer) a
(noninvolved)
system maintainer seconds this claim, and no member of the GAP group
objects
within one month (so it is essentially a proposal with extra
seconding and a
longer waiting period). (The aim of the seconding is to make sure at
least
one other person has read the announcement and agrees with it.)
Once this is done, the code becomes a module by:
- Storing the description of the original announcement in a `MODULES'
file
in `dev' under CVS.
- Adding the module description to the module credits list in the
manual and
on the web pages.
- Putting the Authors/Maintainers names in the Header of the file.
- An announcement in gap-dev that all this has been done.
(this proposal does not make any statement how modules are stored
(directories &c.))
The creation of modules might require a split of existing files. In
this case
the announcement should specify which files are split this way.
Claiming author/maintainership of a module implicitly includes the
promise
to monitor gap-forum/gap-trouble for problems with the module and to
act as a maintainer of last resort for the module and responder of
last
resort for user questions about the module functionality.
If a module maintainer does not act on problems with the module
within eight
weeks after having been reminded of the outstanding problem (we have
a
person ensuring responses for gap-trouble, haven't we?) the person
finally
fixing the bug or responding the question may claim maintainership.
Depending on the amount of his contribution the previous maintainer
will be
listed as historical author.
Vice versa, anybody who wants to work on someone elses module
should liaise
with the maintainer.
4. Crediting
Modules will be credited with authors/maintainers in the reference
manual
and on a web page. (It is the module proposers responsibility to get
the
module listed this way.) People with substantial contributions to
code not
definable as modules (in my eyes this lists would consist of Thomas,
Martin
and Steve) should be credited separately. The long ``thanks'' list
also
remains in place.
[ the above paragraph was Alexander's. I would add Frank Celler SL]
5. Technical features.
The aim of modules is to provide a visible way to credit
contributions
It also aims to specify ``work areas'' for different
people that will avoid colliding developments. The latter is not a
problem
now, but might become as we are more and more spread apart.
If we want more separation, then we probably want to use
(autoloaded) packages and should consider concepts like private
namespaces in that context.
Steve