Cover image for 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. Producing Open Source Software
    1. SPECIAL OFFER: Upgrade this ebook with O’Reilly
    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. SPECIAL OFFER: Upgrade this ebook with O’Reilly