Skip to main content
Open Source:
What It Is and How to Contribute
Dr. Jan Pearce
Contents
Index
Search Book
close
Search Results:
No results.
Prev
Up
Next
Scratch ActiveCode
Profile
Course Home
Assignments
Practice
Peer Instruction (Instructor)
Peer Instruction (Student)
Change Course
Instructor's Page
Progress Page
Edit Profile
Change Password
Log Out
Front Matter
Open Source Licensing
Dedication
Acknowledgements
Preface
Forward
1
Introduction to Open Source Software (OSS)
1.1
What is Open Source Software?
1.2
Why OSS Matters
1.2.1
Source Control
1.2.2
Documentation
1.2.3
Experiencing the Software Lifecycle
1.3
About Source Code
1.3.1
What is Source Code
1.3.2
On Decompilation
1.4
On Sharing Source Code
1.4.1
Source Code: To Share, or Not To Share?
1.4.2
The value of sharing
1.5
Climbing Contributor Mountain
1.5.1
User
1.5.2
Seeker
1.5.3
Collaborator
1.5.4
Contributor
1.6
Building your OSS Portfolio
1.6.1
Building Your OSS Portfolio
1.6.2
Supplemental Materials
2
OSS Community and Communication
2.1
The Challenges of Global Community
2.2
The Synthetic Third Culture
2.3
Qualities of an OSS Community
2.3.1
Focus
2.3.2
Maturity and History
2.3.3
Type of Openness
2.3.4
Commercial Ties
2.3.5
Subgroups
2.3.6
Skills
2.3.7
Mentoring and Training
2.4
OSS Community Communication
2.4.1
Website
2.4.2
Software Engineering Collaboration Platforms (SECP)
2.4.2.1
Repository
2.4.2.2
Issue Tracker
2.4.2.3
Merge Request
2.4.2.4
Project Board
2.4.3
Other Asynchronous Communication Tools
2.4.4
Synchronous Communications
3
OSS Development Environment
3.1
Using the Command Line
3.1.1
Terminals and Related Terms
3.1.2
Why not a GUI?
3.1.3
Accessing a Terminal Window on your Machine
3.1.4
Your Shell
3.2
Basic Shell Commands
3.2.1
Introduction to Shell Commands
3.2.2
Files and File Systems
3.2.3
Shell Command Options
3.2.4
File Permissions
3.2.5
Learning More About Command Options
3.2.6
Creating and Removing Directories
3.2.7
Input and Output Redirection
3.2.8
Scripts
3.2.9
File Management
3.2.10
A few time-saving shell commands
3.3
We All Need an Editor!
3.4
Virtualization
3.4.1
The What and Why of Virtualization
3.4.2
Virtual Machines
3.4.3
Containerization
4
Version Control with Git
4.1
Why Version Control?
4.1.1
Version Control Systems
4.2
Getting Started with Git
4.2.1
Types of Version Control
4.2.2
Local VCSs
4.2.3
Centralized VCSs
4.2.4
Distributed VCSs
4.2.5
A Short History of Git
4.2.6
What is Git?
4.2.6.1
Snapshots, Not Differences
4.2.6.2
Nearly Every Operation Is Local
4.2.6.3
Git Has Integrity
4.2.6.4
Git Generally Only Adds Data
4.2.6.5
The Three File States
4.2.6.6
How Git is Organized
4.2.7
The Command Line
4.2.8
Installing Git
4.2.8.1
Installing on Linux
4.2.8.2
Installing on MacOS
4.2.8.3
Installing on Windows
4.2.9
Getting Help
4.2.10
First-Time Git Setup
4.3
Git Basics
4.3.1
Getting a Git Repository
4.3.1.1
Initializing a Repository in an Existing Directory
4.3.1.2
Cloning an Existing Repository
4.3.2
Recording Changes to the Repository
4.3.2.1
Checking the Status of Your Files
4.3.2.2
Tracking New Files
4.3.2.3
Staging Modified Files
4.3.2.4
Short Status
4.3.2.5
Ignoring Files
4.3.2.6
Viewing Your Staged and Unstaged Changes
4.3.2.7
Committing Your Changes
4.3.2.8
Skipping the Staging Area
4.3.2.9
Removing Files
4.3.2.10
Moving Files
4.3.3
Viewing the Commit History
4.3.4
Working with Remotes
4.3.4.1
Showing Your Remotes
4.3.4.2
Adding Remote Repositories
4.3.4.3
Fetching and Pulling from Your Remotes
4.3.4.4
Pushing to Your Remotes
4.4
Git Branching
4.4.1
Branches in a Nutshell
4.5
"Undoing" in Git
4.5.1
Undoing Changes
4.6
GitHub - Git in the Cloud
4.6.1
Contributing to a Project
4.6.1.1
Forking Projects
4.6.1.2
The GitHub Flow
4.6.1.3
Creating a Pull Request
4.6.1.4
Iterating on a Pull Request
4.6.1.5
Advanced Pull Requests
4.6.1.6
Pull Requests as Patches
4.6.1.7
Keeping up with Upstream
4.6.1.8
References
4.6.1.9
GitHub Flavored Markdown
4.6.1.10
Task Lists
4.6.1.11
Code Snippets
4.6.1.12
Quoting
4.6.1.13
Keep your GitHub public repository up-to-date
4.6.2
Maintaining a Project
4.6.2.1
Creating a New Repository
4.6.2.2
Adding Collaborators
4.6.2.3
Managing Pull Requests
4.6.2.4
Email Notifications
4.6.2.5
Collaborating on the Pull Request
4.6.2.6
Pull Requests on Pull Requests
4.6.2.7
Mentions and Notifications
4.6.2.8
The Notifications Page
4.6.2.9
Web Notifications
4.6.2.10
Email Notifications
4.6.2.11
Special Files
4.6.2.12
LICENSE
4.6.2.13
README
4.6.2.14
CODE_OF_CONDUCT
4.6.2.15
CONTRIBUTING
4.6.2.16
Project Administration
4.6.2.17
Changing the Default Branch
5
Open Source Licensing
5.1
About Licensing
5.1.1
Important IP Terminology
5.2
Typical Open Source Licenses
5.2.1
MIT License
5.2.2
Apache License 2.0
5.2.3
GNU General Public License v3.0
5.3
Existing OSS Communities
5.3.1
Contributing to Existing Projects
5.3.2
Changing Licenses
5.4
No License
5.4.1
In the Absence of a License
5.4.2
For potential users
6
Documentation
6.1
Documentation Matters!
6.1.1
The Purpose of Documentation
6.1.2
Effective Documentation
6.2
Documentation as Involvement
6.2.1
How Documentation Suffers
6.2.2
Getting Involved Through Documentation
6.3
Build Documentation
6.3.1
What is Building, Exactly?
6.3.2
Living With Complexity
6.4
Issue and Bug Documentation
6.4.1
Issues and Bugs, Oh My!
6.4.2
Issue and Bug Trackers
6.4.3
What is an Issue Tracker, Exactly?
6.4.4
Sorting through the Issues
6.4.5
The Anatomy of a Good Bug Report
6.4.6
Bug Triage
7
Contribution: A Quick-Start Guide
7.1
Quick Start
7.2
Friendly Communities
7.2.1
CHAOSS
7.2.2
Firefox
7.2.3
PreTeXt Authoring Software
7.2.4
Runestone Academy
Appendices
A
Git Cheat Sheet
A.1
Git Cheat Sheet
A.1.1
Getting started with a project
A.1.2
Current state
A.1.3
Git branching
A.1.4
Git stash
A.1.5
Git Restoring/Reverting
B
Shell Command Cheat Sheet
B.1
Bash Shell Cheat Sheet
C
Symbols Index
Text Index
Colophon
Appendix
B
Shell Command Cheat Sheet
B.1
Bash Shell Cheat Sheet
🔗