|
34177b0…
|
drh
|
1 |
<title>Checklist For Successful Open-Source Projects</title> |
|
34177b0…
|
drh
|
2 |
<nowiki> |
|
34177b0…
|
drh
|
3 |
|
|
1fd407f…
|
wyoung
|
4 |
This checklist is loosely derived from Tom "Spot" Callaway's Fail Score |
|
34177b0…
|
drh
|
5 |
blog post <a href="http://spot.livejournal.com/308370.html"> |
|
34177b0…
|
drh
|
6 |
http://spot.livejournal.com/308370.html</a> (see also |
|
a59af25…
|
danield
|
7 |
<a href="http://www.theopensourceway.org/book/The_Open_Source_Way-How_to_tell_if_a_FLOSS_project_is_doomed_to_FAIL.html">[1]</a>). |
|
34177b0…
|
drh
|
8 |
Tom's original post assigned point scores to the various elements and |
|
b78ca10…
|
drh
|
9 |
by adding together the individual points, the reader is supposed to be able |
|
34177b0…
|
drh
|
10 |
to judge the likelihood that the project will fail. |
|
34177b0…
|
drh
|
11 |
The point scores, and the items on the list, clearly reflect Tom's |
|
34177b0…
|
drh
|
12 |
biases and are not necessarily those of the larger open-source community. |
|
34177b0…
|
drh
|
13 |
Nevertheless, the policy of the Fossil shall be to strive for a perfect |
|
1fd407f…
|
wyoung
|
14 |
score. |
|
34177b0…
|
drh
|
15 |
|
|
1fd407f…
|
wyoung
|
16 |
This checklist is an inversion of Tom's original post in that it strives to |
|
34177b0…
|
drh
|
17 |
say what the project should do in order to succeed rather than what it |
|
1fd407f…
|
wyoung
|
18 |
should not do to avoid failure. The point values are omitted. |
|
34177b0…
|
drh
|
19 |
|
|
1fd407f…
|
wyoung
|
20 |
See also: |
|
34177b0…
|
drh
|
21 |
<ul> |
|
34177b0…
|
drh
|
22 |
<li><a href="http://offog.org/articles/packaging/"> |
|
34177b0…
|
drh
|
23 |
http://offog.org/articles/packaging/</a> |
|
34177b0…
|
drh
|
24 |
<li> |
|
34177b0…
|
drh
|
25 |
<a href="http://www.gnu.org/prep/standards/standards.html#Managing-Releases"> |
|
34177b0…
|
drh
|
26 |
http://www.gnu.org/prep/standards/standards.html#Managing-Releases</a> |
|
34177b0…
|
drh
|
27 |
</ul> |
|
34177b0…
|
drh
|
28 |
|
|
34177b0…
|
drh
|
29 |
<hr> |
|
34177b0…
|
drh
|
30 |
|
|
34177b0…
|
drh
|
31 |
<ol> |
|
1fd407f…
|
wyoung
|
32 |
<li>The source code size is less than 100 MB, uncompressed. |
|
34177b0…
|
drh
|
33 |
|
|
1fd407f…
|
wyoung
|
34 |
<li>The project uses a Version Control System (VCS). |
|
34177b0…
|
drh
|
35 |
<ol type="a"> |
|
34177b0…
|
drh
|
36 |
<li>The VCS has a working web interface. |
|
34177b0…
|
drh
|
37 |
<li>There is documentation on how to use the VCS. |
|
34177b0…
|
drh
|
38 |
<li>The VCS is general-purpose, not something hacked together for this |
|
34177b0…
|
drh
|
39 |
one project. |
|
34177b0…
|
drh
|
40 |
</ol> |
|
34177b0…
|
drh
|
41 |
|
|
1fd407f…
|
wyoung
|
42 |
<li>The project comes with documentation on how to build from source |
|
34177b0…
|
drh
|
43 |
and that documentation is lucid, correct, and up-to-date. |
|
34177b0…
|
drh
|
44 |
|
|
1fd407f…
|
wyoung
|
45 |
<li>The project is configurable using an autoconf-generated configure |
|
34177b0…
|
drh
|
46 |
script, or the equivalent, and does not require: |
|
34177b0…
|
drh
|
47 |
<ol type="a"> |
|
34177b0…
|
drh
|
48 |
<li>Manually editing flat files |
|
34177b0…
|
drh
|
49 |
<li>Editing code header files |
|
34177b0…
|
drh
|
50 |
</ol> |
|
34177b0…
|
drh
|
51 |
|
|
1fd407f…
|
wyoung
|
52 |
<li>The project should be buildable using commonly available and |
|
34177b0…
|
drh
|
53 |
standard tools like "make". |
|
34177b0…
|
drh
|
54 |
|
|
1fd407f…
|
wyoung
|
55 |
<li>The project does not depend on 3rd-party proprietary build tools. |
|
34177b0…
|
drh
|
56 |
|
|
1fd407f…
|
wyoung
|
57 |
<li>The project is able to dynamically link against standard libraries |
|
34177b0…
|
drh
|
58 |
such as zlib and libjpeg. |
|
34177b0…
|
drh
|
59 |
<ol type="a"> |
|
34177b0…
|
drh
|
60 |
<li>The project does not ship with the sources to standard libraries. |
|
34177b0…
|
drh
|
61 |
<i>(On the Fossil project, we will allow the SQLite library sources |
|
34177b0…
|
drh
|
62 |
to be included in the source tree as long as a system-installed |
|
34177b0…
|
drh
|
63 |
SQLite library can be used in its stead.)</i> |
|
34177b0…
|
drh
|
64 |
<li>The project does not use slightly modified versions of standard |
|
34177b0…
|
drh
|
65 |
libraries. Any required bug fixes in standard libraries are pushed |
|
34177b0…
|
drh
|
66 |
back upstream. |
|
34177b0…
|
drh
|
67 |
</ol> |
|
34177b0…
|
drh
|
68 |
|
|
34177b0…
|
drh
|
69 |
|
|
1fd407f…
|
wyoung
|
70 |
<li>"make install" works and can be configured to target any |
|
34177b0…
|
drh
|
71 |
directory of the installer's choosing. |
|
34177b0…
|
drh
|
72 |
<ol type="a"> |
|
34177b0…
|
drh
|
73 |
<li>The project contains no unconfigurable hard-coded pathnames like |
|
34177b0…
|
drh
|
74 |
"/opt" or "/usr/local". |
|
34177b0…
|
drh
|
75 |
<li>After installation, the source tree can be moved or deleted and |
|
34177b0…
|
drh
|
76 |
the application will continue working. |
|
34177b0…
|
drh
|
77 |
</ol> |
|
34177b0…
|
drh
|
78 |
|
|
34177b0…
|
drh
|
79 |
|
|
1fd407f…
|
wyoung
|
80 |
<li>The source code uses only \n for line endings, not \r\n. |
|
34177b0…
|
drh
|
81 |
|
|
1fd407f…
|
wyoung
|
82 |
<li>The code does not depend on any special compiler features or bugs. |
|
34177b0…
|
drh
|
83 |
|
|
1fd407f…
|
wyoung
|
84 |
<li>The project has a mailing list and announces releases on |
|
34177b0…
|
drh
|
85 |
the mailing list. |
|
34177b0…
|
drh
|
86 |
|
|
1fd407f…
|
wyoung
|
87 |
<li>The project has a bug tracker. |
|
1fd407f…
|
wyoung
|
88 |
|
|
1fd407f…
|
wyoung
|
89 |
<li>The project has a website. |
|
34177b0…
|
drh
|
90 |
|
|
1fd407f…
|
wyoung
|
91 |
<li>Release version numbers are in the traditional X.Y or X.Y.Z format. |
|
34177b0…
|
drh
|
92 |
|
|
1fd407f…
|
wyoung
|
93 |
<li>Releases can be downloaded as tarball using |
|
34177b0…
|
drh
|
94 |
gzip or bzip2 compression. |
|
34177b0…
|
drh
|
95 |
|
|
1fd407f…
|
wyoung
|
96 |
<li>Releases unpack into a versioned top-level directory. |
|
34177b0…
|
drh
|
97 |
(ex: "projectname-1.2.3/"). |
|
34177b0…
|
drh
|
98 |
|
|
1fd407f…
|
wyoung
|
99 |
<li>A statement of license appears at the top of every source code file |
|
34177b0…
|
drh
|
100 |
and the complete text of the license is included in the source code |
|
34177b0…
|
drh
|
101 |
tarball. |
|
34177b0…
|
drh
|
102 |
|
|
1fd407f…
|
wyoung
|
103 |
<li>There are no incompatible licenses in the code. |
|
34177b0…
|
drh
|
104 |
|
|
1fd407f…
|
wyoung
|
105 |
<li>The project has not been blithely proclaimed "public domain" without |
|
f47b705…
|
jan.nijtmans
|
106 |
having gone through the tedious and exacting legal steps to actually put it |
|
34177b0…
|
drh
|
107 |
in the public domain. |
|
34177b0…
|
drh
|
108 |
|
|
1fd407f…
|
wyoung
|
109 |
<li>There is an accurate change log in the code and on the website. |
|
34177b0…
|
drh
|
110 |
|
|
1fd407f…
|
wyoung
|
111 |
<li>There is documentation in the code and on the website. |
|
34177b0…
|
drh
|
112 |
</ol> |