5784cee3429f2568696aa4828767cbf13dc0945e
[scons.git] / doc / developer / preface.xml
1 <!--
2
3   __COPYRIGHT__
4
5   Permission is hereby granted, free of charge, to any person obtaining
6   a copy of this software and associated documentation files (the
7   "Software"), to deal in the Software without restriction, including
8   without limitation the rights to use, copy, modify, merge, publish,
9   distribute, sublicense, and/or sell copies of the Software, and to
10   permit persons to whom the Software is furnished to do so, subject to
11   the following conditions:
12
13   The above copyright notice and this permission notice shall be included
14   in all copies or substantial portions of the Software.
15
16   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17   KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
24 -->
25
26   <para>
27
28   This document assumes that you already know how &SCons;
29   and that you want to learn how to work on the code.
30
31   </para>
32
33   <section>
34   <title>&SCons; Principles</title>
35
36     <para>
37
38     There are a few overriding principles
39     we try to live up to in designing and implementing &SCons:
40
41     </para>
42
43     <variablelist>
44
45       <varlistentry>
46       <term>Correctness</term>
47
48       <listitem>
49       <para>
50
51       First and foremost,
52       by default, &SCons; guarantees a correct build
53       even if it means sacrificing performance a little.
54       We strive to guarantee the build is correct
55       regardless of how the software being built is structured,
56       how it may have been written,
57       or how unusual the tools are that build it.
58
59       </para>
60       </listitem>
61       </varlistentry>
62
63       <varlistentry>
64       <term>Performance</term>
65
66       <listitem>
67       <para>
68
69       Given that the build is correct,
70       we try to make &SCons; build software
71       as quickly as possible.
72       In particular, wherever we may have needed to slow
73       down the default &SCons; behavior to guarantee a correct build,
74       we also try to make it easy to speed up &SCons;
75       through optimization options that let you trade off
76       guaranteed correctness in all end cases for
77       a speedier build in the usual cases.
78
79       </para>
80       </listitem>
81       </varlistentry>
82
83       <varlistentry>
84       <term>Convenience</term>
85
86       <listitem>
87       <para>
88
89       &SCons; tries to do as much for you out of the box as reasonable,
90       including detecting the right tools on your system
91       and using them correctly to build the software.
92
93       </para>
94       </listitem>
95       </varlistentry>
96
97     </variablelist>
98
99     <para>
100
101     In a nutshell, we try hard to make &SCons; just
102     "do the right thing" and build software correctly,
103     with a minimum of hassles.
104
105     </para>
106
107   </section>
108
109   <section>
110   <title>Acknowledgements</title>
111
112     <para>
113
114     &SCons; would not exist without a lot of help
115     from a lot of people,
116     many of whom may not even be aware
117     that they helped or served as inspiration.
118     So in no particular order,
119     and at the risk of leaving out someone:
120
121     </para>
122
123     <para>
124
125     First and foremost,
126     &SCons; owes a tremendous debt to Bob Sidebotham,
127     the original author of the classic Perl-based &Cons; tool
128     which Bob first released to the world back around 1996.
129     Bob's work on Cons classic provided the underlying architecture
130     and model of specifying a build configuration
131     using a real scripting language.
132     My real-world experience working on Cons
133     informed many of the design decisions in SCons,
134     including the improved parallel build support,
135     making Builder objects easily definable by users,
136     and separating the build engine from the wrapping interface.
137
138     </para>
139
140     <para>
141
142     Greg Wilson was instrumental in getting
143     &SCons; started as a real project
144     when he initiated the Software Carpentry design
145     competition in February 2000.
146     Without that nudge,
147     marrying the advantages of the Cons classic
148     architecture with the readability of Python
149     might have just stayed no more than a nice idea.
150
151     </para>
152
153     <para>
154
155     Thanks to Peter Miller
156     for his splendid change management system, &Aegis;,
157     which has provided the &SCons; project
158     with a robust development methodology from day one,
159     and which showed me how you could
160     integrate incremental regression tests into
161     a practical development cycle
162     (years before eXtreme Programming arrived on the scene).
163
164     </para>
165
166     <para>
167
168     And last, thanks to Guido van Rossum
169     for his elegant scripting language,
170     which is the basis not only for the &SCons; implementation,
171     but for the interface itself.
172
173     </para>
174
175   </section>