]> pere.pagekite.me Git - homepage.git/blob - mypapers/free-sw-devel/free-sw-devel.html
Typos.
[homepage.git] / mypapers / free-sw-devel / free-sw-devel.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <link rel="stylesheet" href="../mrtg-td/slides.css" type="text/css">
5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6 <meta name="Language" content="en">
7 <meta name="Author" content="Petter Reinholdtsen">
8 </head>
9 <body>
10
11 <h1>Free software development for beginners</h1>
12
13 <p>An introduction to free software development, for those
14 interested in participating.</p>
15
16 <p><tt><a href="free-sw-devel.html">http://www.hungry.com/~pere/mypapers/free-sw-devel/free-sw-devel.html</a></tt></p>
17
18 <div class="presenter">Petter Reinholdtsen
19 <br>pere@hungry.com
20 <br>IFI/UiO, Forskningsparken rom 207 2004-04-27</div>
21
22 <h2>Who am I</h2>
23
24 <ul>
25
26 <li>been involved in free software development since 1992</li>
27
28 <li>programmer and system administrator</li>
29
30 <li>past and current contributor to several projects (linux,
31 glibc, kde, debian-{edu, gis, java, cdd}, mapserver,
32 openstreetmap.org, skolelinux, etc)</li>
33
34 <li>debian developer</li>
35
36 <li>initiator and current tech coordinator in skolelinux</li>
37
38 <li>currently employed at USIT, UiO</li>
39
40 </ul>
41
42 <h2>Free Software - user freedom</h2>
43
44 <ul>
45
46 <li>freedom to run the program as you wish for any purpose</li>
47 <li>freedom to study and change the source code as you wish</li>
48 <li>freedom to make and redistribute copies</li>
49 <li>freedom to publish modified versions</li>
50
51 </ul>
52
53 <p><em>Richard M. Stallmann, FSF</em></p>
54
55 <h2>Getting involved and helping out</h2>
56
57 <p>So, you found a nice project on Freshmeat, and want to help
58 improve it...</p>
59
60 <ul>
61
62 <li>get used to public review
63 <li>read the project documentation
64 <li>join the relevant mailing list, IRC channels, etc
65 <li>use mailing lists
66 <li>irc, wiki
67 <li>get to know the source
68 <li>understand licensing issues
69 <li>learn to use the bug tracking system (bts)
70 <li>start with the non-coding stuff (translations, documentation)
71 <li>do not take it personally
72
73 </ul>
74
75 <h2>Reporting bugs</h2>
76
77 <p>This software suck. A lot!</p>
78
79 <ul>
80
81 <li>test if the bug exist the latest version
82
83 <li>do not report duplicate bugs, check the bts and mailing
84 lists
85
86 <li>document how to reproduce the bug, and include relevant
87 information. get output from valgrind, strace, gdb and
88 ltrace.
89
90 <li>include info on possible workarounds, and patches if you
91 can.</li>
92
93 <li>add more info if the bug is already reported
94
95 <li>use the relevant bug reporting tool, such as bug-buddy (Gnome),
96 perlbug (Perl), reportbug (Debian) and sendpr (FreeBSD) or
97 use the projects bug reporting web site (bugzilla, request-tracker,
98 gnats, etc. check the project home page)
99
100 <li>remember to follow up your bug report.
101
102 </ul>
103
104 <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=306147">an
105 example</a>
106
107 <h2>Submitting patches</h2>
108
109 <p>Fixing the problem is only half the work.</p>
110
111 <ul>
112 <li>if you can fix the problem you are facing, remember to let
113 the package author know about this.
114 <li>make a patch! (<tt>patch -u file.orig file.new >
115 myfix.diff</tt>)
116 <li>send the patch to the developer list, or possibly into the
117 bts (learn how the developers want it)
118
119 <li>do not forget to follow up the patch. Accept commend and
120 improve it until it is accepted by the developers.
121
122 <li>if you don't make sure the patch is accepted by the
123 developers, you will have to fix the same problem every time you
124 upgrade.
125
126 </ul>
127
128 <h2>Joining a free software project</h2>
129 <ul>
130
131 <li>start by checking out the bugs in the bts
132 <li>try to fix them
133
134 <li>give feedback into the bts on the reported bugs, after trying
135 to reproduce them.
136
137 <li>go through the user documentation, and submit suggestions for
138 improvement
139
140 <li>be active on the mailing lists, provide answers to the
141 questions (and use references tot he user documentation, to save
142 everybody some work)
143
144 <li>make sure the code you write is self documenting, follow the
145 code policy and include enough comments to make the purpose of the
146 code easy to understand.
147 </ul>
148
149 <h2>Starting a free software project</h2>
150
151 <p>I got this idea for a piece of software...</p>
152
153 <ul>
154
155 <li>reuse when possible, prefer to improve existing
156 projects</li>
157
158 <li>read other peoples code, download and test other peoples
159 programs</li>
160
161 <li>understand software licenses
162
163 <li>consider sourceforge
164
165 </ul>
166
167 <p>This software suck. A lot! - Do not take it personally.</p>
168
169 <h2>Use the best free development tools available</h2>
170
171 <ul>
172 <li>compile with lots of warnings
173 <li>use existing libraries, but avoid to many dependencies
174
175 <li>learn to use debugging utilities (gdb, ddd, dmalloc,
176 valgrind, strace, ltrace, electric fence, fncchk, etc)
177 <li>learn to use profiling tools (kprof, gprof, etc)
178 <li>write automatic self testing
179
180 <li>do automatic coverage testing to check the quality of the
181 self test
182
183 </ul>
184
185 <h2>Running a successful free software project</h2>
186
187 <ul>
188
189 <li>be responsive to comments and suggestions
190 <li>write down where you want the project to go
191 <li>do not accept every change. make sure you like it first
192
193 <li>let everyone work on the things that interests them, use the
194 carrot, as you have no whip
195 <li>set up and use a bts
196 <li>create web pages for your project, include screen shots, a
197 short summary and who to contact for more info
198
199 <li>remember to include a README file in the tarball. it should
200 include the home page URL, the download site URL,
201 a short description of the project and where to send bug reports
202 and patches</li>
203 <li>involve the public mailing lists in the decision making
204 <li>automate everything
205
206 <li>set up system for public review of changes (anonymous CVS,
207 commit emails)
208 <li>communicate the intention behind the choice of license
209 </ul>
210
211 <h2>As the project grows larger</h2>
212
213 <p>Leading by example is your only option.</p>
214
215 <ul>
216
217 <li>communicate the project plan to all project members
218 <li>try to reduce friction and avoid hard language
219 <li>keep track of what everyone is working on
220 </ul>
221
222 <h2>Conclusion</h2>
223
224 <ul>
225
226 <li>working on free software is very rewarding and challenging
227
228 <li>nobody owns you a favour, get used to it
229
230 <li>do it for your own gain, not to get rewards from others
231
232 </ul>
233
234 <h2>References</h2>
235
236 <ul>
237
238 <li>"The Practice of Programming" by Kernighan and Pike.
239
240 </ul>
241
242 <h2>Thank you very much</h2>
243
244 <h3>Questions?</h3>
245
246 </body>
247 </html>