Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / src / MLtonLibraryProject.adoc
1 MLtonLibraryProject
2 ===================
3
4 We have a https://github.com/MLton/mltonlib[MLton Library repository]
5 that is intended to collect libraries.
6
7 =====
8 https://github.com/MLton/mltonlib
9 =====
10
11 Libraries are kept in the `master` branch, and are grouped according
12 to domain name, in the Java package style. For example,
13 <:VesaKarvonen:>, who works at `ssh.com`, has been putting code at:
14
15 =====
16 https://github.com/MLton/mltonlib/tree/master/com/ssh
17 =====
18
19 <:StephenWeeks:>, owning `sweeks.com`, has been putting code at:
20
21 =====
22 https://github.com/MLton/mltonlib/tree/master/com/sweeks
23 =====
24
25 A "library" is a subdirectory of some such directory. For example,
26 Stephen's basis-library replacement library is at
27
28 =====
29 https://github.com/MLton/mltonlib/tree/master/com/sweeks/basic
30 =====
31
32 We use "transparent per-library branching" to handle library
33 versioning. Each library has an "unstable" subdirectory in which work
34 happens. When one is happy with a library, one tags it by copying it
35 to a stable version directory. Stable libraries are immutable -- when
36 one refers to a stable library, one always gets exactly the same code.
37 No one has actually made a stable library yet, but, when I'm ready to
38 tag my library, I was thinking that I would do something like copying
39
40 =====
41 https://github.com/MLton/mltonlib/tree/master/com/sweeks/basic/unstable
42 =====
43
44 to
45
46 =====
47 https://github.com/MLton/mltonlib/tree/master/com/sweeks/basic/v1
48 =====
49
50 So far, libraries in the MLton repository have been licensed under
51 MLton's <:License:>. We haven't decided on whether that will be a
52 requirement to be in the repository or not. For the sake of
53 simplicity (a single license) and encouraging widest use of code,
54 contributors are encouraged to use that license. But it may be too
55 strict to require it.
56
57 If someone wants to contribute a new library to our repository or to
58 work on an old one, they can make a pull request. If people want to
59 work in their own repository, they can do so -- that's the point of
60 using domain names to prevent clashes. The idea is that a user should
61 be able to bring library collections in from many different
62 repositories without problems. And those libraries could even work
63 with each other.
64
65 At some point we may want to settle on an <:MLBasisPathMap:> variable
66 for the root of the library project. Or, we could reuse `SML_LIB`,
67 and migrate what we currently keep there into the library
68 infrastructure.