Open source
Open source, minus the folklore.
What it is, what the licences actually say, how to send your first pull request without starting a war, and a wall of things people really wrote.
What is open source, anyway?
Free software and open source software are programs whose source code you may read, run, change and share, under a licence that says so in writing. The licence is the whole trick: without one, code on the internet is just code you are not allowed to touch.
'Free software' comes from the GNU project and is about freedom, not price: run it, study it, change it, share it. 'Open source' was popularised in 1998 and is defined by the Open Source Initiative's Open Source Definition. The two lists of approved licences overlap heavily. The arguments about which name is better do not.
None of this means 'no rules'. It means the rules are public and you can read them, which is more than most terms of service can claim.
Licences, in short
Seven licences you will meet constantly. These are summaries for orientation, not legal advice; the licence text is what counts, and a lawyer is what counts when the stakes are real.
GNU GPL (v2 / v3)
Strong copyleftIf you distribute a modified or combined work, it must be under the GPL too, source included.
- You may
- Use, modify, sell and redistribute, including commercially.
- You must
- Pass on the same freedoms and offer the source of what you distribute. Keep notices. GPLv3 adds an explicit patent grant and anti-lockdown terms.
- Watch out
- Linux itself is GPL-2.0 only. GPLv2 and GPLv3 code cannot always be combined.
GNU LGPL
Weak copyleftA GPL variant for libraries: other programs may use the library without becoming LGPL.
- You may
- Link the library from software under any licence, including proprietary.
- You must
- Changes to the library itself stay LGPL, and users must be able to replace the library with their own modified version.
- Watch out
- Static linking makes the replace-the-library requirement harder to meet.
GNU AGPL v3
Network copyleftThe GPL, plus a clause for software run as a network service.
- You may
- Everything the GPL allows.
- You must
- If users interact with your modified version over a network, you must offer them its source.
- Watch out
- Many companies ban AGPL dependencies outright. This is the point.
MIT
PermissiveDo nearly anything, keep the copyright notice.
- You may
- Use, copy, modify, merge, publish, distribute, sublicense and sell.
- You must
- Include the copyright and permission notice in copies.
- Watch out
- No patent grant, and no warranty: it is provided 'as is'.
BSD (2-clause / 3-clause)
PermissiveLike MIT, from the Berkeley tradition.
- You may
- Use, modify and redistribute in source or binary form, including in proprietary products.
- You must
- Keep the notice and disclaimer. The 3-clause version also forbids using the authors' names to endorse derived products without permission.
- Watch out
- The old 4-clause 'advertising' version is a different, GPL-incompatible licence.
Apache License 2.0
PermissivePermissive, with an explicit patent grant.
- You may
- Use, modify and redistribute, including commercially, and a licence to the contributors' patents covering their contribution.
- You must
- Keep notices, state significant changes, and include the licence. The patent grant ends for anyone who sues over patents in the work.
- Watch out
- Apache 2.0 is compatible with GPLv3, but not with GPLv2.
Mozilla Public License 2.0
File-level copyleftCopyleft per file: change an MPL file and that file stays MPL.
- You may
- Combine MPL files with code under other licences in a larger work.
- You must
- Make the source of modified MPL files available under the MPL.
- Watch out
- Copyleft stops at the file boundary, so the rest of your project can stay as it is.
Your first pull request
Most maintainers are volunteers with day jobs. A good first contribution is small, clear and easy to review. A checklist:
- Pick something you already use. You know where it hurts. Documentation typos and unclear error messages are valid first contributions.
- Read the project's rules. README, CONTRIBUTING, CODE_OF_CONDUCT and the licence. Five minutes here saves a rejected pull request.
- Find or open an issue. Look for labels such as 'good first issue'. For anything bigger than a typo, comment first so nobody builds the same thing twice.
- Fork, branch, build, run the tests. Confirm it works before you change it, so you know whose fault a failure is.
- Make one small change. One concern per pull request. Follow the existing style and commit message conventions, even the ones you disagree with.
- Explain what, why and how you tested. Link the issue. Include screenshots for visible changes. Reviewers are reading this between other things.
- Check for sign-off requirements. Some projects ask for a Developer Certificate of Origin sign-off (git commit -s) or a contributor licence agreement.
- Take review gracefully. Expect requests for changes, and sometimes a polite no. It is about the code and the project's direction, not you.
The lore wall
Things people actually wrote, with sources and dates. Quotes are exact; the commentary underneath is ours. Items we could not source are not on the wall.
Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.
Linus Torvalds, The post to comp.os.minix that started it. He had considered the name Freax; the FTP administrator, Ari Lemmke, put it in a directory called linux instead.
Source: Wikipedia: History of Linux
I still maintain the point that designing a monolithic kernel in 1991 is a fundamental error.
Andrew Tanenbaum, From the 'LINUX is obsolete' thread. Linux has since been a monolithic kernel on most of the world's servers, phones and supercomputers.
Source: O'Reilly, Open Sources: the Tanenbaum-Torvalds debate
Starting this Thanksgiving I am going to write a complete Unix-compatible software system called GNU…
Richard Stallman, The GNU announcement. Its own kernel, the Hurd, took long enough that Debian GNU/Hurd 2025 arrived in the 2020s, described by Debian as 'not an official Debian release'.
Source: GNU Project: initial announcement | Debian GNU/Hurd news
Talk is cheap. Show me the code.
Linus Torvalds, The unofficial motto of every code review since.
Source: LKML archive | Wikiquote
WE DO NOT BREAK USERSPACE!
Linus Torvalds, The kernel's most firmly enforced rule: changes must not break programs that already run. Capital letters were considered necessary.
Source: lore.kernel.org
Nvidia has been the single worst company we've ever dealt with.
Linus Torvalds, Said at Aalto University. He followed it with a gesture and a word we will not reproduce here. Driver support has improved since; opinions, perhaps less so.
Source: Wikiquote: Linus Torvalds
Only wimps use tape backup: _real_ men just upload their important stuff on ftp…
Linus Torvalds, A backup strategy that depends on strangers mirroring your files. Cheaper than tape, and it worked out for exactly one person.
Source: LKML hypermail archive
Linux is a cancer that attaches itself in an intellectual property sense to everything it touches
Steve Ballmer, Said to the Chicago Sun-Times about the GPL. Microsoft has since shipped a Linux kernel inside Windows (WSL).
Source: The Register
quite a sick place to be in
Lennart Poettering, His description of the Linux kernel community, as reported by The Register, during the height of the systemd arguments.
Source: The Register
the random number generator in Debian's openssl package is predictable
Debian Security Advisory DSA-1571, A Debian-specific change had weakened OpenSSL's random number generator, so keys generated with it could be guessed (CVE-2008-0166). Patching upstream code is fine; patching it without upstream is how you get a funeral.
Source: Debian security-announce
rm -rf /usr /lib/nvidia-current/xorg/xorg
Bumblebee install script, One stray space. The author meant /usr/lib/nvidia-current/xorg/xorg, and instead asked for /usr to be removed. The commit that fixed it apologised.
Source: Bumblebee commit a047be8
Moved ~/.local/share/steam. Ran steam. It deleted everything on system owned by user.
Steam for Linux user report #3671, The line blamed in the report was rm -rf "$STEAMROOT/"*. Quote your variables, and never trust one you have not checked.
The upstream xz repository and the xz tarballs have been backdoored.
Andres Freund, He noticed because SSH logins were using more CPU than expected, and kept pulling the thread. One engineer with a profiler may have saved a very large number of servers.
Source: oss-security mailing list
I know now this was not OK and I am truly sorry.
Linus Torvalds, His apology for how he had treated people on the kernel mailing list, announced together with a break from maintainership. Included because the community is allowed to grow up too.
Source: LWN.net