Open-source software development: Difference between revisions
Line 33: | Line 33: | ||
== Types of open source projects == |
== Types of open source projects == |
||
One can distinguish |
One can distinguish several different types of open source projects. First, there is the garden variety of software programs and libraries. They areare standalone pieces of code. They might even be dependent on several other open source projects to allow them to be built or run. They serve a certain purpose and fill a certain need. Examples for this include the [[Linux kernel]], the [[Mozilla Firefox|Firefox]] web-browser and [[OpenOffice.org]]. |
||
Other types of open source projects are "distributions". These are collections of software that are |
Other types of open source projects are "distributions". These are collections of software that are published from the same source with some amount of integration between them. Probably the easiest type of distribution to recognize are distributions of entire OSes. There are a large number of [[Linux]] distributions (such as [[Debian]], [[Fedora Core]], [[Mandriva]], [[Slackware]], etc.) which ship the Linux kernel along with many user-land components. There are also other distributions, like [http://www.activestate.com/Products/ActivePerl/ ActivePerl], the [[Perl|Perl programming language]] for various operating system, and the [http://www.theopencd.org/ OpenCD] or [[cygwin]] distributions of open-source programs for [[Microsoft Windows]]. |
||
Other open source projects, like the [[Berkeley Software Distribution|BSD]] derivatives, maintain the source code of the entire operating system, the kernel and all of its core components, in one [[revision control]] system; developing the entire system together as a single team. These operating system development projects closely integrate their tools. More so than in the other distribution-based systems. |
Other open source projects, like the [[Berkeley Software Distribution|BSD]] derivatives, maintain the source code of the entire operating system, the kernel and all of its core components, in one [[revision control]] system; developing the entire system together as a single team. These operating system development projects closely integrate their tools. More so than in the other distribution-based systems. |
Revision as of 22:28, 2 May 2006
Open source software development is the process by which open source software (or similar software whose source is publicly available) is developed.
Types of open source development
There are several different types of tasks that are generally associated with the development of Open source software. These are:
Writing Code
This task involves working on the source code of the program - fixing bugs, adding new functionality, refactoring, etc. This task is probably the most prestigious of what falls under the umbrella of open source development.
Documentation
This task involves documenting open source programs or libraries. It either involves creating a full-coverage reference documentation, writing a how-to, writing tips or tutorials, or other types of documentation.
Localization and translations
This task involves translating the message emitted by the program or the ones that the user uses in the program's graphical user interface.
It should not be confused with internationalization, in which the not-necessarily localized program is adapted to be able to process text in different (mainly non-English) human languages. Assuming the program is not already internationalized, then internationalizing it usually requires modifications to the code (and so falls under actual programming). This is while translations and localizations can be done without involving much programming.
Translations could also involve the translation of the program's documentation.
Packaging
Open source software by its nature is often deployed on a large number of operating systems, and distributions. Packaging involves preparing a working source or binary package for the program, so it can be more easily deployed on such systems.
Bug reports and feature requests
This type of development involves reporting software bugs, or asking for Feature Requests to the developers who then register it somehow, for further resolution.
Infrastructure
This involves the various tasks of dealing with the project's online or offline infrastructure: managing the project's web-site, download area, bug tracker, version control system, arranging physical meetings of the developers, etc.
Answering questions
This task involves providing knowledgeable answers to questions raised by the people who are trying to use the open source project. (See also the "How To Ask Questions The Smart Way" document).
Other types
There may possibly be other types of activities that fall under the umbrella of open source development.
Types of open source projects
One can distinguish several different types of open source projects. First, there is the garden variety of software programs and libraries. They areare standalone pieces of code. They might even be dependent on several other open source projects to allow them to be built or run. They serve a certain purpose and fill a certain need. Examples for this include the Linux kernel, the Firefox web-browser and OpenOffice.org.
Other types of open source projects are "distributions". These are collections of software that are published from the same source with some amount of integration between them. Probably the easiest type of distribution to recognize are distributions of entire OSes. There are a large number of Linux distributions (such as Debian, Fedora Core, Mandriva, Slackware, etc.) which ship the Linux kernel along with many user-land components. There are also other distributions, like ActivePerl, the Perl programming language for various operating system, and the OpenCD or cygwin distributions of open-source programs for Microsoft Windows.
Other open source projects, like the BSD derivatives, maintain the source code of the entire operating system, the kernel and all of its core components, in one revision control system; developing the entire system together as a single team. These operating system development projects closely integrate their tools. More so than in the other distribution-based systems.
Another type of project is a book or a similar standalone document that is not shipped as part of the software package. The Linux Documentation Project hosts many such projects that document various aspects of the GNU/Linux operating system. There are many others available elsewhere.
Starting an open source project
There are several ways in which work on an open source project can start:
- An individual who senses the need for a project announces the intent to develop the project in public. The individual may receive offers of help from others. The group may then proceed to work on the code.
- A developer working on a limited but working codebase, releases it to the public as the first version of an open-source program. The developer continues to work on improving it, and possibly is joined by other developers.
- The source code of a mature project is released to the public, after being developed as proprietary software or inhouse software.
- A well-established open-source project can be forked by an interested outside party. Several developers can then start a new project, whose source code then diverges from the original.
Eric Raymond observed in his famous essay "The Cathedral and the Bazaar" that announcing the intent for a project is usually inferior to releasing a working project to the public.
Participants in OSS development projects
(copied from the Open source software article)
Participants in OSS development projects fall into two broad categories: the Core and the Peripheral.
The Core or Inner Circle are developers who modify the primary code that constitutes the project.
The Peripheral usually consists of users of the software. They report bugs, submit fixes, and suggest changes.
The participants can be divided into the following:
- Project leaders who have the overall responsibility (Core). Most of them might have been involved in coding the first release of the software. They control the overall direction of individual projects.
- Volunteer developers (Core / Periphery) who do actual coding for the project. These include:
- Senior members with broader overall authority
- Peripheral developers producing and submitting code fixes
- Occasional contributors
- Maintainers who work on different aspects of the project
- Everyday users (Periphery) who perform testing, identify bugs, deliver bug reports, etc.
- Posters (Periphery) who participate frequently in newsgroups and discussions, but do not do any coding.
Projects often exhibit an early geographical trend, even if there is international interest. For example, most of the core founders of the KDE Desktop Environment were German.
Tools used for open source development
Communication channels
Developers and users of an open source project are not all necessarily working on the project in proximity. They require some electronic means of communications.
E-mail is one of the chief forms of communication among open source developers and users. Often, electronic mailing lists are used to make sure e-mail messages are delivered to all interested parties at once. This ensures that at least one of them can reply to it (in private or to the whole mailing list).
Often a project has only one mailing list, but often it has several mailing lists, each for a different purpose. Common mailing lists purposes include:
- Announcements - a small-volume mailing lists dedicated for project announcements, and usually with a restricted or moderated who-can-post policy.
- Commits - a mailing list in which all the check-ins to the revision control system are sent for verification by the peer developers.
- Development - a mailing list dedicated to discussing the development of the code itself, as opposed to making use of the product.
- User - a mailing list dedicated to helping users of the product with their problems.
Instant messaging
In order to communicate in real time, many projects use an instant messaging method such as IRC (although there are many others available). IRC is especially suitable because the project can set up one or more IRC channels for discussions among its participants as well as for users to get help. The Freenode IRC network has been especially popular for hosting channels for open source projects. There has been a lot of activity on other networks, some of which are also dedicated to open-source projects. Sometimes a project will use communication channels on more than one network.
Developers communicate using other instant messaging protocols, but IRC seems to be prefered. Many developers like the ease and transparency of IRC's multi-person chatrooms.
Web forums
Web forums have recently become a common way for users to get help with problems they encounter when using an open source product. To a lesser extent, they have been useful as ways for developers to communicate regarding the development of the core code, but most hardcore and experienced devlopers still tend to prefer e-mails over web forums.
Wikis
Wikis have become common as a communication medium for developers and users. They are used to collaboratively edit documents and keep track of other resources. Since the web was a somewhat late introduction to the open source development scene, and wikis even more so, the concept is still not as common as it could potentially become. Wikis often pose problems as a communication channel, because it is harder to have an electronic dialog using them. They are often dedicated as a resource for having easy-to-modify collaborative documents.
Software engineering tools
Version control systems
Copied from Open source software
In OSS development the participants, who are mostly volunteers, are distributed amongst different geographic regions so there is need for tools to aid participants to collaborate in the development of source code.
Concurrent Versions System (CVS) is a major example of a source code collaboration tool being used in OSS projects. CVS helps manage the files and codes of a project when several people are working on the project at the same time. CVS can allow several people to work on the same file at the same time. This is done by moving the file into the users’ directories and then merging the files when the users are done. CVS also enables one to easily go back to a previous version of a file and retrieve it.
The Subversion revision control system (svn) was create to replace CVS. It is quickly gaining ground as an OSS project version control system.
Bug trackers and task lists
Build tools
Other tools
Web sites
Download areas
Common development methodologies
Refactoring
Rewrites
Automated tests
Publicizing a project
Software directories and release logs
Freshmeat, directory.fsf.org, etc.
Articles
O'Reilly Net, Linux Weekly News, IBM developerworks, etc.