People collaborating together to produce something for free

On the face of it, in a capitalist society where you only work for financial and personal reward and where the profit margin is everything, the open source model shouldn’t work. People collaborating together to produce something for free. Not just collaborating but producing high end complex software like internet browsers, word processors and operating systems. How does this work then. Why do people do this for free ?

What is Open Source?

Most software that you buy or download only comes in the compiled ready-to-run version. Compiled means that the actual program code that the developer created, known as the source code, has run through a special program called a compiler that translates the source code into a form that the computer can understand. It is extremely difficult to modify the compiled version of most applications and nearly impossible to see exactly how the developer created different parts of the program.

Open source software is at the opposite end of the spectrum. The source code is included with the compiled version and modification or customization is actually encouraged. The software developers who support the open source concept believe that by allowing anyone who’s interested to modify the source code, the application will be more useful and error-free over the long term.

To be considered as open source software by the software development industry, certain criteria must be met:
  1. The program must be freely distributed (It can be part of a package that is sold though, such as Red Hat has done with Linux).
  2. Source code must be included.
  3. Anyone must be allowed to modify the source code.
  4. Modified versions can be redistributed.
  5. The license must not require the exclusion of other software or interfere with the operation of other software.

Who’s Writing it and Why ?

A lot of it has to do with the nature and personalities of your typical software developer. Often derided as nerds or geeks these guys are intelligent, highly motivated and to be honest …. just like cutting code for code’s sake … why ? … because it’s fun !

Surely Nobody uses this stuff!

A lot of people say that “you get what you pay for” and that free software will never be of any use or won’t work. However for software that “nobody in their right mind would use” open source is doing very well indeed. 70% of all webservers are run using the Open Source Apache webserver. Millions of websites (including this one) use the open source PHP web scripting languages. The popular FireFox web browser is also open source. Open source has some very impressive backers. IBM – whose software department is bigger than Microsoft – fully endorses the Linux operating system (open source). Other large companies such as HP and Novell are backers as well. Each of these companies invest billions in this technology.

A Real World Example … Linux

Let’s take a look at a real world example of open source software. In 1991, Linus Torvalds, a student at the University of Helsinki in Finland, developed a new operating system based on Minix, a derivative of Unix, which he dubbed Linux. Torvalds released version 0.02 of Linux under the GNU General Public License, which provides a good legal definition of open source software. A lot of people around the world downloaded Linux and began working with it. Many of these users were programmers in their own right and made modifications to the source code that Torvalds had included. Over the next three years, Torvalds received these modified versions from the other programmers and incorporated many of the changes into the baseline version and released Linux version 1.0 in 1994.

How Does the Development Process Work ?

Each project is different in how it’s managed and handles releases but they all generally have the same characteristics.

Stage 1: Initiating

A developer creates something and publishes the code as a zip, on github, codeplex, sourceforge or somewhere else. Then People start liking it and begin submit patches or report issues. Some people create forks and start maintaining their own code based on yours. Or they (or you) ask to join the project.

Stage 2: Team OSS (Open Source Software)

It’s now moving into a team development phase. At this point things change a lot. Who is now in charge of the code base? Who builds+releases it? Who answers submitted issues? Well the initiator has to find out, try to find a process that fits. This usually works quite well with people the initiator personally knows, co-workers or even friends. When interacting with others in the community, he’ll find out that everybody has a slightly different agenda: which is good for the project! But it makes it hard to make decisions.

Stage 3: Joining an umbrella organization

Now the need for a good process and for some infrastructure arises. You need hosting, build servers, issue tracker: This is what umbrella organizations like Eclipse Foundation, Apache Software Foundation, Outercurve Foundation or Codehaus help you with.

Apache, for example, is very vote-driven. If you want somebody to become a committer, you ask for a vote on the project’s private mailing list. If you want to release a version, you create it and deploy it to a staging are – then you ask for votes.

Apache also offers some infrastructure: a CMS for documentation, Jira for issue-tracking, Hudson and Teamcity for Continuous Builds, SVN+GIT for Version Control, Mailing Lists (users, dev, private), committer directory, and so on. The control becomes much more formalised , for example every team has to report to the Apache Board of Directors.

Eclipse works quite similarly. In bigger projects usually a couple of companies donate code and/or full-time developers.

Open Source Development in Motion

Open source projects don’t stand still. For example, Drupal today is different than what Drupal was a month ago. Drupal from a year ago would be almost unrecognizable to users of Drupal today. That is because Drupal — and open source projects in general — continues to evolve and improve.

The diagram above illustrates this. Think of the blue diamond area as the amount of developer activity on a project. The amount of worldwide activity increases as the community gets close to a new release. Once a release is out, development continues for a while, but then starts to taper off as the next latest and greatest release is being prepared. As each release is replaced by newer releases, developer attention starts to shift towards the newer stuff.