Most of the time, open source is born out of a need that leads to inspiration. Somebody somewhere who is frustrated, bored, or in some other state of creative readiness starts with an initial thought that begins with one of these phrases: “Wouldn’t it be cool if” or “I am sick of having to put up with...” or “I bet a lot of people would like...”. The end of these statements is a description of some sort of software. In open source parlance, this is called
scratching a developer's personal itch
Linus Torvalds thought it would be cool to have a full Unix implementation that ran on the Intel chip set, and he created Linux. Larry Wall was interested in a language to help him with system programming tasks, and he created the Perl language. A group of people building their own web sites were frustrated with the NCSA web server and started sharing patches to it; these patches became the Apache web server (a-patch-y server; get it?).
The key thing to remember is that at first the designers and builders of open source applications were the primary users as well. This is the first principle of open source:
Open source software is most frequently built by programmers for other programmers.
So, what follows inspiration? Well, hard work, of course. The inspired developer now sets to work, creating the masterpiece that will solve the problem at hand. There is no formal requirements-gathering process. There is no market research. There is nothing but a smart, driven person thinking about what he wants to do and then setting about doing it.
After toiling alone at a keyboard, the inspired developer creates something that he is proud of and then shares it with others. This is the real birth of an open source project. If other programmers are captivated by the way the software meets a need they also have, they will join the project as either users or developers of the software. If such a community forms, the open source project is on its way to faster development and wider recognition. The second principle of open source, then, is as follows:
Open source projects are communities of developers and users organized around software that meets a common need.
Where does open source come from? It comes from inspiration about a solution to a problem that is compelling and common enough to attract other people to join a community and work on the project for free. In addition, many companies allow developers to work on open source as a part of their jobs if the project is important to that company.
The implications of this are that open source projects usually form around needs that programmers have. The first generation of open source programs are almost all focused on programmers’ needs and ways of working.
So, if not money, what are the rewards of a successful open source project, besides scratching that itch? One major reward is status and peer recognition. Doing good and helping others is another factor that keeps many a programmer working late into the night. There is a strong ethic of community service in many developers, and a great sense of satisfaction is frequently derived from the knowledge that thousands of lives have been improved as a result of an open source project.
Developers are also motivated by rational self-interest. Aside from improving skills in general, thus becoming increasingly marketable, the developer becomes part of a great team. By releasing code as open source, a programmer can get significant help improving his software if a community forms around it. Bug fixes and enhancements in areas outside of a developer’s area of interest are benefits of a successful open source project. Even Microsoft, which is not at all friendly to open source, understands the value of community involvement and released millions of lines of code for inspection under its Shared Source Initiative. (It is important to note that when Microsoft says
Shared Source it does not mean
As the use of open source becomes more widespread, and more tools are developed, open source projects grow larger as well, resulting in new uses and motivations that we describe in the section Second-Generation Trends in Open Source, later in this chapter. More projects are focusing on meeting needs outside of the programming community, but even those projects, such as a server that can stream MP3 files, are usually close to the hearts of developers. Where is the open source software for creating knitting and crochet patterns? It hasn’t yet caught the imagination of a developer.