How To Contribute To Open Source Projects Effectively

Here are some pointers accumulated from having contributed – often successfully, but occasionally less so – to several open source software projects over the past few years.

If you're new to the goodies of open source then it might seem like it, but it's NOT your project!

Just because you're allowed to offer changes to a project, and to take your own copy to do whatever the license allows (which might be, but isn’t always, whatever you want), that doesn't mean it's your project. Not everyone is equal in open source and you're definitely not equal, when you're brand new to a project!

What should a Pull Request look like?

A open source Pull Request should add - or change - just one feature of the software, and it should be the minimal set of changes needed to make that change cleanly; for instance, additional code tidying, done to make your life easier, does not make life easier for the project maintainer when reviewing your changes.

Open an Issue

Always create an Issue describing the problem, even if you have a Pull Request ready that you believe fixes it, and even if that seems like direct duplication to you. It's simply how projects on GitHub - and most similar sites - are structured.

Feature requests and support requests don't belong on the Issues page

The Issues page is for suggesting genuine Issues, and it's not (normally) the right place for making feature requests; unless you know the code well enough that you are prepared to offer to implement the feature yourself. If you want to make a feature request, but don't know how (or don't have the time) to implement the change yourself, there is usually a different forum for this: check out the GitHub project README file, and any other project homepages and documentation, to find out what channels are available.

Wait for a response

Sometimes, you'll try to raise an Issue, but you won't get a timely response... where by 'timely', I mean that you should allow at least several days! Open source maintainers are often one person bands, and are usually really busy with their day job, as well as with the open source software that they are maintaining - often in their personal spare time.

(Almost certainly) don't maintain a long-term fork the project, not even a private one for your own use

A fork is your own copy of the project, which you take and work on. The basic act of forking (i.e. essentially just taking your own copy, though GitHub has specific workflows to support this), then making and debugging changes, then offering them back to the main project is all just how open source works. That's absolutely fine.

The problem with private forks

If you can't get a change you need accepted into an open source project it can be very tempting to maintain your own, modified version of the software, incorporating the changes you need.

  • A: You're going to have to keep re-doing your changes onto the upstream project, and this is going to get less and less trivial, the more the upstream project changes.
  • Q: What happens when someone else (in your team; or employed in the future to work on the software you've developed) has to maintain and update your software?
  • A: Basically, you've left your company or client reliant on an un-maintained library. Bad!
  • Find a different work-around
  • Find a different project that does what you need

The problem with public forks

The various Linux desktops all arose as forks of each other. So have the various Linux distributions themselves. So major, public forks of well-known projects can work.

  • Can they know that you are going to support and maintain the project the way the original is supported and maintained?
  • Can you know that?
  • Find a different project that does what you need

Author of Mighty micro-ORM for .NET Core, SQL & web API developer, some time computer game 3D graphics lead programmer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store