Product SiteDocumentation Site

Teaching_Open_Source 0.1

Practical Open Source Software Exploration

How to be Productively Lost, the Open Source Way

Edition 0.8

Greg DeKoenigsberg

Red Hat Community Architecture

Chris Tyler

Seneca College Centre for Development of Open Technology

Karsten Wade

Red Hat Community Architecture

Max Spevack

Red Hat Community Architecture

Mel Chua

Red Hat Community Architecture

Jeff Sheltren

Oregon State University (OSU) Open Source Labs (OSL)

Legal Notice

Copyright © 2010
The text of and illustrations in this document are licensed by the authors under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at The original authors of this document designate as the "Attribution Party" for purposes of CC-BY-SA. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
The licensors of this document waive the right to enforce, and agree not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Fedora and the Infinity Logo are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
All other trademarks are the property of their respective owners.
This textbook teaches the basic skills of open source development incrementally, through real involvement in meaningful projects, for students and self-learners.

1. Document Conventions
1.1. Typographic Conventions
1.2. Pull-quote Conventions
1.3. Notes and Warnings
2. We Need Feedback!
1. Foreword
1.1. Why is This Book Necessary?
1.2. Why Traditional Student Projects Are Ineffective
1.3. Using This Textbook to Get Started
1.4. A Note on Terminology - Free Versus Open Source
2. Introduction_to_Free_and_Open_Source_Software
2.1. Introduction
2.2. Why does FOSS matter to me?
2.2.1. Source Control
2.2.2. Build Systems
2.2.3. Documentation
2.2.4. Tracking Bugs
2.2.5. Experiencing the Software Lifecycle
2.2.6. Exercise - Finding a Cool Project
2.3. What is source code?
2.3.1. Exercise - Change the source code
2.3.2. Optional Exercise - Change the binary code
2.4. Source Code: To Share, or Not To Share?
2.4.1. The value of sharing
2.4.2. Exercise - List of software
2.4.3. Exercise - Compare and contrast similar proprietary and FOSS software
2.4.4. Exercise - Install a new FOSS Tool and Blog About It
2.5. Climbing Contributor Mountain
2.5.1. User
2.5.2. Seeker
2.5.3. Collaborator
2.5.4. Contributor
2.6. Building Your FOSS Portfolio
2.6.1. Exercise - Learn about a project's leaders
2.6.2. Exercise - Write your own FOSS bio
2.7. Supplemental Materials
3. The Lay of the Land
3.1. The Challenges of Global Community
3.2. The Synthetic Third Culture
3.3. Qualities of a Community
3.4. Communicating
3.4.1. Wikis
3.5. Exercise - Project Wikis
3.6. Blogs and Planets
3.7. Exercise - Linking your Blog to Planets
3.8. IRC
3.9. Exercise - Learning IRC
3.10. Mailing Lists and Newsgroups
3.11. Exercise - Joining the List
3.12. Bug Trackers and Repositories
3.13. Drawing Conclusions
3.13.1. Exercise - Share Your Thoughts
4. Getting the Code
4.1. Introduction
4.2. A Brief Introduction to FOSS Source Control Management Tools
4.2.1. Exercise - Install Subversion on Your System
4.3. Getting Help With Subversion
4.4. Getting Started: checkout
4.4.1. Exercise - Initial Checkout of the Sample Codebase
4.5. The Basic Subversion Work Cycle
4.5.1. Update Your Working Copy
4.6. Make Changes to Your Working Copy
4.6.1. Exercise - Create a Biography File and Add It to the Local Repository
4.7. Examine Your Changes
4.8. Undoing Working Changes
4.9. Resolve Conflicts (Merging Changes of Others)
4.10. Copying a File Onto Your Working File
4.11. Commit Your Changes
4.11.1. Exercise - Commit Code to the Repository
4.12. Supplemental Reading
4.13. Supplemental Exercises
5. Building the Code
5.1. From Source to Executable
5.2. What is Building, Exactly?
5.3. Living With Complexity
5.4. Building Freeciv: Watching GNU Autotools at Work
5.4.1. Finding the Installation Instructions
5.5. Installing Prerequisites
5.6. configure
5.7. make
5.8. Review: What Just Happened?
5.9. Exercise - Building Your Developer Workstation
5.10. Supplemental Reading
6. Debugging_the_Code
6.1. Introduction
6.2. Bug Trackers
6.2.1. What is a Bug Tracker, Exactly?
6.3. Sorting Through the Bugs
6.4. Exercise - Find the Oldest Bug
6.5. Exercise - Create Your Bug Tracker Account
6.6. The Anatomy of a Good Bug Report
6.6.1. Exercise - Reproduce a Bug
6.7. Bug Triage
6.7.1. Exercise - Bug Triage
6.8. Supplemental Reading
6.9. Supplemental Exercises
7. Fixing_the_Code
7.1. Introduction: Patches Welcome
7.2. What is a Patch?
7.2.1. Example of a Simple Patch
7.2.2. Exercise - Compare diff formats
7.3. Naming Conventions
7.4. Comparing Multiple Files
7.5. Patches Generated with Subversion
7.6. Applying a Patch
7.7. Submitting a Patch
7.8. Exercise - Create a Patch for a New File
7.9. Exercise - Patch echo
7.10. Exercise - Fix a Real FOSS Bug
8. Explaining the Code
8.1. Introduction
8.1.1. Exercise - Practice Good Code Commenting
8.2. Common tools and Processes for Open Source Documentation
8.2.1. Exercise - Document Your Team
8.3. Five Steps for Technical Writing
8.4. Exercise - Plan Your Technical Document
8.5. Using Documentation as a Way to Get Involved
8.5.1. Exercise - Getting Involved
8.6. Collaborating on Open Documentation
8.6.1. Exercise - Collaborating on a Small Document
8.7. Documenting Technical and Community Proceedings
8.7.1. Exercise - Document Proceedings
8.8. References and Further Reading
9. Release Early, Release Often
A. Instructor Guide
A.1. Chapter Notes
A.1.1. Lay of the Land
A.2. Getting the Code
A.3. Building the Code
A.4. Debugging the Code
A.5. Explaining the Code
A.5.1. Teach two important sections ASAP
A.6. Notes for the 0.9 Release
B. Glossary of Terms
B.1. From the Foreword
B.2. From the Introduction to Free and Open Source Software
B.3. From The Lay of the Land
B.4. From Getting the Code
C. Revision History