MASTERING GITHUB

And finally...

Contact me

You can reach me by email. I invite questions, corrections, constructive criticism and complaints (polite ones) with the following caveats:

  1. I do have a day job (surprising isn’t it), I will respond to all polite emails but not necessarily instantly.

  2. I can’t offer detailed engineering advice about specific problems (e.g. why does that valve blow all the fuses when I try to open it), but I will offer pearls of wisdom about less specific software issues.

  3. I don’t know anything about car engines or kettles so please don’t ask.

  4. For the more emotionally tainted, my dogs, are Salukis, and while it may be off topic I have a soft spot for them and I may be willing to discuss them if pushed.

  5. If your email comes down to “I think your website’s rubbish, I won’t donate to it, but I do want to shout at you for a while about your outrageous shortcomings” then please, there is no need to trouble yourself; you’ve already said everything by not donating.

So if you’re happy with that, you can reach me here:

mg@masteringgithub.com.

I’ve included the full details of how I store and manage emails in the privacy and personal data section below:

Terms of use

I’ve written this website and published it in the hope that some people will find it useful and that I’ve explain things a bit better than Git and GitHub do.

I’ve even provided a searchable pdf version of the whole thing that can be downloaded here: here.

The reason it is free is because both Git and GitHub are free platforms that allows developers of open-source projects to easily share their code and collaborate with others.

It is in that spirit that I have created this website.

The website is entirely free and is available for you to use. There is no advertising, no registration or enrolment, I don’t ask for email addresses or credit card details before you can use it (you may donate if you wish, here).

So you are free to use everything herein — yes, it is my work — yes, I own it, but I’m not going to sue anyone who uses it or even makes a profit from it. Fill your boots.

Licence

This website and associated documentation are made available under the MIT licence given in full below:

This website and associated software are made available under the following MIT Licence

The MIT License (MIT)

Copyright © 2025 Michael Gledhill

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

Why did I choose this licence?

I’m used to the sort of software licences that Siemens and Microsoft produce; the ones that say “pay me and you can use my stuff”, they also tend to say “but don’t for a minute think you can copy it and give it to someone else”.

Now, I’m letting you and everyone else use my website, my software and my documents and I’m letting you do it for nothing. I don’t expect you to pay for the privilege. But I also don’t want to be sued when you screw things up and the plant burns down (think Buncefield).

There are software licences that cover this sort of thing, they are generally called open-source licences and there is an awful lot of them, you can see a list of them here.

I ignored most of these (after a bit of research), some are just variations of others with silly terms added “The Software shall be used for Good, not Evil.” JSON I’m looking at you here (how do you enforce this, who decides what’s Good —presumably at some point Germany thought it was a good thing to invade Poland).

Others are not very widely used and consequently have not been tested in court.

There seem to be five main ones:

  • MIT licence (Massachusetts Institute of Technology)

  • Apache (Apache Software Foundation)

  • GPL (GNU†1 general public licence)

  • LGPL (GNU lesser general public licence)

  • BSD licence (Berkley Software Distribution)

†1 GNU stands for “Gnu’s Not Unix!” (this sort of stuff just gets on my nerves, it’s the UNIX, LINUX holier-than-thou mob — I’ll leave you to decide if they’ve missed an apostrophe) Gnu is the word Gnu — you know the antelope thing with big horns. It is the name of a free operating system called (yes, you guessed it): GNU.

All of these licences are very commonly used.

These licences broadly fall into two categories: “permissive” licences and “copyleft” licences.

MIT, Apache and BSD licences are all of the permissive type; GPL and LGPL are of the copyleft variety.

So what does this all mean? Well let’s have a look:

Permissive licences

Permissive licences are what most people think of when they think about open-source software. These licences are easy to comply with; essentially, a person or organisation simply has to reproduce the licence and copyright notice whenever they use the code. If they’ve done this, they may do as they wish with the code, including selling it.

Copyleft licences

Copyleft (as opposed to copyright), this is a made-up word; these licences are sometimes called reciprocal licences. Broadly these licences provide an arrangement where software may be used, modified and distributed freely (just like permissive licences); but only on the condition that anything that uses the software or is derived from it is bound by the same conditions (unlike permissive licences).

The GPL licence (General Public Licence) is a copyleft licence and it has a whiff of fanaticism about it, it is written and maintained by the Free Software Foundation (FSF), this in turn was started by Richard Stallman (er… how to say this politely? A man who can be described as “interesting”), this is a foundation that thinks open-source software doesn’t go far enough — I think basically that they are saying all software should be free and no one should make a profit from it (along the lines of “all property is theft”).

This is a bit of a problem for me, let me give you an example, let say I produce my software called: “U-Can’t-Bend-It” and license it under the GPL licence. Now let’s say you come along and think U-Can’t-Bend-It is just the thing you need for your software; you take it, modify it slightly and you now have your own version: “I-Can’t-Bend-It”. The problem here is that you can’t sell your new product; GPL requires that your software (based on my software) must be licensed under exactly the same licence as the original, i.e. distributed freely.

It’s even worse, if you already have an existing software project (it could be absolutely massive) and you use any of my “U-Can’t-Bend-It” software (perhaps to provide a particular interface), then, under the terms of the GPL licence, your whole programme is considered a derivative work and it must be released under the same GPL licence.

The LGPL (lesser GPL) has been introduce to address this particular problem (although bizarrely, the FSF website seems to discourage its use, see here); the LPGL allows the use of library software in proprietary programmes (programmes for which you can charge).

Limiting liabilities

The other thing for me to consider, is the question of liability. I do not want to be liable for any problem you may encounter when using my software.

Open-source software licences (I’m including the GPL licences in this broad definition; it will probably annoy them) generally limit the liability of those providing the software to zero; this is exactly the same amount that those providing the software get paid— NOTHING.

Both the permissive licences and the copyleft licences have terms within them that limit any liability of the provider, terms like this:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

All the above licences provide this type of protection against liability.

Which licence to use?

Ok, let’s start with the ones I’m not going to use and why.

I’m not going to use the copyleft (GPL and LGPL) licences. This is because they don’t let you (as in people who download the software) make money from the software provided.

I also just don’t like the FSF; there is a fanatical zeal there that I can’t come to terms with (bit like Jeremy Corbyn supporters and Linux people—they seem to me, to be entirely convinced of their own moral superiority and completely dismissive of any other argument. They have a stifling certitude; an implacable self-righteousness and they are always, always willing to be offended).

So I’m not using GPL or LGPL—sorry Mr Stallman.

That leaves the permissive licences: MIT, Apache and BSD.

I’m not going to use the BSD licence; this is mainly because it is very similar to the MIT licence, but is not as widely used.

The Apache licence is a more complicated version of the MIT licence; I didn’t understand it. It is not that widely used outside the Apache Software Foundation and I’m not using it.

So now it’s just the MIT licence and that is the one I’m using. You can see it in full at the start of this section.

Basically, you can do what you like with the code and documentation provided, if, and only if, you reproduce the MIT licence somewhere within your application and give credit to me (the copyright bit) as the author.

Oh, yes, the final point: don’t sue me if it all goes tits up.

A note on spelling: licence or license

Licence or license? I’m English so I think licenece is a noun and license is a verb: James Bond is licensed to kill, so he has a killing licence. Americans, use license as both the noun and the verb (of course they do).

Generally I use the proper English spelling; I differ only when I’m using a literal explanation of something on a screen, or something being installed etc. and it’s important to clearly show exactly what the user will see.

Acknowledgements

Thanks to everyone who given money to this website. Your contributions are appreciated.

Thanks to the dogs: Hector (left), Henry (middle) and Percy (right).

And the current batch, Matilda (left), Galahad (right):

Their advice has been invaluable.

The images in the website are of my own or of my creation (which probably explains the poor quality).

The main fonts used were created by Mr Matthew Butterick and are Equity (serif font), Concourse (sans serif font) and Triplicate (monospace font). If you want to use them you can buy them here.

Two Google fonts are used, Poppins and Roboto Serif, both are available under the SIL open font licence below:

sil open font license v1.1

SIL Open Font License v1.1
26 February 2007

Preamble

The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.

The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.

Definitions

“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.

“Reserved Font Name” refers to any names specified as such after the copyright statement(s).

“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).

“Modified Version” refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.

“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.

Permission & conditions

Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:

  • Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.

  • Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.

  • No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.

  • The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.

  • Entry5

Termination

This license becomes null and void if any of the above conditions are not met.

DISCLAIMER

The font software is provided “as is”, without warranty of any kind, express or implied, including but not limited to any warranties of merchantability, fitness for a particular purpose and non-infringement of copyright, patent, trademark, or other right. In no event shall the copyright holder be liable for any claim, damages or other liability, including any general, special, indirect, incidental, or consequential damages, whether in an action of contract, tort or otherwise, arising from, out of the use or inability to use the font software or from other dealings in the font software.

SIL Open Font Licence

The website uses various third-party software and files, I hope I’ve adequately and correctly made notification of them on the website and in the source code — I do so again here:

File Author(s) Purpose

normalise.css

(8.0.1)
Nicolas Gallagher
Jonathan Neal
Conditions various html tags so that they are rendered consistently in different browsers

jquery.min.js

(3.7.1)
jQuery foundation
(Google hosted library )
jQuery library used to run the jQuery scripts

waypoints.min.js

(4.0.1)
Caleb Troughton Used to detect when to switch to fixed navigation bar (has many other uses)

hyphenator.js

(5.1.0)
Mathias Nater Dynamically hyphenates text within a web page

run_prettify.js

(2013)
Google Used to display code fragments within a html page

lightbox.js

(2.11.5)
Lokesh Dhakar Used to overlay images on top of the current page

mathjax.js

(4.1.0)
MathJax Renders AsciiMath, TeX/LaTeX and MathML code as standard mathematical notation
Third-party software running on the website

jQuery, Normalise, Hyphenator, Lightbox and Waypoints are available under the GitHub MIT licence (reproduced below) and MathJax and Prettify are available under the Apache 2.0 licence (also reproduced below):

GITHUB MIT LICENCE

The MIT License (MIT)

Copyright © [Authors as listed in the above table]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

Github Massachusetts Institute of Technology (MIT)Licence
APACHE 2.0 LICENCE AND REFERENCE

The Apache License Version 2.0, January 2004

Copyright © [Authors as listed in the above table]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:

http://apache.org/licenses/license-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "as is" basis, without warranties or conditions of any kind, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Apache Licence

Privacy and cookies

This is a big thing now in Europe and in England: GDPR (General Data Protection Regulation); it means I have to be very careful with any data I collect about people. I also have to explain why I want the data and what I’m going to do with it. So here goes:

Cookies

The only cookies used on this site are those needed for Google Analytics.

When you first access this site, you will be prompted to enable or disable the cookies that run on this website. Be default (if you do nothing), cookies will be disabled, and no cookies will be installed.

You can change the settings at any time by clicking the Privacy & settings option at the bottom of each page on the website.

Goole Analytics (GA4 to be exact) is used to help analyse how visitors access and operate the site. It works by installing cookies on your computer. Cookies are small text files that are used to collect standard internet log data (time of visit, type of browser, operating system etc.) and visitor behaviour information (referring sites, landing page, links to other sites that have been clicked etc.). It collects this data in an anonymous form. Note the deliberate emphasis on anonymous, no personally identifiable information is collected, the type of information collected by Google Analytics is given on their help page under data collected by google analytics.

The anonymous information generated by the Google Analytics cookies about the use of this website is transmitted to Google — not to me. This information is processed to compile statistical reports on website activity (for this site only). I use these reports to evaluate the aggregate visitor usage of the site; I do this so that I can optimise the website content, and hopefully, make it better (If I’m being honest, I also like to know how many people visit, it make me feel better if the number goes up).

Privacy and personal data

This website does not ask for, nor does it collect personal data. There is no registration form that asks for names, addresses, email details, phone numbers or credit card information etc. Neither are there any user logons or other such forms of identification.

People can email me (personally) if they want to, but that is their choice (I’ve given my email address in a previous section and again below) and I will respond as an individual to any emails I receive.

Where people do email me, I will not pass on any of their details to anyone else (even when they are rude to me). I respond directly to the sender and do not copy, forward or otherwise redistribute their emails with anyone else.

I delete all emails three months after the email conversation is complete (i.e. if you haven’t emailed me for three months, I delete all the emails I’ve received from you and any replies I’ve sent to you).

I do not reply to abusive emails (never argue with a stranger on the internet) and these I delete straight away.

Where someone has asked a common or pertinent question, I may store the question itself and my response (these are copied to an offline Word FAQ sheet — what engineers call a technical query sheet), but I do not store any of the questioner’s details (just the question and answer in an anonymous text-based format).

I accept donations via PayPal and PayPal notify me whenever I receive a donation.

PayPal stores the identification of the person making the donation for financial record keeping and this information is available to me via the PayPal website (I do not store this information personally).

I do not send marketing or unsolicited emails of any kind (I do not have a mailing list or anything like that).

Anyone wishing to have their details deleted need only ask. You can contact me at the following email address:

mg@masteringgithub.com.