meillo@37: \chapter{About \freesw\ projects} meillo@26: meillo@45: There are several differences between \freesw\ projects and projects about proprietary software. meillo@45: To understand \freesw\ projects, one needs to understand \freesw\ itself first. meillo@37: meillo@37: \section{About \freesw} meillo@50: The term ``Free Software'' was coined by the \name{Free Software Foundation} (short: \NAME{FSF}), founded by Richard~M.\ Stallman (known as ``RMS'') in 1985. meillo@48: Although various licenses make software free, none of them represents the thinking of \freesw\ like the the \GNU\ \gpl\ (short: \GPL). Its first version was written by Stallman in 1989. meillo@48: One could say, the \GPL\ catalized the \name{Free Software movement}. meillo@37: meillo@48: After all, the \GPL\ was not the first \freesw\ license used. meillo@48: The \name{MIT License} (or \name{X Consortium License}) for example is older; published in 1988. meillo@48: Licenses providing the same rights have been used since long time ago. meillo@48: But none of them was so often (re)used by other projects---thus gattering less awareness. meillo@48: Further more was the \GPL\ created to be a \emph{general} license for all kinds of programs, unlike most other licenses written for one particular program. meillo@37: meillo@45: \freesw\ gives freedoms to its users. meillo@45: In contrast to proprietary software restricting the users freedom. meillo@48: The freedoms (or rights) the user has are stated in the \name{Free Software Definition} of the \NAME{FSF}. Namely these are: meillo@37: \begin{enumerate} meillo@48: \item The freedom to run the program, for any purpose (freedom 0). meillo@48: \item The freedom to study how the program works, and adapt it to your needs (freedom 1). Access to the source code is a precondition for this. meillo@48: \item The freedom to redistribute copies so you can help your neighbor (freedom 2). meillo@48: \item The freedom to improve the program, and release your improvements to the public, so that the whole community benefits (freedom 3). Access to the source code is a precondition for this. meillo@37: \end{enumerate} meillo@37: meillo@37: meillo@37: \section{The term ``Open Source''} meillo@45: \name{Open Source Software} often stands for the same as \freesw. meillo@45: But there is an essential difference: \name{Open Source} focuses on the availability of source code, while \freesw\ is about freedoms for people. meillo@37: meillo@43: \name{Open Source Software} is a subset of \freesw, meaning: All \freesw\ is \name{Open Source}, but there exists \name{Open Source Software} that is not free. meillo@37: meillo@37: meillo@37: \section{Development of \freesw} meillo@45: Having source code available and the right to modify it, encouridges programmers to actually do so. meillo@45: Their modifications are manifoldly. meillo@45: Some tailor the software to their needs. meillo@45: Some add features. meillo@45: Some do it just for fun. meillo@45: There are no limitations---whoever wants to, may work on it. meillo@37: meillo@45: Since the boom of the internet, \freesw\ typically is developed by an open community of programmers interested in the software. meillo@45: The process of development is watchable by everyone. meillo@37: meillo@37: The other, now less common, method is a more closed group, developing in a ``sealed'' room, but releasing finished versions to the public. meillo@37: meillo@52: Eric~S.\ Raymond discusses about these methods, which he named \name{the bazaar} and \name{the cathedral} \cite{catb}. meillo@37: meillo@38: The following text will focus on the ``bazaar'' model. meillo@38: meillo@37: meillo@37: \section{The role of the community} meillo@37: \freesw\ projects rise and fall with their community! meillo@37: meillo@45: Most \freesw\ programs are developed by a very small group of programmers, often only one person. meillo@45: But they are used by many people. meillo@45: In between the programmers and the users, are people located who are a bit of both. meillo@45: These are the ones that write documentation, find bugs and probably even fix it. meillo@45: They discuss on mailing lists, bulletin boards and \NAME{IRC} chats. meillo@45: The program is often spread by their ``advertising''. meillo@37: meillo@45: The \emph{community} consists of the actual developers and all users that contribute to the program. meillo@45: Contribution can be one of the described ways, or others like providing a server for the project website for example. meillo@37: meillo@45: \emph{Community} is everyone who is in contact through the project. meillo@45: Be it on the mailing list, the discussion board, or by telling the developers about a new feature wanted. meillo@37: meillo@45: There will hardly be a community if no communication channels are available. meillo@48: If the development team does not provide them, there is a chance that encouraged users set them up on their own. meillo@45: But this is rare and the program needs to be very popular. %TODO: maybe include an example here (w3m?) meillo@37: meillo@37: Projects without a good community tend to die sooner or later. meillo@37: meillo@37: meillo@37: \section{Evolution of a community} meillo@45: Let us look at the process a community establishes: In most times it's only one who has an idea, in the beginning. meillo@45: He starts developing. meillo@45: When others get in contact with the project, there may be some who are so much interested that they start co-developing. meillo@45: Others report bugs, and some only use the program. meillo@37: meillo@45: After some time, one will find a small group of core developers, a larger group of contributers (bugs, patches, documentation) and a very large group of users. meillo@45: The size ratio of the groups vary by type of project. meillo@37: meillo@37: One should have that in mind, when starting a \freesw\ project. meillo@37: meillo@37: meillo@37: \section{Creating a strong community} meillo@37: Building up a good community needs some effort of the main developers. meillo@38: %TODO: search for documents about this topic meillo@37: meillo@37: First communication channels need to be set up, to enable the growth of a community. meillo@37: meillo@45: Second, development should be visible by everyone who is interested in it. meillo@45: Time between work done on the project and its visibility to the public should be kept short. meillo@45: This makes it interesting for other developers to join. meillo@45: Developers are the core of a community. meillo@37: meillo@50: Third, there is a rule of thumb that should be followed: ``Release early, release often!'' \cite{catb}. meillo@45: Releases are (more) stable versions, primary for users. meillo@45: They should be created, frequently. meillo@45: People will more likely use programs of active projects. meillo@37: meillo@45: Fourth, the developers should try to get the users ``in the boat''. meillo@45: Good communities have a large group of users that do not only receive, but also give something back to the project. meillo@45: The project leaders should motivate users to contribute. meillo@45: This unlocks a big work force and gets lot of unexiting work done. meillo@38: meillo@45: Fifth, documentation matters. meillo@45: Good documentation makes it easy for users and developers to start. meillo@45: And it helps to avoid a lot of unsatisfaction. meillo@45: Documentation is something that shows quality and that people care about the project. meillo@38: meillo@45: And sixth, project leaders should be good souvereigns. meillo@45: They should try to be fair, to motivate, be visionaires and try to put power and work on many shoulders. meillo@38: meillo@45: Not to forget: Every work that was done, every contribution that was made and every idea received needs to be honored in an appropriate way! meillo@45: Volunteer work lives by acknowledgement of the effort spent.