Skip to content

christinaflach/free-software-patterns

Repository files navigation

Free Software Patterns

The process of contributing to free software (also known as "open source software") projects has special characteristics that have fostered the emergence of many practices, each of which influenced by various forces and entailing trade-offs.

In this book, we document such practices by means of patterns. The Free Software Patterns book is a open project, and you can contribute to it.

The Free Software Patterns are organized around clusters. Each cluster of patterns is presented as a simple pattern language, that is, a set of related patterns that may be combined to address a common set of problems. Our three clusters of patterns are:

  • Selection Patterns, that help prospective contributors to find suitable projects.
  • Involvement Patterns, that deal with the first steps towards getting familiar and involved with the selected project, and
  • Contribution Patterns, that document best practices for submitting different kinds of contribution to a free software project.

The Selection Patterns and Contribution Patterns clusters are intrinsically associated with the nature of free software projects, and represent novel work by us.

Getting involved with a free software project, however, presents several similarities with the process of getting involved with any software project, such as investigating the existing documentation, building the system from its sources, reading the code, etc. For that reason, the Involvement Patterns cluster reuses several patterns from the excellent Object-Oriented Reengineering Patterns, by Serge Demeyer, Stéphane Ducasse and Oscar Nierstrasz, together with a few new patterns proposed by us. In general, Reengineering Patterns is a recommended companion to Free Software Patterns. We are grateful to Demeyer, Ducasse and Nierstrasz for having licensed their work under a Creative Commons license, allowing us to partially base our own work on theirs.

Table of Contents

  • Copyright
  • Contribution Guide
  • Selection Patterns
    • Walk On Familiar Ground
    • Look Inside Your Tool Box
    • Explore a Brave New World
  • Involvement Patterns
    • First Contact from Reengineering Patterns
      • Chat with the Maintainers
      • Do a Mock Installation
      • Interview During Demo
      • Read all the Code in One Hour
      • Skim the Documentation
    • Look for TODO Lists
    • Easy Tasks First
  • Contribution Patterns
    • Write Documentation
    • Translate To Your Language
    • Write Useful Bug Reports
    • Review Recent Activity
    • Right Version for the Task
    • Explanatory Commit Messages
    • Review Your Changes
    • Document Your Changes
    • Create a Patch
    • Group Related Changes
    • Separate Unrelated Changes
    • Manual Testing
    • Add Tests that Fail