Producing Open Source Software
Table of Contents
- Preface
- Why Write This Book?
- Who Should Read This Book?
- Sources
- Acknowledgments
- Disclaimer
- 1. Introduction
- History
- The Rise of Proprietary Software and Free Software
- "Free" Versus "Open Source"
- The Situation Today
- 2. Getting Started
- Starting From What You Have
- Choose a Good Name
- Have a Clear Mission Statement
- State That the Project is Free
- Features and Requirements List
- Development Status
- Downloads
- Version Control and Bug Tracker Access
- Communications Channels
- Developer Guidelines
- Documentation
- Demos, Screenshots, Videos, and Example Output
- Hosting
- Choosing a License and Applying It
- The "Do Anything" Licenses
- The GPL
- How to Apply a License to Your Software
- Setting the Tone
- Avoid Private Discussions
- Nip Rudeness in the Bud
- Codes of Conduct
- Practice Conspicuous Code Review
- Be Open From Day One
- Opening a Formerly Closed Project
- Announcing
- 3. Technical Infrastructure
- What a Project Needs
- Web Site
- Canned Hosting
- Mailing Lists / Message Forums
- Choosing the Right Forum Management Software
- Version Control
- Version Control Vocabulary
- Choosing a Version Control System
- Using the Version Control System
- Receiving and reviewing contributions
- Bug Tracker
- Interaction with Email
- Pre-Filtering the Bug Tracker
- IRC / Real-Time Chat Systems
- IRC Bots
- Archiving IRC
- Wikis
- Wikis and Spam
- Choosing a Wiki
- Q&A Forums
- Translation Infrastructure
- Social Networking Services
- 4. Social and Political Infrastructure
- Benevolent Dictators
- Who Can Be a Good Benevolent Dictator?
- Consensus-based Democracy
- Version Control Means You Can Relax
- When Consensus Cannot Be Reached, Vote
- When To Vote
- Who Votes?
- Polls Versus Votes
- Vetoes
- Writing It All Down
- Joining or Creating a Non-Profit Organization
- 5. Organizations, Money, and Business
- The Economics of Open Source
- Types of Corporate Involvement
- Governments and Open Source
- Being Open Source From Day One is Especially Important for
Government Projects
- Hire for the Long Term
- Case study
- Appear as Many, Not as One
- Be Open About Your Motivations
- Money Can't Buy You Love
- Contracting
- Review and Acceptance of Changes
- Update Your RFI, RFP and Contract Language
- IV&V: Use Third-Party Review Throughout Development
- Don't Surprise Your Lawyers
- Funding Non-Programming Activities
- Quality Assurance (i.e., Professional Testing)
- Legal Advice and Protection
- Documentation and Usability
- Providing Hosting/Bandwidth
- Providing Build Farms and Development Servers
- Sponsoring Conferences, Hackathons, and other Developer Meetings
- Marketing
- Open Source and Freedom from Vendor Lock-In
- Remember That You Are Being Watched
- Don't Bash Competing Open Source Products
- Don't Bash Competing Vendors' Developers
- "Commercial" vs "Proprietary"
- Open Source and the Organization
- Dispel Myths Within Your Organization
- Foster Pools of Expertise in Multiple Places
- Don't Let Publicity Events Drive Project Schedule
- The Key Role of Middle Management
- Innersourcing
- Hiring Open Source Developers
- Evaluating Open Source Projects
- Crowdfunding and Bounties
- 6. Communications
- You Are What You Write
- Structure and Formatting
- Content
- Tone
- Recognizing Rudeness
- Face
- Avoiding Common Pitfalls
- Don't Post Without a Purpose
- Productive vs Unproductive Threads
- The Smaller the Topic, the Longer the Debate
- Avoid Holy Wars
- The "Noisy Minority" Effect
- Difficult People
- Handling Difficult People
- Case study
- Handling Growth
- Conspicuous Use of Archives
- Codifying Tradition
- Choose the Right Forum
- Cross-Link Between Forums
- Publicity
- Announcing Releases and Other Major Events
- Announcing Security Vulnerabilities
- 7. Packaging, Releasing, and Daily Development
- Release Numbering
- Release Number Components
- The Simple Strategy
- The Even/Odd Strategy
- Release Branches
- Mechanics of Release Branches
- Stabilizing a Release
- Dictatorship by Release Owner
- Voting on Changes
- Packaging
- Format
- Name and Layout
- Compilation and Installation
- Binary Packages
- Testing and Releasing
- Candidate Releases
- Announcing Releases
- Maintaining Multiple Release Lines
- Security Releases
- Releases and Daily Development
- Planning Releases
- 8. Managing Participants
- Community and Motivation
- Delegation
- Praise and Criticism
- Prevent Territoriality
- The Automation Ratio
- Treat Every User as a Potential Participant
- Meeting In Person (Conferences, Hackfests, Code-a-Thons, Code Sprints, Retreats)
- Share Management Tasks as Well as Technical Tasks
- "Manager" Does Not Mean "Owner"
- Transitions
- Committers
- Choosing Committers
- Revoking Commit Access
- Partial Commit Access
- Dormant Committers
- Avoid Mystery
- Credit
- Forks
- Handling a Fork
- Initiating a Fork
- 9. Legal Matters: Licenses, Copyrights, Trademarks and Patents
- Terminology
- Aspects of Licenses
- The GPL and License Compatibility
- Choosing a License
- The GNU General Public License
- Contributor Agreements
- Doing Nothing
- Contributor License Agreements
- Proprietary Relicensing
- Problems with Proprietary Relicensing
- Trademarks
- Case study: Mozilla Firefox, the Debian Project, and Iceweasel
- Case study: The GNOME Logo and the Fish Pedicure Shop
- Patents
- Further Resources
- A. Canned Hosting Sites
- B. Obsolete Appendix (was: Free Version Control Systems)
- C. Obsolete Appendix (was: Free Bug Trackers)
- D. Obsolete Appendix: (was: Why Should I Care What Color the Bikeshed Is?)
- E. Obsolete Appendix (was: Example Instructions for Reporting Bugs)
- F. Copyright