O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Producing Open Source Software

Book Description

The corporate market is now embracing free, "open source" software like never before, as evidenced by the recent success of the technologies underlying LAMP (Linux, Apache, MySQL, and PHP). Each is the result of a publicly collaborative process among numerous developers who volunteer their time and energy to create better software.

The truth is, however, that the overwhelming majority of free software projects fail. To help you beat the odds, O'Reilly has put together Producing Open Source Software, a guide that recommends tried and true steps to help free software developers work together toward a common goal. Not just for developers who are considering starting their own free software project, this book will also help those who want to participate in the process at any level.

The book tackles this very complex topic by distilling it down into easily understandable parts. Starting with the basics of project management, it details specific tools used in free software projects, including version control, IRC, bug tracking, and Wikis. Author Karl Fogel, known for his work on CVS and Subversion, offers practical advice on how to set up and use a range of tools in combination with open mailing lists and archives. He also provides several chapters on the essentials of recruiting and motivating developers, as well as how to gain much-needed publicity for your project.

While managing a team of enthusiastic developers -- most of whom you've never even met -- can be challenging, it can also be fun. Producing Open Source Software takes this into account, too, as it speaks of the sheer pleasure to be had from working with a motivated team of free software developers.

Table of Contents

  1. Dedication
  2. Foreword
  3. Preface
    1. Why Write This Book?
    2. Who Should Read This Book?
    3. How to Use This Book
    4. Sources
    5. Conventions
    6. Comments and Questions
    7. Safari Enabled
    8. Acknowledgments
    9. Disclaimer
  4. 1. Introduction
    1. 1.1. History
      1. 1.1.1. The Rise of Proprietary Software and Free Software
        1. 1.1.1.1. Conscious resistance
        2. 1.1.1.2. Accidental resistance
      2. 1.1.2. Free Versus Open Source
    2. 1.2. The Situation Today
  5. 2. Getting Started
    1. 2.1. First, Look Around
    2. 2.2. Starting from What You Have
      1. 2.2.1. Choose a Good Name
      2. 2.2.2. Have a Clear Mission Statement
      3. 2.2.3. State that the Project Is Free
      4. 2.2.4. Features and Requirements List
      5. 2.2.5. Development Status
      6. 2.2.6. Downloads
      7. 2.2.7. Version Control and Bug Tracker Access
      8. 2.2.8. Communications Channels
      9. 2.2.9. Developer Guidelines
      10. 2.2.10. Documentation
        1. 2.2.10.1. Availability of documentation
        2. 2.2.10.2. Developer documentation
      11. 2.2.11. Example Output and Screenshots
      12. 2.2.12. Canned Hosting
    3. 2.3. Choosing a License and Applying It
      1. 2.3.1. The “Do Anything” Licenses
      2. 2.3.2. The GPL
      3. 2.3.3. How to Apply a License to Your Software
    4. 2.4. Setting the Tone
      1. 2.4.1. Avoid Private Discussions
      2. 2.4.2. Nip Rudeness in the Bud
      3. 2.4.3. Practice Conspicuous Code Review
      4. 2.4.4. When Opening a Formerly Closed Project, Be Sensitive to the Magnitude of the Change
    5. 2.5. Announcing
  6. 3. Technical Infrastructure
    1. 3.1. What a Project Needs
    2. 3.2. Mailing Lists
      1. 3.2.1. Spam Prevention
        1. 3.2.1.1. Filtering posts
        2. 3.2.1.2. Address hiding in archives
      2. 3.2.2. Identification and Header Management
      3. 3.2.3. The Great Reply-to Debate
        1. 3.2.3.1. Two fantasies
      4. 3.2.4. Archiving
      5. 3.2.5. Software
    3. 3.3. Version Control
      1. 3.3.1. Version Control Vocabulary
      2. 3.3.2. Choosing a Version Control System
      3. 3.3.3. Using the Version Control System
        1. 3.3.3.1. Version everything
        2. 3.3.3.2. Browseability
        3. 3.3.3.3. Commit emails
        4. 3.3.3.4. Use branches to avoid bottlenecks
        5. 3.3.3.5. Singularity of information
        6. 3.3.3.6. Authorization
    4. 3.4. Bug Tracker
      1. 3.4.1. Interaction with Mailing Lists
      2. 3.4.2. Prefiltering the Bug Tracker
    5. 3.5. IRC/Real-Time Chat Systems
      1. 3.5.1. Bots
      2. 3.5.2. Archiving IRC
    6. 3.6. Wikis
    7. 3.7. Web Site
      1. 3.7.1. Canned Hosting
        1. 3.7.1.1. Choosing a canned hosting site
        2. 3.7.1.2. Anonymity and involvement
  7. 4. Social and Political Infrastructure
    1. 4.1. Forkability
    2. 4.2. Benevolent Dictators
      1. 4.2.1. Who Can Be a Good Benevolent Dictator?
    3. 4.3. Consensus-Based Democracy
      1. 4.3.1. Version Control Means You Can Relax
      2. 4.3.2. When Consensus Cannot Be Reached, Vote
      3. 4.3.3. When to Vote
      4. 4.3.4. Who Votes?
      5. 4.3.5. Polls Versus Votes
      6. 4.3.6. Vetoes
    4. 4.4. Writing It All Down
  8. 5. Money
    1. 5.1. Types of Involvement
    2. 5.2. Hire for the Long Term
    3. 5.3. Appear as Many, Not as One
    4. 5.4. Be Open About Your Motivations
    5. 5.5. Money Can’t Buy You Love
    6. 5.6. Contracting
      1. 5.6.1. Review and Acceptance of Changes
        1. 5.6.1.1. Case study: the CVS password-authentication protocol
    7. 5.7. Funding Non-Programming Activities
      1. 5.7.1. Quality Assurance (i.e., Professional Testing)
      2. 5.7.2. Legal Advice and Protection
      3. 5.7.3. Documentation and Usability
      4. 5.7.4. Providing Hosting/Bandwidth
    8. 5.8. Marketing
      1. 5.8.1. Remember That You Are Being Watched
      2. 5.8.2. Don’t Bash Competing Open Source Products
  9. 6. Communications
    1. 6.1. You Are What You Write
      1. 6.1.1. Structure and Formatting
      2. 6.1.2. Content
      3. 6.1.3. Tone
      4. 6.1.4. Recognizing Rudeness
      5. 6.1.5. Face
    2. 6.2. Avoiding Common Pitfalls
      1. 6.2.1. Don’t Post Without a Purpose
      2. 6.2.2. Productive Versus Unproductive Threads
      3. 6.2.3. The Softer the Topic, the Longer the Debate
      4. 6.2.4. Avoid Holy Wars
      5. 6.2.5. The “Noisy Minority” Effect
    3. 6.3. Difficult People
      1. 6.3.1. Handling Difficult People
      2. 6.3.2. Case Study
    4. 6.4. Handling Growth
      1. 6.4.1. Conspicuous Use of Archives
        1. 6.4.1.1. Treat all resources like archives
      2. 6.4.2. Codifying Tradition
    5. 6.5. No Conversations in the Bug Tracker
    6. 6.6. Publicity
      1. 6.6.1. Announcing Security Vulnerabilities
        1. 6.6.1.1. Receive the report
        2. 6.6.1.2. Develop the fix quietly
        3. 6.6.1.3. CAN/CVE numbers
        4. 6.6.1.4. Pre-notification
        5. 6.6.1.5. Distribute the fix publicly
  10. 7. Packaging, Releasing, and Daily Development
    1. 7.1. Release Numbering
      1. 7.1.1. Release Number Components
      2. 7.1.2. The Simple Strategy
      3. 7.1.3. The Even/Odd Strategy
    2. 7.2. Release Branches
      1. 7.2.1. Mechanics of Release Branches
    3. 7.3. Stabilizing a Release
      1. 7.3.1. Dictatorship by Release Owner
      2. 7.3.2. Change Voting
        1. 7.3.2.1. Managing collaborative release stabilization
        2. 7.3.2.2. Release manager
    4. 7.4. Packaging
      1. 7.4.1. Format
      2. 7.4.2. Name and Layout
        1. 7.4.2.1. To capitalize or not to capitalize
        2. 7.4.2.2. Pre-releases
      3. 7.4.3. Compilation and Installation
      4. 7.4.4. Binary Packages
    5. 7.5. Testing and Releasing
      1. 7.5.1. Candidate Releases
      2. 7.5.2. Announcing Releases
    6. 7.6. Maintaining Multiple Release Lines
      1. 7.6.1. Security Releases
    7. 7.7. Releases and Daily Development
      1. 7.7.1. Planning Releases
  11. 8. Managing Volunteers
    1. 8.1. Getting the Most Out of Volunteers
      1. 8.1.1. Delegation
        1. 8.1.1.1. Distinguish clearly between inquiry and assignment
        2. 8.1.1.2. Follow up after you delegate
        3. 8.1.1.3. Notice what people are interested in
      2. 8.1.2. Praise and Criticism
      3. 8.1.3. Prevent Territoriality
      4. 8.1.4. The Automation Ratio
        1. 8.1.4.1. Automated testing
      5. 8.1.5. Treat Every User as a Potential Volunteer
    2. 8.2. Share Management Tasks as Well as Technical Tasks
      1. 8.2.1. Patch Manager
      2. 8.2.2. Translation Manager
      3. 8.2.3. Documentation Manager
      4. 8.2.4. Issue Manager
      5. 8.2.5. FAQ Manager
    3. 8.3. Transitions
    4. 8.4. Committers
      1. 8.4.1. Choosing Committers
      2. 8.4.2. Revoking Commit Access
      3. 8.4.3. Partial Commit Access
      4. 8.4.4. Dormant Committers
      5. 8.4.5. Avoid Mystery
    5. 8.5. Credit
    6. 8.6. Forks
      1. 8.6.1. Handling a Fork
      2. 8.6.2. Initiating a Fork
  12. 9. Licenses, Copyrights, and Patents
    1. 9.1. Terminology
    2. 9.2. Aspects of Licenses
    3. 9.3. The GPL and License Compatibility
    4. 9.4. Choosing a License
      1. 9.4.1. The MIT/X Window System License
      2. 9.4.2. The GNU General Public License
        1. 9.4.2.1. Is the GPL free or not free?
      3. 9.4.3. What About The BSD License?
    5. 9.5. Copyright Assignment and Ownership
    6. 9.6. Dual Licensing Schemes
    7. 9.7. Patents
    8. 9.8. Further Resources
  13. A. Free Version Control Systems
    1. A.1. Subversion
    2. A.2. SVK
    3. A.3. Arch
    4. A.4. monotone
    5. A.5. Codeville
    6. A.6. Vesta
    7. A.7. Darcs
    8. A.8. Aegis
    9. A.9. CVSNT
    10. A.10. Meta-CVS
    11. A.11. OpenCM
    12. A.12. Stellation
    13. A.13. PRCS
    14. A.14. Bazaar
    15. A.15. Bazaar-NG
    16. A.16. ArX
    17. A.17. SourceJammer
    18. A.18. FastCST
    19. A.19. GIT
    20. A.20. Superversion
  14. B. Free Bug Trackers
    1. B.1. Bugzilla
    2. B.2. GNATS
    3. B.3. RT
    4. B.4. Trac
    5. B.5. Roundup
    6. B.6. Mantis
    7. B.7. Scarab
    8. B.8. DBTS
    9. B.9. Trouble-Ticket Trackers
    10. B.10. BTT
  15. C. Why Should I Care What Color the Bikeshed Is?
  16. D. Example Instructions for Reporting Bugs
  17. Index
  18. About the Author
  19. Colophon
  20. Copyright