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