If you don’t already know, GitHub is a software projects hosting service – it’s a kind of social networking site for code projects. You use version control software Git on your own computer, and push your code to a repository in your account on GitHub, where it is viewed on the web and can be shared with others. If you’ve worked on a code project beyond single scripts before, you’ve probably thought about taking precautions against losing work, breaking features and maybe even encountered problems with working on a project with a friend. Git allows you to track changes in your codebase and revert back to previous states. GitHub gives you a nice clean interface in the web to help manage these changes.
The real power of GitHub lies in the ability to collaborate on projects with people around the world – and in how people can take existing code written for one purpose and take it in another direction to suit their own project.
GitHub lies at the centre of many operations at Raspberry Pi – our version of the Linux kernel, our userland and firmware source code, as well as NOOBS and raspi-config – and soon, our documentation, learning resources and more. Our version of the Linux kernel is a fork of the main Linux kernel. While diverging from the upstream for our special case additions (we make changes to suit the Raspberry Pi’s hardware), we keep in track with additions that land in the main version, and the enhancements are sent back upstream – to the original Linux kernel where they’re merged in. Imagine trying to manage this without software!
Open Source also helps our community grow stronger. It’s far from uncommon to see the makers behind Raspberry Pi projects putting their code on GitHub and sharing how they built that touchscreen timelapse controller, cat laser toy or universal translator – with accompanying documentation and instructions. Also the various general purpose libraries that get written – they’re shared, then they’re improved and expanded by others and help way more people than originally intended, such as Jason’s Piglow module, Will’s gamepad library and Dave’s picamera module. Isn’t it amazing that you can look at the code behind how these things work? You can even fix bugs or add features yourself!
As Gordon mentioned in the video interview we posted at the weekend, some USB bugs in Raspberry Pi were fixed by a keen and talented member of the community, which were sent over via Pull Requests and merged in to the main repository – he (Jonathan) was then hired to work on the engineering team at Pi Towers. This sort of important contribution, and the ability for it to take place, is invaluable in the tech community.
There’s more to open source than simply making your code public – there’s plenty to learn about communication and collaboration. Big projects like Linux and Python require people to talk to each other, work out where things are going and someone has to manage people and make decisions. There’s usually someone in charge – often referred to as the B.D.F.L. (Benevolent Dictator For Life – Linus for Linux and Guido for Python). Using GitHub in a small team on a school project will shed light on the kinds of problems that come up: you want to prevent two people doing the same work twice; your code needs to be able to interact with other people’s code; you might have different opinions on code styles or ways of solving problems; and there are various workflows people might be used to. It’s a skill to be able to communicate with others, in technology like in any other area – and technology has the advantage of awesome tools that make this more manageable.
One of my favourite tools at the moment is Waffle.io – it gives you Trello-style columns for your GitHub issues. I use it to visualise the workflow of features I intend to write, bugs I need to fix and other things I need to consider. You even have a comment thread attached to each issue, so you can discuss options (your conversations and decisions are open too). Even if I’m the only one working on a project I still use Git, GitHub and Waffle because it helps me manage myself. GitHub can be used for much more than just code; people use it for managing changes in written work such as documentation, blogs and even legal documents. One guy even used GitHub issues to manage the “bugs” (work needed doing) on his house.
Git was created by Linus Torvalds to manage changes in the Linux kernel because at the time no existing version control software worked the way he wanted. GitHub was set up in 2008 by developers in San Francisco and currently hosts more than 10 million repositories. See some organisations on GitHub: NASA, BBC TV, BBC News, The Guardian, Microsoft, GOV.UK, The White House (see Issue #3) … and GitHub.
If you want to learn how to use Git – GitHub provides a great online tool for getting started: Try Git. Git is very powerful, and has advanced features, but can be used at a basic level with very little experience. Be sure to check out GitHub Pages which is great for making a webpage for your project. Note that at present, GitHub users must be aged 13 or older.
If you’re a teacher or student, head over to education.github.com to find out more about classroom organisations, free accounts and other discounts.
We’d love to see examples of young coders and makers putting their projects on GitHub – especially its use in education. Please post links in the comments.