Contributing to FLOSS

Oxford, UK: ox.ogeer.org

2026-02-14 (I Love Free Software Day)

© 2026 Oliver Geer, CC-BY-SA-4.0; third-party licenses mentioned inline

(Use ←→ to navigate between categories; ↓↑ to navigate between slides.)
Available @ ogeer.org/c2f. Using reveal.js (MIT).

What is Free, Libre, and Open-Source Software?

Modified from a presentation by the FSFE, licensed under CC-BY 4.0 International.

What is Free, Libre, and Open-Source Software?

  • Software is deeply involved in all aspects of our lives
  • Free Software is Software that is licensed under a Free Software license (e.g. GNU GPL, AGPL)
  • Synonyms: Free Software, Libre Software, Open-Source Software, FOSS, FLOSS

4 Freedoms

Use, Study, Share, Improve.

Freedom to Use

  • Installing and running the program is not restricted
  • Restrictions could be:
    • Time ("30 days trial period", "license expires January 1st, 2004")
    • Purpose ("permission granted for research and non-commercial use", "may not be used for benchmarking")
    • Geographic area ("must not be used in country X") makes a program non-free

Freedom to Study

  • Free Software and its code can be studied by anyone, without non‐disclosure agreements or similar restrictions.
  • Making the way of comprehending and editing a program (“source code”) inaccessible makes it proprietary (non-free).
A non-disclosure agreement, crossed out.

Freedom to Share

  • Software can be copied/distributed at virtually no cost
    (i.e. license fees and royalties are not permitted).
    • Governments and organizations worldwide share software source code for e.g. Etalab in France
    • public benefit,
    • reducing duplication of effort and costs
      by reusing and improving shared solutions

Freedom to Improve

  • This freedom allows everyone to modify or further improve the software. For example by adding new functions.
  • Allowing anyone to enhance (e.g. adding new functions)
    • enables innovation,
    • personalising the software while contributing to the larger ecosystem.

Why is Free Software important?

  • Democratic freedoms: freedom of speech, press, and privacy by securing individual’s control over their technology
  • Collaboration: communities share and improve software, e.g. Mozilla Firefox community
  • Sustainability: encourages transparency and independence, e.g The Software Heritage archive

Examples of Free Software

  • In government, businesses and education
  • Linux, LibreOffice, Firefox

The Linux mascot, called Tux the penguin LibreOffice logo, by The Document Foundation Firefox logo

What to Contribute to

  • What FLOSS do you use/want?
  • What skills do you have? What aims do you have?
Logos of FLOSS projects you may want to contribute to. Logos include: Firefox, Blender, Linux, Filezilla, Ubuntu, GIMP, Tor, 7-Zip, Darktable, Debian, VLC, Conversations XMPP client, DavX5, openSUSE, F-Droid, Linux Mint, LibreOffice, KDE, Python, Inkscape, Raspberry Pi, Krita, GNOME, Gentoo...

Image CC-BY-SA 4.0 MotionEnsemble.de for FSFE

My Tips

  • So many ways to contribute!
  • Maintainers often work tirelessly. Please assume good faith, and show thanks (you're not in a contract with them). They may not accept all contributions (you can still offer your changes publicly from your fork), but don't let this scare you from submitting.
  • Good to start by "scratching your own itch".
  • Submit separate contributions for atomic, independent features.

Contributing Bug Reports and Feature Requests

My Recommendations

  • You may see a report template recommended by the project when you start to write it. I know it is time-consuming but makes it quicker and easier for your information to be processed.
  • Include your operating system and application version in bug reports.
  • Submit a set of clear instructions for how to reproduce the bug, if you know how to.
  • Submit a screenshot or recording of the bug if appropriate.

Code Forges: Issues

In Forgejo, for example Codeberg, the Issues tab is in the navigation element after the initial list of buttons, in the main element.
In GitHub, the Issues tab is in the navigation element after the initial list of buttons, in the main element.
In GitLab, the Issues tab is in the primary navigation element, under the 'Plan' dropdown.
Forgejo GPL-3.0+; GitHub fair dealing for education; GitLab MIT © 2011-present GitLab Inc.

Code Forges: Issues

  • Scroll down on the main page and read the README.
  • If there's a CONTRIBUTING file or a contributing section in the README, follow its instructions, not these ones.
  • Create a new issue to report a bug or give ideas for features.
  • Create a new pull/merge request to submit your modified version (the next section).
  • You can navigate through the code on the main page.

Bugzilla

Click the relevant button in the main list of links, labelled 'File a bug', 'Report an issue', or similar. Note that Mozilla has one link for Mozilla projects and a different one for web compatibility issues 'with a website that I use'.

Bugzilla MPL-2.0; WebKit skin fair dealing for education

Contributing Code

My Recommendations

  • If you're writing a non-trivial feature or fix, submit or comment on an issue first, so there's unnecessary work.
  • Don't just submit "fixes" written by an LLM. The code is probably plausible but incorrect, and many bugs will require new information to fix - that's why they're still open. What's more, some projects outright ban it.
  • If you know how to, test your code lightly before submitting it.

Rationale

  • We'll be using Git, a powerful tool that can manage versions and changes to code. These instructions are kept quite short, but the versioning system is the reason for them.
  • This may differ from previous guidance because it suggests SSH. SSH helps simplify login when used with Git.
  • A few projects, notably Mozilla Thunderbird and Firefox, don't use Git. Please look at their documentation instead.
  • Some projects (Linux, PostgreSQL, things on Sourcehut) use Git with email rather than pull requests. If so, follow the "Setting up Git to code" instructions then those at git-send-email.io

Code Forges: Fork then code then Pull/Merge Request

In Forgejo, for example Codeberg, the fork button is in the first row of buttons after the title, in the main element. The pull request tab is in the navigation element after these buttons.
In GitHub, the fork button is in the first list of links after the title, in the main element. The pull request tab is in the navigation element after these links.
In GitLab, the fork button is only available if you are logged in, and in the group of links after the title, along with 'Star' etcetera. The merge request tab is in the primary navigation element, under the 'Code' dropdown.
Forgejo GPL-3.0+; GitHub fair dealing for education; GitLab MIT © 2011-present GitLab Inc.

Code Forges 1 of 4: Start with a Fork

  • Scroll down on the main page and read the README.
  • If there's a CONTRIBUTING file or a contributing section in the README, follow its instructions alongside these ones.
  • Click the fork button and create an account to create your own version of the code (a "fork").

Code Forges 2 of 4: Setting up Git to code

  1. Open a terminal - any will work on Linux, BSD and Mac but on Windows it must be PowerShell.
  2. Run ssh in the terminal; install SSH if it errors.
  3. If you don't already have an SSH key, run ssh-keygen: default values should be fine.
  4. Run cat ~/.ssh/id_ed25519.pub, replacing the ~/.ssh/id_ed25519 with the file you selected at the start of ssh-keygen. Remember the .pub. Copy the output which should be a single line.
  5. In the code forge website, go to Settings (first click on your profile picture), go to SSH Keys, and add a new key. Paste into the "key" field, and put something like "laptop" in the "title" field.
  6. Run git; if it errors, install Git from git-scm.com.

Code Forges 3 of 4: Coding with Git

  1. In the code forge website at the fork you created, click the large "Code" dropdown and copy the SSH link.
  2. On your computer, open your code editor for a specific folder where you want the code to live, and open its integrated terminal.
  3. Run git clone --recursive git@example.com:foo/bar ., replacing git@example.com:foo/bar with the link you copied. This will download the code and its version history into the current folder.
  4. Run git branch feature-name ; git checkout feature-name, replacing feature-name with a short name for the current feature or bug you are working on (no spaces).
  5. Run git pull.
  6. Edit the code with your editor.
  7. Once edited, run git commit -a in the terminal. In the text editor that opens enter a meaningful, short description of what you did, for example "Fix tab rendering bug"; then run git push.
  8. For future edits, run git checkout main if it's a new feature to be developed independently, then steps 4-8.

Code Forges 4 of 4: Submitting with a Pull/Merge Request

  1. In your fork, create a new Pull Request.
  2. Set the dropdowns to:
    the "develop" or "main" branch of the upstream, official code repository ← the branch of your fork you have made changes to
  3. Review your changes, write an explanation in the box of the pull request, and create the pull request.
  4. Submit the pull request. Your updates won't be added straight away: the project maintainers will review your changes, and may ask you to change them, in which case just update your fork (no need to create another pull request).

Contributing to the Community

Contributing Documentation

Documentation may be on:

  • A code forge - it probably lets you navigate to the relevant docs file then click an "Edit" button, streamlined. If you need to batch-edit files or prefer a local editor, follow the "Contributing Code" instructions.
  • A wiki system - just click the "edit" button on the page and follow the instructions.

The project's specific instructions should be read first if present, and take precedence over these.

Contributing Donations

Contributing Translations

Translations may be on:

  • A translation web-app, like the FLOSS Weblate or one of several proprietary ones.
  • A code forge - it probably lets you navigate to the relevant translation file (may be in a "po" folder) then click an "Edit" button, streamlined. If you need to batch-edit files or prefer a local editor, follow the "Contributing Code" instructions.

The project's specific instructions should be read first if present, and take precedence over these.

Events Nearby & Now

ox.ogeer.org

ilovefs.org

I love Free Software!

Other Local Initiatives

  • opensource.digitalscholarship.ox.ac.uk: Connecting and discussing FLOSS projects for academic research from the University of Oxford
  • The external events mentioned on ox.ogeer.org
  • Probably more

Give Feedback and Suggestions!

  • As many or as few as you want; vote on others.
  • pol.is/2dpp3ekku3 (AGPL, loads third-party resources)