shlomi-fish-homepage / lib / htmls / from-mediawiki / processed / How_to_start_contributing_to_or_using_Open_Source_Software.html

  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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
<h2 id="Introduction_No._1_-_What_is_Open_Source_Software">Introduction No. 1 - What is Open Source Software </h2>

<p>
This introduction will explain what open-source software is in a series of answers to questions. You may wish to skip or skim parts of it depending on your knowledge.

</p>

<h3 id="What_is_software.3F">What is software? </h3>

<p>
While many of the devices and tools we encounter in every day life (e.g: hammers, refrigerators, CD players, pencils, microwave ovens) serve a limited amount of purposes, a computer is a multi-function device, which one needs to instruct what to do. This is done by programming it and the end result is called <b>software</b> which is composed of individual programs and applications.

</p>

<p>
If we take your home computer (a stationary machine, a laptop, a netbook, etc.) as an example, then you can use it to run a web browser, a word processor, a spreadsheet program, some games, and other programs - often at the same time. You can also download for free, purchase or even experience directly through the Internet (say on web-sites containing online games) other programs that you can also run on the computer. Sometimes you can run several alternative programs.

</p>

<p>
Software naturally does not come out of thin air: it has to be programmed by programmers. Some software is distributed in the native computer’s processor machine code and is run directly on it. Some software is distributed directly in modifiable source code (in case the computer already has a different program that can run it directly from there). Some programs take an intermediate approach of implementing a machine-independent bytecode sometimes called a “P-code” which is generated from the source code and then executed. In any case, the source code of the program always exists (or at least existed) somewhere, and is used to prepare it for use and distribution.

</p>

<h3 id="What_is_.E2.80.9Cshrinkwrap.E2.80.9D_software.3F">What is “shrinkwrap” software? </h3>

<p>
Shrinkwrap software is software that its programmers have written for other people to use “in the wild”. It can be sold in shops, bought through the Internet, downloaded free of charge, or whatever, but it is still expected to be of general use to a substantial number of people who would like to use it. You can find a lot of programs like that on Software development hubs (“Forges”) such as <a href="http://sourceforge.net/">SourceForge</a>, on software directories such as <a href="http://freecode.com/">Freecode</a>, and on many other sites.

</p>

<p>
It may seem surprising to some people, but the vast majority of the source code in the world <b>is not</b> intended for shrinkwrap software. A lot of the code out there is used in-house: by banks, governments, companies and individuals and a lot of it is intended to power various embedded devices. Let’s suppose you’ve opened a spreadsheet and wrote a simple formula (such as “=$A1+B$2”). This little formula is code, and unless you’re going to share your spreadsheet with the world (which most people won’t for various reasons) it will remain in-house code. A UNIX command-line user may write many small programs at the command line prompt every day, (such as “grep -F hello *“ to search for files containing the word “hello”) and not only are these programs not going to be released to the public, they are likely going to end up being thrown away after they became functional, ran and yielded the correct results. It is likely that the amount of in-house or throwaway code written in programmable tools like the spreadsheet program, or the UNIX command-line, multiplies the amount of code in the original tool pretty quickly.

</p>

<p>
<b>Open source software</b> is one type of shrinkwrap software, which, like we said, is intended to be used in the wild by other people, which may actually be sold commercially or otherwise give some commercial benefits to its developers, and as such be considered “commercial software”.  Other types include commercial software that is not open-source (sometimes called “proprietary software”) which needs to be bought for money, non-open-source software which does not cost money (often called <b>“freeware”</b>), and <b>shareware</b> which can be downloaded free-of-charge but requires money for enhanced use, such as using beyond a trial period, getting rid of a nag screen, or enabling extended features.

</p>

<p>
Now let’s see what makes open source software different.

</p>

<h3 id="What_is_open_source_software.3F">What is open source software? </h3>

<p>
For the sake of the explanation, you’ll also hear people refer to open source software as <b>free software</b> (where “free” means “libre” and not “gratis”), “free and open source software” (or “FOSS” for short) or even “FLOSS - free, libre, and open source software”. All these names refer to the same phenomenon with some different semantic and ideological associations.

</p>

<p>
The <a href="http://www.gnu.org/philosophy/free-sw.html">“Free Software Definitions”</a> is possibly the most succinct definition of how open source software needs to be licensed in order to be considered open source:

</p>


<ul>

<li>
 The freedom to run the program, for any purpose (freedom 0).

</li>

<li>
 The freedom to study how the program works, and change it to make it do what you wish (freedom 1). Access to the source code is a precondition for this.

</li>

<li>
 The freedom to redistribute copies so you can help your neighbor (freedom 2).

</li>

<li>
 The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.

</li>

</ul>

<p>
Basically, a piece of open source software ships has its original human-readable and modifiable source code available, can be run and used for any purpose, and can be modified internally or externally and even “forked” (i.e: span-off as a competing project).

</p>

<p>
Nevertheless, this definition still gives some room to maneuver for licensing. Sometimes, downloaded copies of FOSS can be converted into a different licence by any third party (these are called “permissive licences” or “BSD-style licences”), but often code that includes the FOSS code or even just calls subroutines from it needs to be licensed under a similar, free licence. The latter is referred to as “copyleft” and is the foundation of such licences as the <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License">GNU General Public License (GPL)</a> or the <a href="http://en.wikipedia.org/wiki/LGPL">GNU Lesser General Public License (LGPL)</a>, and many similar licenses.

</p>

<p>
In any case, one should understand that being open source does not stand against commercialism or Capitalism. There are many commercial companies which publish a lot of their code under open-source licences (many of which are profitable), and many individuals are making a decent living out of working on open-source code. One can sell support and services around open-source code, and as some people like to say “our code is free - our time (and yours) isn’t.”.

</p>

<h2 id="Why_open_source_software.3F">Why open source software? </h2>

<p>
There are several aspects that make open source software superior:

</p>


<ol>

<li>
 Usually, one can legally download the open-source applications, use them or even modify and adapt them for different needs, <b>legally</b> and free of charge. Despite all that, it is perfectly legal to sell open-source software (or services that relate to them), but in this day and age of cheap, common, and fast Internet, many people will opt not to pay for it.

</li>

<li>
 Many open-source projects make a smart use of the Internet for getting input from users, customising the software according to it, or even accepting contributions from co-developers. (This has been referred to as <a href="http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar">the Bazaar style of development</a>.)

</li>

<li>
 Open source software can be adapted to overcome its limitations (such as bugs, missing features, or broken compatibility), either by oneself, or by hiring or convincing someone to do that for you. Source code tends to be much more adaptable to changes in the deployment platform than binary executables.

</li>

<li>
 Open source software encourages a culture of “freedom”, “openness” and sharing, which stands as opposed to the helplessness and resentment that users of proprietary software often feel.

</li>

<li>
 One can point to one’s contributions to open source software as a portfolio of previous work which is both free and legal to examine and be impressed from. Furthermore, often other people on the Internet will contact you about your open-source project which will allow you to gain more recognition.

</li>

</ol>

<p>
Naturally, there may be many important downsides to the open source development model, but we believe that it is advantageous in many cases.

</p>

<h2 id="How_to_start_using_open-source_software.3F">How to start using open-source software? </h2>

<p>
Now that we’ve understood what open source software is, and assuming you think it’s a cool idea that you’d like to contribute to (or just benefit from), let’s see how you can start to use it, which is normally a prerequisite for contributing to it.

</p>

<h3 id="Using_Native_Windows_Open_Source_Software">Using Native Windows Open Source Software </h3>

<p>
Assuming you’re still using Microsoft Windows, you may wish to play with some open-source software that can be installed and run on Windows. For this head to <a href="http://www.opensourcewindows.org/">the “Open Source Windows (software)” site</a> and install and play with the applications featured there, and possibly use them in production. There is a lot of other open source applications for Windows listed on <a href="https://help.ubuntu.com/community/ListOfOpenSourcePrograms">The List of Open Source Programs (LOOP)</a>.

</p>

<h3 id="Playing_with_Linux">Playing with Linux </h3>

<p>
After you’ve installed many open-source applications for Windows, you may wish to perform the next logical step and play with Linux, which is a close-to-entirely-free operating system usable as a comfortable and stable desktop for one’s PC. Linux is an operating system and as such serves as a host for other programs, similar to the fact that Microsoft Windows is an operating system that hosts many applications each as different processes and as different windows.

</p>

<p>
Linux is not entirely compatible with Windows, but the graphical user interface (GUI) is similar enough to become comfortable with it. Despite common prejudice, Linux is not exclusively intended for programmers or only for “computer geeks” and common people can become comfortable with it. In fact, it tends to work better, and be more transparent, reliable and secure than Microsoft Windows.

</p>

<p>
The good news is that you can install Linux while being able to keep your Windows installation and continue using it, and switch from Linux to Windows (or even use them at the same time). The ways to install Linux from the most intimidating to the least intimidating one are:

</p>


<ol>

<li>
 <b>Repartition your hard disk.</b> This means that an installation of the Linux operating system will be installed side by side with the Windows installation, allowing you to choose which one to use during boot. This process normally progresses fine, but may result in data loss if the computer loses power or you’ve done something wrong with the installation, so it’s advisable to backup first.

</li>

<li>
 <b>LiveCD/LiveUSB</b> - a Linux LiveCD, LiveDVD or LiveUSB is a self-contained Linux distribution that boots up and runs directly from the CD drive or USB stick without requiring installation on the hard-disk, and while leaving the host system in tact. The downside is that any changes not saved on the hard-disk will be lost after a reboot, and reportedly using a LiveCD for prolonged periods tends to ruin the CD-ROM drive.

</li>

<li>
 <b>Virtual Machine (VirtualBox, qemu)</b> - in this scheme, one runs Linux inside a virtual machine, meaning an emulated computer running inside a window on the host system (Microsoft Windows in our case). The virtual machine still has networking and can communicate with the host system, but otherwise does not interfere with it. The downside is that Linux will likely run slower this way.

</li>

</ol>

<p>
Of these, it is recommended to start by installing Linux inside a virtual machine inside a good virtual machine emulator such as <a href="http://www.virtualbox.org/">the open-source and free VirtualBox</a>.

</p>

<h3 id="Which_Linux_to_Choose.3F">Which Linux to Choose? </h3>

<p>
Since the Linux operating system and its individual components are all open-source and can be freely packaged and distributed, this spawned a proliferation of <b>Linux distributions</b>, which after being installed, provide similar functionality but with different packaging, different distribution-specific modifications and customisation to the components of the system, and somewhat different philosophies. Most Linux distributions are pretty niche, or otherwise not ready for general use (if not no longer actively maintained or went out of fashion). Here is a short list of the most recommended distributions:

</p>


<ol>

<li>
 <a href="http://www.ubuntu.com/">Ubuntu Linux</a> - probably the most popular desktop distribution, Ubuntu has semi-annual releases and aims to provide a polished desktop experience.

</li>

<li>
 <a href="http://fedoraproject.org/">Fedora</a> - a free distribution from Red Hat Inc. with semi-annual releases, and good desktop polish.

</li>

<li>
 <a href="http://www.mandriva.com/">Mandriva Linux</a> - a free desktop-oriented distribution with semi-annual releases, good integration between the components and good desktop polish.

</li>

<li>
 <a href="http://www.mepis.org/">MEPIS</a> - a desktop-oriented distribution based on Debian.

</li>

</ol>

<p>
These are all intended to be installed on the hard-disk or on a virtual machine.

</p>

<p>
Some recommended Live CD / Live DVD distributions are:

</p>


<ol>

<li>
 <a href="http://www.knoppix.net/">Knoppix</a>

</li>

<li>
 <a href="http://www2.mandriva.com/linux/which/">Mandriva One</a>

</li>

<li>
 <a href="http://www.pclinuxos.com/">PCLinuxOS</a>

</li>

</ol>

<p>
Whatever you do make sure you avoid the “distribution hopping”-syndrome where you hop from one distribution to another after running into a few difficulties with one distribution. Choose one distribution and stick with it, as you are likely to encounter different issues in a different distribution.

</p>

<h2 id="Should_you_aspire_for_.E2.80.9Csainthood.E2.80.9D.3F">Should you aspire for “sainthood”? </h2>

<p>
Some ardent supporters of open-source software will claim that using non-open-source software is immoral, and that one should aspire for “sainthood” by using open-source software exclusively, up to not using non-open-source operating systems such as Microsoft Windows. While such stance may be appealing to some, we recommend that you don’t follow it, at least not right away. You will likely still need your Windows partition, in part so you can test that the open-source applications of you or others work there properly and are well-supported. Furthermore, the main issue is open source software vs. proprietary software, not Linux vs. Windows.

</p>

<h2 id="Contributing">Contributing </h2>

<p>
OK, you’ve been using open-source software, have played with Linux (or even are using it daily), and now you’re interested in contributing to some open-source applications you like. First of all, welcome aboard, we could use all the help we can get and we hope you find it a pleasant experience.

</p>

<h3 id="Some_Mental_Preparation">Some Mental Preparation </h3>

<p>
Contributing to open-source software can be fun and rewarding. Yet, it will likely be a bumpy road, as you may find that some people you interact with are rude or insulting. The important thing to remember is not to give up.

</p>

<p>
It’s OK to become insulted and discouraged for a while. <a href="http://en.wikipedia.org/wiki/Lawrence_Lessig">Lawrence Lessig</a>, a law professor who has written several books about the free culture of the Internet, and has projected <a href="http://creativecommons.org/">the Creative Commons initiative</a>, had this to write in <a href="http://remix.lessig.org/">his book <i>Remix</i></a>:

</p>

<blockquote>


<p>

I find it insanely difficult to read these comments [to my blog posts]. Not because
they’re bad or mistaken, but mainly because I have very thin skin.
There’s a direct correlation between what I read and pain in my
gut. Even unfair and mistaken criticism cuts me in ways that are
just silly. If I read a bad comment before bed, I don’t sleep. If I trip
upon one when I’m trying to write, I can be distracted for hours. I
fantasize about creating an alter ego who responds on my behalf.
But I don’t have the courage for even that deception. So instead,
my weakness manifests itself through the practice (extraordinarily
unfair to the comment writer) of sometimes not reading what others
have said.

</p>


<p>

So then why do I blog all? Well, much of the time, I have no
idea why I do it. But when I do, it has something to do with an ethic
I believe that we all should live by. I first learned it from a judge I
clerked for, Judge Richard Posner. Posner is without a doubt the
most significant legal academic and federal judge of our time, and
perhaps of the last hundred years. He was also the perfect judge to
clerk for. Unlike the vast majority of appeals court judges, Posner
writes his own opinions. The job of the clerk was simply to argue.
He would give us a draft opinion, and we’d write a long memo in
critique. He’d use that to redraft the opinion.

</p>


<p>

I gave Posner comments on much more than his opinions. In
particular, soon after I began teaching he sent me a draft of a book,
which would eventually become Sex and Reason. Much of the book
was brilliant. But there was one part I thought ridiculous. And in a
series of faxes (I was teaching in Budapest, and this was long before
e-mail was generally available), I sent him increasingly outrageous
comments, arguing about this section of the book.

</p>


<p>

The morning after I sent one such missive, I reread it, and was
shocked by its abusive tone. I wrote a sheepish follow-up, apologizing,
and saying that of course, I had endless respect for Posner, blah,
blah, and blah. All that was true. So too was it true that I thought
my comments were unfair. But Posner responded not by accepting
my apology, but by scolding me. And not by scolding me for my
abusive fax, but for my apology. “I’m surrounded by sycophants,”
he wrote. “The last thing in the world I need is you to filter your
comments by reference to my feelings.”

</p>


<p>

I was astonished by the rebuke. But from that moment on, I
divided the world into those who would follow (or even recommend)
Posner’s practice, and those who wouldn’t. And however
attractive the anti-Posner pose was, I wanted to believe I could
follow his ethic: Never allow, or encourage, the sycophants. Reward
the critics. Not because I’d ever become a judge, or a public figure
as important as Posner. But because in following his example,
I would avoid the worst effects of the protected life (as a tenured
professor) that I would lead.

</p>

</blockquote>

<p>
So even if you, like Prof. Lessig, have a thin skin, and can get discouraged by a bad comment, it’s important not to give up completely. It’s OK to feel down for a while, but understand that the feeling will pass and you will eventually be recognised for the work you invest in contributing to open source.

</p>

<p>
There is some good advice on <a href="http://unarmed.shlomifish.org/909.html">handling Internet criticism</a>  on the “Unarmed but still Dangerous” blog, which builds upon the excellent advice given by <a href="http://en.wikipedia.org/wiki/David_D._Burns">Dr. David D. Burns</a> in the book <a href="http://en.wikipedia.org/wiki/Feeling_Good:_The_New_Mood_Therapy"><i>Feeling Good: The New Mood Therapy</i></a>, which is a self-help guide for Cognitive Therapy, and which discusses how to handle criticism and avoid becoming affected by it.

</p>

<h4 id="Consider_Finding_a_Mentor">Consider Finding a Mentor </h4>

<p>
Some people will find it easier to survive as open-source contributors by having a person whom they can consult with and who can guide them. There are several ways to find a mentor:

</p>


<ol>

<li>
 Find one on <a href="https://openhatch.org/">OpenHatch</a>

</li>

<li>
 See the <a href="http://teachingopensource.org/index.php/FOSS_Mentor_Projects">Teaching Open Source Initiative’s List of FOSS Mentor projects</a>

</li>

</ol>
<h3 id="Choose_some_Projects_to_Contribute_to">Choose some Projects to Contribute to </h3>

<p>
The next step is to pick up projects to contribute to. You can choose to contribute to open-source projects that you are actively using such as your distribution, or its various comprising components (the web-browser, the office suite, the Instant Messaging client, the mail client, your favourite text editor, your desktop environment, etc.). Alternatively, you can monitor software announcement sites such as the Linux and open-source oriented <a href="http://freecode.com/">Freecode.com</a> (formerly known as Freshmeat) and find interesting projects to work on there. More recently, <a href="https://openhatch.org/">the OpenHatch site</a> started as a way to connect between wannabe contributors and projects.

</p>

<p>
You may be wondering how you can contribute. There are several ways:

</p>


<ol>

<li>
 The first way, and the first one that comes to most people’s minds is by programming. We’ll get to how you can learn programming later. However, it’s not the only way, and there are many ways you can contribute while still learning how to program.

</li>

<li>
 The second way is to frequent the projects’ online forums (such as their Internet Relay Chat channels, their mailing lists, their web-forums, and so forth) and answer questions or try to find people who can.

</li>

<li>
 Another way is to help maintain the project’s wiki, in case it has one.

</li>

<li>
 Some projects may be interested in providing translations and localisations for the project into non-English languages, so if you are fluent in a foreign tongue, you can volunteer to help maintain the translations.

</li>

<li>
 It is also useful to help the project with <b>bug triaging</b> - trying to reproduce bugs, finding bugs that should be closed, replying to the reporter of the bug or the other project’s maintainers with your findings, etc.

</li>

</ol>

<p>
There are probably other ways to contribute, but the important thing is to pick a few projects to which you wish to contribute and start.

</p>

<h3 id="How_to_Survive_as_an_Open_Source_Contributor">How to Survive as an Open Source Contributor </h3>

<p>
In this section, we will try to briefly touch on various technologies you’ll need to understand in order to effectively contribute to open-source projects. We will refer you to material for further reading.

</p>

<h4 id="The_UNIX.2FLinux_Command_Line">The UNIX/Linux Command Line </h4>

<p>
While Linux is perfectly usable using a graphical user-interface (GUI), it has a different interface called the command line, in which one types commands using the keyboard and receives feedback using a console / terminal output. To use it you can use KDE’s so-called “konsole” console window, or GNOME’s “gnome-terminal”. In order to work on most open-source projects, you will need to have some familiarity with the Linux command-line. Here are some resources to get you started:

</p>


<ol>

<li>
 <a href="http://unixhelp.ed.ac.uk/">UNIXhelp for users</a> is an old, but likely still pertinent guide to the UNIX (and ergo Linux) command line.

</li>

<li>
 <a href="http://tldp.org/guides.html">The Linux Documentation Project’s Guides</a> contain some books that may also prove helpful.

</li>

<li>
 There’s <a href="http://en.wikibooks.org/wiki/Linux_Guide/Using_the_shell">a Wikibook page titled “Linux Guide - Using the shell”</a> and some other resources on <a href="http://en.wikibooks.org/">Wikibooks</a>

</li>

</ol>

<p>
The important thing to realize about the UNIX command line is <b>not to be afraid</b> of it. While it may seem intimidating at first, most people will quickly find it to be very convenient and a very powerful tool. Furthermore, it is often a requirement for people who wish to contribute to open-source projects, as many tasks can only be done or are better done there.

</p>

<h4 id="Build_Systems">Build Systems </h4>

<p>
Open source software is normally distributed as packed and compressed archives of the source code, which need to be built in order to be installed and deployed on the host system. Downstream distributors tend to take the source packages and prepare binary and ready-to-install packages out of them, which are specific to only one particular package manager (such as <a href="http://en.wikipedia.org/wiki/RPM_Package_Manager">rpm</a> or <a href="http://en.wikipedia.org/wiki/dpkg">dpkg</a>). However, if you plan on contributing to an open-source project you’ll need to know how to build its source code.

</p>

<p>
Here’s a coverage of some popular build-systems and how to build code from them:

</p>

<h5 id="perl.E2.80.99s_Module-Build">perl’s Module-Build </h5>

<p>
<a href="http://search.cpan.org/dist/Module-Build/">Module-Build</a> is Perl 5’s newer build system, which is not dependent on the idiosyncrasies of the system’s shell and its make implementation. To use it one should do something like:

</p>

<pre>        $ perl Build.PL
        $ ./Build
        $ ./Build test
        $ ./Build install # as root or using local::lib or some Build.PL arguments to install locally.
</pre>
<h5 id="perl.E2.80.99s_ExtUtils::MakeMaker">perl’s ExtUtils::MakeMaker </h5>

<p>
<a href="http://search.cpan.org/dist/ExtUtils-MakeMaker/">ExtUtils-MakeMaker</a> is Perl 5’s older build system, which generates makefiles and system-specific shell scripts. To use it one should run the following commands:

</p>

<pre>        $ perl Makefile.PL
        $ make
        $ make test
        $ make install # as root or using local::lib or some Makefile.PL arguments to install locally.
</pre>
<h5 id="GNU_Autotools">GNU Autotools </h5>

<p>
<a href="http://teachingopensource.org/index.php/">GNU Autotools</a> are a popular choice for creating cross-platform build systems for C/C++ and similar programs, but they are pretty old, and cause many problems and so many people recommend using something else instead. To build a program that uses GNU Autotools you need to run:

</p>

<pre>       $ ./autogen.sh # Or similar - if building from the raw source.
       $ ./configure --prefix="$HOME/apps/myapp" # And possibly other flags.
       $ make
       $ make install
</pre>
<h5 id="CMake">CMake </h5>

<p>
<a href="http://en.wikipedia.org/wiki/CMake">wikipedia:CMake</a> is a new cross-platform build-system that aims to be a better alternative to GNU Autotools and sports many enhancements. To build a CMake-based project, use something like:

</p>

<pre>   $ mkdir build
   $ cd build
   $ cmake-gui ..
   $ make
   $ make install
</pre>
<h4 id="Version_Control_Systems">Version Control Systems </h4>

<p>
Reading from <a href="http://onlamp.com/pub/a/onlamp/2004/01/29/scm_overview.html">an earlier article</a> written by one of the contributors to this article:

</p>

<blockquote>


<p>

A version control system enables developers to keep historical versions of the files under development and to retrieve past versions. It stores version information for every file (and the entire project structure) in a collection normally called a repository.

</p>


<p>

Inside the repository, several parallel lines of development, normally called branches, may exist. This can be useful to keep a maintenance branch for a stable, released version while still working on the bleeding-edge version. Another option is to open a dedicated branch to work on an experimental feature.

</p>


<p>

Version control systems also let the user give labels to a snapshot of a branch (often referred to as tags), to ease later extraction. This is useful to signify individual releases or the most recent usable development version.

</p>


<p>

Using a version control system is an absolute must for a developer of a project above a few hundred lines of code, and even more so for projects involving the collaboration of several developers. Using a good version control system is certainly better than the ad-hoc methods some developers use to maintain various revisions of their code.

</p>

</blockquote>

<p>
So if the project you’re trying to contribute to does not use a version control system, it should start right away. You can read more about the motivation for version control in the mentioned article and in <a href="http://www.slideshare.net/xSawyer/source-code-management-systems">a presentation that Sawyer X gave</a>.  Here’s some introductory material on the various popular version control systems in use today:

</p>


<ol>

<li>
 For CVS, which is an old version control systems, and which is now largely unloved (but which can still be found in use), see <a href="http://cvsbook.red-bean.com/">the online book <i>Open Source Development with CVS</i></a>.

</li>

<li>
 For Subversion, a centralised version control system that aims to be an improved and corrected CVS, see <a href="http://svnbook.red-bean.com/">the online book <i>Version Control with Subversion</i></a>.

</li>

<li>
 For Git, a distributed version control system that has been gaining popularity, see <a href="http://progit.org/book/">the online book <i>Pro Git</i></a>

</li>

<li>
 For Mercurial, a distributed version control system written in Python, see <a href="http://hgbook.red-bean.com/">the online book <i>Mercurial: The Definitive Guide</i></a>.

</li>

<li>
 For help with Bazaar, another distributed version control system written in Python, see <a href="http://wiki.bazaar.canonical.com/Documentation">its documentation</a>.

</li>

</ol>
<h4 id="Bug_tracking">Bug tracking </h4>

<p>
As defects (a.k.a “bugs”) and requests for enhancements are introduced to the project, one needs to track them using a bug tracker. “Joel on Software” gives <a href="http://www.joelonsoftware.com/articles/fog0000000029.html">the motivation and how-to of bug-tracking in an essay</a> which you should probably read.

</p>

<p>
Most bug-trackers nowadays have a web-based interface, which one can use from the browser and is mostly self-explanatory. So try to use it and if you run into problems consult your co-developers for help. There are too many different implementations of bug trackers to cover them all here, but being web-based, they should not be too hard to use for active contribution.

</p>

<h3 id="Learning_How_to_Program">Learning How to Program </h3>

<p>
Once you start contributing to open-source, you probably would like to advance your contributions to the next logical level, by learning how to program. Now the topic of what should be the introductory programming language is a topic of ongoing debate (see for example <a href="http://www.shlomifish.org/philosophy/computers/education/introductory-language/">this essay by Shlomi Fish</a>). We recommend that you start by learning either <a href="http://en.wikipedia.org/wiki/Perl">the Perl programming language</a> or <a href="http://en.wikipedia.org/wiki/Python_(programming_language)">the Python programming language</a> and then learning the other one.

</p>

<p>
To learn Perl, refer to <a href="http://perl-begin.org/">the Perl Beginners’ Site</a> which provides many good resources. To learn Python refer to the book <a href="http://www.greenteapress.com/thinkpython/">How to think like a computer scientist - in Python</a> and there are other <a href="http://wiki.python.org/moin/IntroductoryBooks">Python introductory books listed on the Python wiki</a>. You then may be able to contribute to a project written in either language , but continue learning other programming languages and topics.

</p>

<p>
It takes many years to become a good programmer, and good programmers are constantly trying to improve their skills and expand their knowledge.

</p>

<h2 id="Summary">Summary </h2>

<p>
Using open-source software can make your computer work more enjoyable, give you more freedom, and supply you with many important technological advantages such as lack of vendor lock-in, lower costs, and the ability to contribute. In addition, contributing to open-source software may be fun, and it also has the advantage that you’re also helping you and other users of the open-source applications.

</p>

<p>
We hope this document has given you the information and pointers necessary to start your journey into the world of open-source software. Feel free to contact us if you feel anything is amiss, so we can improve it.

</p>

<h2 id="Where_to_go_from_here">Where to go from here </h2>

<p>
This section aims to list some additional resources about contributing to open-source. The first one is <a href="http://www.shlomifish.org/philosophy/foss-other-beasts/">the essay “Open Source, Free Software, and Other Beasts”</a> by Shlomi Fish (who also wrote most of the first version of this essay.), which provides an introduction to the world of open source software for those who are not very familiar with it. It is available online under the open-content Creative Commons Attribution licence.
</p>

<p>
Another good resource is Eric Raymond’s <a href="http://catb.org/~esr/faqs/hacker-howto.html">“How to become a hacker”</a> document followed by his <a href="http://www.catb.org/~esr/writings/cathedral-bazaar/">the “Cathedral and the Bazaar” series</a>. They are both very enlightening resources, but note that they suffer from a certain amount of arrogance.

</p>

<p>
The <a href="http://www.gnu.org/philosophy/">Philosophy section of the Free Software Foundation (FSF) site</a> contains some interesting articles. While they are written from an extremist and uncompromising view, which you may choose not to adopt, but they are still useful as food for thought.

</p>

<p>
Some good resources about software management for open-source programmers include:

</p>


<ol>

<li>
 <a href="http://www.paulgraham.com/">Paul Graham’s Essays</a>

</li>

<li>
 <a href="http://www.joelonsoftware.com/">The <i>Joel on Software</i> site</a> by Joel Spolsky.

</li>

<li>
 <a href="http://linuxmafia.com/~rick/">Rick Moen’s resources</a>

</li>

<li>
 <a href="http://www.extremeprogramming.org/">Extreme Programming</a>

</li>

<li>
 The aforementioned resources by Eric Raymond.

</li>

</ol>

<p>
You can find many additional resources on open source software by performing web searches or by perusing the various <a href="http://www.wikimedia.org/">Wikimedia resources</a> (such as the Wikipedia or Wikibooks), and on <a href="http://www.wikia.com/">Wikia</a>.

</p>

<h2 id="Authors">Authors </h2>

<ul>

<li>
 Primary Author: <a href="http://teachingopensource.org/index.php/">Shlomi Fish</a> - also see <a href="http://www.shlomifish.org/">his homepage</a>

</li>

<li>
 Some contributions from <a href="http://www.teachingopensource.org/index.php?title=How_to_start_contributing_to_or_using_Open_Source_Software&amp;action=history">other users of the Teaching Open Source wiki</a> including <a href="http://teachingopensource.org/index.php/">Erkan Yilmaz</a> and <a href="http://teachingopensource.org/index.php/">NeoPhyte Rep</a> .

</li>

</ul>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.