Open-Source, Github, and Contribution - An Introduction

Members of the department of Computer-Science and PFW ACM alike often talk about Open-Source software and Github, but what do these things actually refer to? How can we use these to help us?

Community Driven Development

The core idea to the Open-Source community, and platforms like Github that support it, is community development. Anyone, anywhere can be a part of developing projects with real impact on their community. Whether it be an ethically constructed Language-Model, an Operating System not owned by large corporations, or programs for identifying malicious attacks and misinformation campaigns, anything that can be created can be created with community.

As an organization seeking to foster education and open information exchange, participation in the Open-Source community (and the creation of one on PFW's campus) is something the PFW ACM strives to achieve. To that end, almost all PFW ACM projects will be open source and accepting to derivations and contributions. To learn what that means in practice, and how you can participate, read on!

What is Open-Source?

The term "Open-Source" refers to projects/software which are distributed with an Open-Source License. A software License is a document attached with a software or program, which provides legally binding guidelines for the distribution and use of that software.

There are two definitions of an Open-Source License which are often used pretty interchangeably.

The first is a broader, less formal definition. Open-Source Licensed software and projects are those projects and programs whose code and data anyone can see and validate. This means you, me, or our peers and friends can get on a computer and start looking around at things. This is what most people mean when they say Open-Source.

More formally however, the Open Source Foundation has an actual definition for Open-Source Licensed software. We've summarized their definition here:

  • Free Redistribution - The License shall not require a royalty or fee for sale or distriution
  • Source Code - Source code must be publicly available (directly or easily obtained), and project must allow its distribution in unobfuscated and variable formats
  • Derived Works - The License must allow modifications & Derived works, alongside their distribution with the License
  • Integrity of Author's Source Code - Distribution of modified source code may be allowed, if a code patching system is included instead (with explicit permission for distribution)
  • No Discrimination by Identity - No Discrimination by person or group of persons
  • No Discrimination by Endeavor - No Discrimination by intended use or field of use
  • Clear Licensing - The rights attached to the program must apply during redistribution, without the need for an additional License
  • General License - License must exist with the software, not a specific product or distribution
  • License Must Not Restrict Other Software - Must not restrict other softwares distributed alongside licensed software
  • Technology-Neutral License - No provision of the License may be predicated on any individual technology or interface style

Their definition is more strict than the commonhand definition, but don't let this worry you. This is not to prevent people from easily making Open-Source projects, but to prevent organizations and companies claiming they have Open-Source projects deceptively. This definition also ensures the core values of being Open-Source are effectively and easily maintained by a project's community.

Who Controls This?

That's the awesome part about Open-Source, anyone can take a project and make their own custom spin-off of it! With Open-Source projects, if users dislike a feature, or find a bug, or want to make something completely different based on the project, they're entirely able to.

There's a slight difference with contribution however. Contribution to an Open-Source project refers to putting your changes to a project back with the version you made changes to. When it comes to contribution, the original authors (or sometimes a foundation/panel) review your changes and decide whether to let them back into the main project. So just because anyone can use an Open-Source project, and anyone can take the chance to contribute to one, doesn't mean everyone's changes make it into the original or main project. This is important because it helps deter bad actors - individuals and groups who seek to introduce malicious changes to Open Source projects.

Github: What, Why, How.

So Open-Source projects exist and there's a lot of freedom in what you can do with them, but how do you reach into all of this? Long ago, the answer was searching email listings and websites for FTP servers hosting the code you wanted, downloading it, and emailing it back. Nowadays however, many services made to handle different software versions and piles of source code exist. These are known as version control platforms. This is where Github comes in.

What is Github?

Github is a version-control website which uses Git to manage projects. Basically it takes the Git software, and provides a cool UI and frontend to it, like using Steam to manage games, or D&D Beyond to manage characters and DMing. Github helps simplify Git usage for developers.

Here is a list of some important Github concepts:

  • Repository - Where a project stays, like a folder
  • Branch - A different version of a repository, connected to the original but not affecting it. Imagine copying your folder into a different dimension.
  • Clone - Downloading a copy of a repository (or a specific branch of it)
  • Fork - Copying a repository onto your Github account
  • Push - Uploading a copy of a repository. This overwrites and merges the files contained within. A branch can be pushed into the main repository, and become the main repository
  • Commit - A series of changes, alongside the user making them, and their comment on why they're making them. This is what you actually "Push" to a repository
  • Pull - Downloading a copy of changes to a repository. So, if you cloned a repository (or branch) and someone changed it (pushed) since then, you would pull their changes

A full list of definitions can be found at the Github Glossary. You can also look at some examples, such as Forks of Chromium, or Github's introduction.

Why use Github?

We use version-control software because it makes life easy. It manages software versions, tracks changes and who made them, provides an interface to accept and reject changes - alongside making comments on those decisions. Imagine needing to mentally track thousands of files, and tens of thousands of changes, in something like a folder on your desktop or on your Google-Drive. It quickly becomes unmanageable, and once outsiders are contributing to the changes, it becomes impossible.

We use Github because it's popular and well known. People understanding a tool, and knowing where to go to find something, are important parts of people participating. The PFW ACM typically does some training on Github use for its members, and most CS students will already have (or will soon have) experience with Github.

Github How-To????

Perhaps you're not a CS student, and don't have experience with Github. Github's How-To was linked above, but if you're looking for something from the ACM join the discord to watch out for events, or email an officer! (We're still developing a web How-To)

Contributing - Should I do it?

Yes! The PFW ACM encourages members to create and contribute to projects and posts. Here are some benefits to contributing to projects:

  • Building Community - You meet people, work alongside others, and have a common group goal.
  • Experience - You gain experience with bigger projects, which you can market to employers and peers.
  • Improve Software - Make things you enjoy using better!
If there's a project you think the ACM should work on or consider, contact us.

Technical Expertise Optional

You don't have to contribute code!!!!

It's often assumed that to contribute meaningfully to software you need to be able to program or code. This is not the case! Software requires Tutorials, UI-Design, Icons, Assets, Pictures, Translation into other languages, Typo correction, User & Developer documentation, and more. The list of ways people can contribute is immense and unending. Even just being an aggressive user and finding bugs to report is contribution! Don't feel that you can't contribute if you're not in CS, or even just not an experienced developer. Contribution is a good way to pickup experience.

If you're good at branding and design, or you like to help make and manage plans to meet up and discuss things, or perhaps just like translating geek to something the rest of humanity can understand (documentation), know you're welcome among us.

Guidelines

The biggest thing when making contributions is to try to be helpful. Have good intent, take it somewhat seriously (but have fun), and respect existing project guidelines. Projects should outline how they expect contributions (form, format, type) so try to respect that. Also, don't contribute for the sake of getting commits. For example, if you're finding typos don't submit every typo as a different commit when they could all be done at once.

Here are some general guidelines we would advise:

  • Be Respectful - Don't use inappropriate or offensive language, don't discriminate, and don't belittle the contributions of others.
  • Be Ethical - Respect privacy, consent, security, and avoid plagiarism - both in regards to a project and its users.
  • Communicate - Tell people what changes you've made and why you've made them. Help others understand what you're trying to do.
  • Ask Questions - Ask about a project, understand its community, if something seems strange or weirdly done to you - ask! It might turn out there's a better way.

The PFW ACM takes the respect and safety of its members seriously. To that end, if Officer oversight determines there to be violations of PFW guidelines for student and community-member conduct, violators may find themselves excluded from contribution to and participation in ACM projects.

How-To Contribute

The most important thing is to reach out, get involved, and let others know you'd like to help. Here's a contribution guide we really like, detailing the specifics of contributing to projects.

If you think you're ready, checkout our Github to get started. We hope to see you!