THE EQUIPMENT OF CONTRIBUTION Chris Johnson Phase2 Technology email@example.comThere are many ways to release your code, from ancient (in internetterms) methods like posting a bundle to a news group or a mailing listto more modern methods involving hosting code repositories, issuetrackers, wikis, mailing lists, etc. The central thing to remember whendeciding what tools and infrastructure you need when releasing anopen source project is
CONTRIBUTION IS COMMUNICATION • Pick tools that support the type of communication you want to have New Project Existing Project Publication ConversationContribution is communication. The types of tools that you need andthe success of your project relate directly to the type of communicationyou want to have with your users.The tools you’ll use vary between new and existing projects. And thetools for publication are much simpler than those that allow for aconversation with others about your code.But one of the essential aspects of open source is that a large part ofthe value comes from the conversation and communication.
ESSENTIAL COMMUNICATION TOOLS • Version control • Issue Reporting and Tracking • Documentation and Support • DelegationAll projects have some essential tools to help facilitate conversation at different levels(and note that developer and user can have quite a lot of overlap)Version control - who said what at the code level - how developers talk to each otherbut don’t overlook version control for documentation and non code based assetsIssue reporting and tracking - identiﬁcation and prioritization of errors, roadmapdevelopmentDocumentation and support - helps users help themselves, reduces communicationburden on project maintainersDelegation - other tools need to support this so that others can be given morecontribution capabilities to distribute workload
EXISTING PROJECT • Problem Solved • Get access to existing infrastructure • Three Examples • Linux, Drupal, Jenkins • Be Aware of LicensingLet’s talk about the easy stuff ﬁrst. An existing project will likely already have code repositories, issue tracking and documentation infrastructure in place and it’s just a matter of learning how theproject works and asking the right person for the access you need. By the time you have contributions for an existing project you probably already know much of this.As an example, the three projects listed have fairly different contribution mechanisms. For the linux kernel this is generally done through sets of discussions on a mailing list along with attachedpatches. Trusted maintainers patch their repositories and then these ﬂow to the main repository from which new distributions are released.For Drupal, anyone can create an account on Drupal.org which lets them create a sandbox project, participate in issue queues (where patches are posted) and edit documentation. After going throughan approval process you can make sandboxed code an official contributed project.Jenkins, which is a project that creates a continuous integration server, access to the code on GitHub is requested on the mailing list. Generally to transfer an existing GitHub repo containing yourcontributions to the main Jenkins account. Access to the wiki and Jira is done via self service account creation.Be aware that sometimes using a project’s infrastructure means using their licensing. If that is not acceptable, then your contributions should be considered a new project.
NEW PROJECT • Conversation or Publication • Be clear with users which you are doingWhen you are starting one from scratch you need to decide whether you are trying to start aconversation or just publish some code.Publication is the most simple, you might not even need any new infrastructure as you canplace a download on your existing web site or post it to a mailing list.It is also important to be clear about what you are doing, especially in the publication model.The default stance with open source is that by making your code publicly available there issome minimum level of involvement you would like to have with those trying to use yourcode or contribute back to it. If you just want someone to take it as a starting point then youshould be very clear about that.
PUBLICATION • Use systems that allow projects to evolve • Distributed version control • Some hosting options • SourceForge • Google Code • GitHub • BitBucketEven if you want to use a publication model, I would encourage you to do it in away that a conversation can grow without your involvement. You can do this byusing tools where people can easily copy and extend what you have produced.I’ve listed some hosting options that are particularly suited to open source,there are a plethora of others. Some of these are particularly well suited toturning a publication model into a conversation model (GitHub for exampleallows easy forking of repositories so someone could take your code, extend itand start a community around it if they had the desire). While this is possiblewith any publication model, it’s easier on some systems than others.
MAKE IT EASY TO START • Documentation, Documentation, Documentation • Answer the right questions for new people • What does this do? • How do I get it? • How do I use it? • How do I improve this and contribute back? • Publicize availability • Blog Posts, Press Releases, Twitter, Conferences, Journals Articles, Civic CommonsRegardless of what type of communication you want it’s critical to make it easy to start. Which usually involvesmainly documentation: examples, with screenshots, screencasts, tutorials, walk throughs, etc. The lower thebarrier between someone seeing your project, ﬁguring out that it would be useful for them and downloading itand having it running the better. And as soon as they’ve done that, you want to be sure they know how tocontribute back when they make improvements.Especially for new projects don’t neglect letting the world know it’s out there. Go where people who would ﬁndyour project useful hang out and tell them about it.Code for america has sponsored a project called Civic Commons especially for documenting and publicizingprojects that might be of interest to government. For those that might be in the DoD there’s Forge.mil,
NEW PROJECT TOOLS • Version control • Issue Reporting and Tracking • Documentation • Delegation • EvangelismWhen you are evaluating where to host your project, consider that youare going to need at minimum some of the following capabilities:Version control - to track code evolutionIssue reporting and tracking - bug tracking systemDocumentation - wiki, forums, mailing listsDelegation - ways to let trusted users join and take on some of theworkload of a projectEvangelism - not necessarily a tool of your hosting but all projects needsome sort of promotion so that people know they exist