Producing Open Source Software

How to Run a Successful Free Software Project

Karl Fogel

(Author)

孙岱军 (Rock Sun)

(Translator)

王 芃 (Wang Peng)

(Translator)

管 清 (Zissan)

(Translator)

题词

这本书献给我的两位好朋友,我不可能忘掉他们:Karen Underhill和Jim Blandy。

目录

前言
为什么写这本书?
谁该读此书?
资料
致谢
免责声明
1. 序言
历史
私有软件的兴起和自由软件
清醒的反抗
意外的反抗
"自由还是开源"
现状
2. 起步
从现有的开始
选择一个好名字
有一份清楚的使命陈述
声明项目是自由软件
特性和需求
开发状况
下载
版本控制和Bug追踪访问
沟通渠道
开发者指南
文档
文档的可用性
开发者文档
实例输出和屏幕截图
包装主机(Canned Hosting)
选择许可证并应用
“可以做任何事情的”许可证
GPL
如何为你的软件应用许可证
设置风格
避免私下讨论
防无礼于未然
实践显眼的代码评审
当重开一个以前封闭的项目时,对于变更的影响要格外敏感
通告
3. 技术基础设施
一个项目需要什么
邮件列表
垃圾邮件防护
过滤邮件
归档中的地址隐藏
认证和头管理
伟大的Reply-to争论
两个幻想
归档
软件
版本控制
版本控制词汇表
选择一个版本控制系统
使用版本控制系统
版本化所有的东西
可浏览性
提交邮件
使用分支来避免瓶颈
信息单一性
授权
Bug跟踪
与邮件列表交互
Bug跟踪的预过滤
IRC / 实时聊天系统
机器人(Bots)
归档IRC
Wikis
网站
包装主机
选择一个包装站点
匿名和参与
4. 社会和政治的基础架构
慈善独裁者
谁可以成为一个慈善独裁者?
共识为基础的民主(Consensus-based Democracy)
版本控制意味着你可以放轻松
如果无法达成共识,那么表决!
何时表决
谁进行表决?
民意调查 对 表决
否决权
写下所有的内容
5. Money
Types of Involvement
Hire for the Long Term
Appear as Many, Not as One
Be Open About Your Motivations
Money Can't Buy You Love
Contracting
Review and Acceptance of Changes
Case study: the CVS password-authentication protocol
Funding Non-Programming Activities
Quality Assurance (i.e., Professional Testing)
Legal Advice and Protection
Documentation and Usability
Providing Hosting/Bandwidth
Marketing
Remember That You Are Being Watched
Don't Bash Competing Open Source Products
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 Softer 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
Treat all resources like archives
Codifying Tradition
No Conversations in the Bug Tracker
Publicity
Announcing Security Vulnerabilities
Receive the report
Develop the fix quietly
CAN/CVE numbers
Pre-notification
Distribute the fix publicly
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
Change Voting
Managing collaborative release stabilization
Release manager
Packaging
Format
Name and Layout
To capitalize or not to capitalize
Pre-releases
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 Volunteers
Getting the Most Out of Volunteers
Delegation
Distinguish clearly between inquiry and assignment
Follow up after you delegate
Notice what people are interested in
Praise and Criticism
Prevent Territoriality
The Automation Ratio
Automated testing
Treat Every User as a Potential Volunteer
Share Management Tasks as Well as Technical Tasks
Patch Manager
Translation Manager
Documentation Manager
Issue Manager
FAQ Manager
Transitions
Committers
Choosing Committers
Revoking Commit Access
Partial Commit Access
Dormant Committers
Avoid Mystery
Credit
Forks
Handling a Fork
Initiating a Fork
9. Licenses, Copyrights, and Patents
Terminology
Aspects of Licenses
The GPL and License Compatibility
Choosing a License
The MIT / X Window System License
The GNU General Public License
Is the GPL free or not free?
What About The BSD License?
Copyright Assignment and Ownership
Doing Nothing
Contributor License Agreements
Transfer of Copyright
Dual Licensing Schemes
Patents
Further Resources
A. Free Version Control Systems
B. Free Bug Trackers
C. Why Should I Care What Color the Bikeshed Is?
D. Example Instructions for Reporting Bugs
E. Copyright