Getting started in open source is an interesting road. If you search the web for "getting started in open source", you find a slew of posts that detail basic steps like:
- How to pick a project.
- Start by listening in (irc, mailing lists, forums, bug trackers)
- Commence participation in small increments. Answer questions in forums, make small documentation updates. Generally familiarize yourself more with processes.
- Move slowly and confidently into larger updates and closer to core contribution over time.
- Congratulations, you made it.
These are accurate details, and I must admit that I was guilty of this same series of steps in an earlier post. However, I think this is like saying:
Getting started in automotive maintenance:
- Read up on car maintenance and upkeep.
- Figure out when your car requires maintenance.
- Maintain the car.
- You did it!
To someone who understands automotive maintenance, these are perfectly adequate steps. But for everyone else, these steps are less than helpful, since the primary difficulty persistes - it is merely isolated to step three. To address this issue, I propose a foundational open source curriculum.
I am reasonably confident that I can find courses that will offer me some of this knowledge piece by piece. The issue is that when someone wants to get started in open source, they start searching for the means, and none of this information is apparent, and I could not find it anywhere as a coherent whole. Given that issue, my goal is to lay out the items that I think are necessary to get started in open source. Since I'm working on enhancing my open source participation right now, I conveniently have some insight regarding helpful details I had coming into the effort, and also the areas where my skills and knowledge are lacking. Some of these are small and would be quick to review and learn. Others would require vast efforts to even scratch the surface. They are:
- Communication utilities
- Knowledge sharing
- Issue tracking
- Version control systems
- Workflow strategies and project timelines
- Leadership/Steering/Governance Systems
- Business Models
Review the importance of licenses and how they impact the future of a project's source code. Learn key terminology in both human-readable license text and legal license text and how particular key words modify possible code usage by other individuals and organizations.
Initiate a mailing list through several popular services for open source projects. Participate in mailing list, review alternative mail clients and mailing list management techniques (filters, folders, etc.).
Optional Admin supplement: Install and configure a mailing list on a private server.
Participate in IRC channels. Learn IRC fundamentals using a terminal client. Practice IRC fundamentals in popular GUI clients. Choose a preferred client and participate in multiple IRC channels concurrently. Have an IRC meeting, log minutes.
Optional Admin supplement: Install and configure an IRC server on a private server. Configure logging, create bots.
Review popular open source wikis. Review common wiki markup techniques and create pages in sandboxes possibly including mediawiki, twiki, confluence, redmine, etc. Review page creation, updating, and reverting. Investigate styling/templating/scaffolding options for each (or the selected) wiki.
Review popular forums. Review common markup for forum posts, participation techniques, merit-based status, and moderation techniques.
Optional Admin supplement: Install and configure wiki(s) and forum(s). Restyle wiki/forum to a degree that it no longer immediately reflects the default installation. Configure users and permission schemes.
Review issue logging techniques and best practices. Review common issue workflows. Enter issues in common issue tracking software: Bugzilla, Jira, Trac, Google Code, Mantis, Redmine. Process issues as users with various roles/permissions.
Optional Admin supplement: Install and configure issue tracker(s). Restyle issue tracker, configure custom workflows and users with permission schemes.
Version control systems
Learn basic advantages of VCS. Review distinctions between centralized/decentralized VCS. Install and configure various VCS, create and manipulate projects following common personal workflows. Clone existing projects, make local updates, create patches, and commit changes. Learn common VCS service sites (github, gitorious, launchpad, bitbucket, sourceforge). Recommended VCS: git, bazaar, mercurial, subversion.
Optional Admin supplement: Install and configure a local VCS on a private server. Configure users and ensure appropriate permissions.
Workflow strategies and Project timelines
Review and discuss release strategies and per release workflow techniques. Case study oriented reviews discussing pros and cons of popular (or failed) strategies for general open source project workflow and timeline handling. Provide a feel for why things happen in the order they do, and why the workflow is how it is. Review ways that VCS, Issue Trackers, and Knowlege Bases supplement and/or hinder workflow strategies.
Review and discuss karma/meritocracy systems of leadership. Highlight pros/cons and discuss why this technique is successful in open source projects and why it does not tend to work as well in other environments. Case study oriented reviews of more and less successful open source projects and their systems of governance.
Review and discuss various business models associated with open source projects. Case study oriented; ideally covers commercial and non-commerical variants of non-contributors, contributors, and core-contributors.
This is where languages, IDEs, package managers, simulator/emulators, etc. fit. These are definitely necessary, but they are beyond foundational levels, as they inherently apply to only a sub-set of open source projects. Still very worth learning, but it does not seem like a great usage of time to analyze all the IDEs out there in the interest of being ready for whatever your final target project happens to use.
I'm sure I missed a few things that would be helpful for setting up a solid foundation for getting started in open source, but I keep wishing I had a better understanding of these items in particular. When other topics start making their way into the forefront, I will either update the post, or write a new revision.
If there is anything that I overlooked, post it in the comments. I will be sure to add my two cents, and maybe even slide recommendations into the post.