Into the Openverse
A Guide to everything you would need to know in order to get started with Open Source.
I believe that I am an apt person to write this Guide to the above mentioned subject because it hasn’t been too long from when I used to be the person who would be finding articles like these to read myself.
I suppose that if you’ve stumbled upon this article then, you are probably a college fresher who heard about Open source and Github for the first time in their college from their colleagues/seniors or perhaps you are a high schooler or someone in their late twenties or thirties who were told that they needed to figure out how to collaborate with their co-workers for their company projects on Github and in all honesty, they are basically stepping in to a brand new world. In case you aren’t any of the ones I mentioned above, I’d still urge you to read this guide till the end, because who knows? You might find yourself understanding things you never knew about once you read this article. Take your time with it, Rome wasn’t built in a day after all, there is no need to be overly ambitious. So don’t skim all the way, maybe cover one topic a day, find out what suits you the best and pick your pace. But, keep at it!
The fear of the unknown is the most terrible of fears indeed, we fear messing up because we aren’t sure of what to do and we are absolutely clueless, we think that not knowing something would make us look stupid in front of our peers which in turn results into making us too afraid to ask for help even for the smallest of reasons. And you’ve been trying to find an article that you could make some sense of because whatever you did find went over your head. Believe me, I’ve been in the same place as you and admittedly, Git can be scary when you are just starting up. Especially so, when you are new to programming languages, web and application development and coding in general.
People use Git to collaborate with other developers and designers to document their code for the application they are building in a stable online environment which is essentially accessible and inclusive to anyone in the world with the internet.
Meaning Behind OpenSource & Licensing Open Software
The word “Open” refers to “Free Software” in a generic sense.
What exactly qualifies as “Free Software”, you ask? Well, any software which is free to access, modify and reuse for anyone irrespective of their location, expertise or age can be called “Free Software”. There are literally, millions of softwares which are opensourced in this day. Some of them you might recognize or remember using like Android, Python, Linux, WordPress, Inkscape, MySQL, Blender and similar others.
Mind you, I said “Reuse” and not “Use” and there’s a difference. You cannot use software applications which have been opensourced as if they were your own!
You would need to attribute the owners and individuals involved with appropriate compensation after they approve(better yet if there’s a written proof) of your permission to reuse their application. Let me explain that in depth, since we have already stumbled upon this particular sensitive topic which many people have confusion about. In all 166 nations that are signatories to the Berne Convention, copyright is granted to an author when the work is created. The author holds a monopoly on all copyrights(creating modifications, creating and distributing copies, etc). You, as in a person who’s not the designated author, have been granted none of those rights.
A license is a form of mechanism by which the rights-holder(a.k.a. the author, here) grants some set of rights to a recipient (here, you). And if someone says that the author has not offered any license on the platform the code was hosted, it means that by default the author has reserved all of their rights. The fact that the author has made their code publicly discoverable does not mean that we have been granted any rights, beyond the right to view the code. The right to make imitative works and the right to redistribute the code are not rights that we’d have. If that code is on Github (the hosting platform for Git), it’s worth sighting that the Github’s TOS (Github’s Terms of Service) have this to say about the stuff hosted on their site:
“By setting your repositories to be viewed publicly, you agree to allow others to view and fork your repositories”
Hosting on Github means that the author grants others the right to “view” and to “fork” the repository( a form of a folder in which code and documentation of an application are stored through Git). Here, “fork” probably just means “use Github’s fork feature”, which creates a repository clone, hosted on Github. I admit the Github’s use of the term “fork” here is unclassifiable, but if my reading is correct, then in no way does this appear to grant us any right to:
- copy the code outside the context of a Github fork
- make any modifications to the forked code
- incorporate the author’s code into our own
The last stand is: We do not have the authority to redistribute the code which we are not the author of. It’s possible that the author wants people to use their code freely, but neglected to include a license. Keep in mind, that all free software is usually opensourced, but not all opensourced software is usually free. Woah, that’s an original line right there, folks!
Ever Heard Of Version Control Systems?
I believe that perhaps I didn’t mention it earlier but it is crucial to know about the Version Control System to understand Git. What is it? I think it’s name might have clued you in about what it does, yes, it’s a system which controls versions…of what? Of Open software, what else!
Simply put, whenever we let the code of a software freely available to be modified online by practically anybody with two hands, a computer and internet; naturally, many sorts of troubles would arise. There might be someone who messes up the code and creates a debug monster or in fortunate cases, someone who writes maintainable code efficiently that supports the business plan of the application in the long term. In these scenarios, wouldn’t the maintainer or the author prefer to track the people who contribute to their code folders, so that they can keep in touch with the changes happening left and right to them?
A version control system is essentially a technology which allows a user to control the versions of their software’s code which are being changed constantly by other people (let’s call them “the contributors”) and track those changes and interact with the people who contribute in changing the code as well. Git is a really good example of a Version Control System and the one which is the most popular amongst developers at the moment and for good reason.
Git is a Version Control System which allows you to share and collaborate with other users in developing software which is opensourced, in real time by commenting on issues and pulling requests on the repositories(repos for short) which contain the code. It is one of the most popular version control systems mainly, because it helps software developing teams manage changes to their source code over time. In other words, version control keeps track of every change in your code and it allows you to go back in time when something goes wrong.
Also, it is really helpful to prevent concurrent work from conflicting when multiple people are working in the same project. An individual may be working on the sidebar navigation while another one is simultaneously updating the header.
Version control systems facilitate the work of multiple individuals by allowing them to use different branches as part of one “file tree” and merge their updated code to one source of truth when it’s ready.
Difference between Git & Github
Although, there are several other hosting services like Github, for example Gitlab, but objectively speaking Github is the service which is used by developers and software companies from all over the world with a much wider spectrum of users and diverse communities.
For beginners, there’s nothing more helpful than the presence of an already existing and flourishing community for a technology which is full of people that can be reached out to, for help anytime one might want to. And this is actually a sure fire way to make any technology thrive, making it people friendly!
The more people who know how to use it, the better. I might be a little biased as well since this was where my route took me, but I do firmly believe that the current best Git hosting service in the software industry is indeed, Github.
Coming back to understanding the difference between Git and Github, if I had to explain it in a simple way, then I’d say in the way we have emailing system which allows people to exchange messages using electronic devices to Gmail, Yahoo Mail, Hotmail, etc which are essentially email services which provide users with intuitive interfaces to drafts and view their emails on; similarly, we have Git to Github.
Git is the version control system which is hosted on a platform provided by Github which allows users to view their repositories, comment on issues, etc. While, Github is an IT Service Management Company which provides hosting for software development and version control using Git. It’s patent organization is the software giant, Microsoft Corporation. Along with distributed version control and source code management functionality of Git, Github offers it’s own features as well.
Basic Git Commands Which Every Noob Should Know!
We now know the gist about Git and Github and what the people meant when they were talking about Version Control Systems. Let us now break down the basic Git commands that you can try using on Github. You can make your own free account on Github by visiting their official website online and clicking on the Signup option.
Downloads a copy of the project (remote repository) to your local computer. To use this command, follow these steps:
1) Copy the clone or download link
2) Open your terminal
3) Access the location on your computer where you want to copy the project:
3) Clone the project: git clone [copied-link]
4) Use the commands cd [project-name], followed by ls and you should see the list of files you just cloned!
Lists all your project branches and highlights your current branch. If you just cloned a project, you are going to be in the master branch (your source of truth). It is not advised to work directly on the master branch because there is a big chance you would have a broken project while you are adding some progress. Instead, you want to create a different branch, work on your changes or new feature and when you are done and everything is working as expected, merge that branch into master.
Selects the branch you want to work on.
If the branch already exists:
git checkout [branch-name]
If you want to create a new branch:
git checkout -b [branch-name]
Pulls recent changes from the remote repository to your local files. If one of your team members merged a new feature into master, you need to pull the recent code added to master to keep your local files up to date.
Lists all the files that you have worked on and have not been saved in a commit yet.
Stages file that you would like to commit.
If you want to stage all the files that you have worked on: git add .
If you want to stage only one particular file: git add [file-name]
Saves the group of changes you staged to your local repository. Add a comment with each commit that summarizes the change.
git commit -m “commit message”
Saves any changes you have made locally and it reverts the working directory to match the HEAD of your last commit.
See a list of all the changes you have stashed: git stash list
Bring back the last changes you stashed: git stash pop
Clear all your stashed entries: git stash clear
Saves your local committed changes into the remote repository so everybody else has access to your work.
git push origin [branch-name]
FOSS & FOSS Communities
Now, “FOSS” here stands for “Free and Open Source Software”. You could say, this is another name for “Free Software” or “Opensourced Software” that I was mentioning earlier in my article, as in software which you can contribute your code to and reuse it within the sphere of the rights granted to you by the author of the original code. If you are hearing about the “Rights” for the first time here and have skipped that part in the beginning when I was talking about it, then go back and skim it through. You’ll get what I mean in greater depth that way.
As the name suggests, communities dedicated to fostering budding contributors or the ‘wannabes’, people who want to get into Open Source contribution and nurturing these folks or at the least giving them some sort of opportunity or tutorial to get a headstart are what would be termed as “FOSS Communities”.
Many times, FOSS Communities help students/people to become aware about the world of Open Source and the kind of programs that they can participate in.
Programs like these are aimed at everyone in the global FOSS community. Whether you’re a developer, student learning to code, event host, or company of any size, one can help drive the growth of open source and make positive contributions to an ever-growing community. All backgrounds and skill levels are encouraged to complete their challenges. And yes, I picked up this line from a program’s event description. Don’t look at me like that!
Moving on, you might’ve heard of Google Summer of Code, Google Summer of Docs, Outreachy, Hacktoberfest, etc. which are essentially programs meant for prospective contributors who want to achieve relevant work experience in Software Development, Designing, Documentation and other similar fields by contributing their work online. All of these programs are organized yearly or half-yearly and have their own set of rules and they all come with their own prizes to be won if you complete the objective required/specified in their guidelines.
I’ll add references to GSoC and Outreachy in the links after this article finishes. If the thought of participating in such programs interests you, then you should definitely try it out. I will, however, explain a bit more about “Hacktoberfest”, why you ask? Well, that’s because it is currently October and if you are reading this article near the time I published it, you can start your Open Source journey right away by participating in this kind of contest!
Hacktoberfest & What You Can Do
What is it?
Hacktoberfest is a month-long celebration of open source software presented by Digital Ocean, Intel and Dev. It’s open for everyone and most importantly, it is free of cost. Here, people get the chance to win limited edition T-Shirts and goodies (I mean stickers) after submitting four valid pull requests between 1st–31st October.
Why You Should Bother To Participate In It At All
Hacktoberfest is all about open source contributions and beginners, it’s actually targeted at beginners, to be honest. It absolutely doesn’t matter whether you are an experienced coder or an absolute newbie, you can take part in it and learn how to code and get familiar with the frameworks along the way.
Some benefits of contributing to Open Source, if you haven’t figured them out already are :
- Becoming better at your trade — You’d get to learn how to read the code, fix bugs and maintain readability of it at the same time.
- Exposure to the real life work culture — You’ll understand how a team collaborates to collectively develop and improve a software.
- Networking (duh!) — Whilst contributing to the repos, you’ll be sure to meet other developers and get the chance to learn from them. This will increase the gravity of the depth of your expertise in your field of interest.
And if you are able to make four pull requests from 1st to 31st October 2020, you’ll be eligible to win a limited edition T-shirt from Digital Ocean along with some stickers too. Well, contributing itself is enough of an incentive.
And yes, beginners are welcome to participate if I hadn’t made it clear earlier. In fact, thousands of people make their first pull requests in these kinds of programs every year. You can create PRs ranging from a small typo fix to adding an advanced feature in any project of your choice. You can even choose to improve the documentation or the Readme files in the repos you find labelled Hacktoberfest.
Rules & Regulations For The Contest
To earn your Hacktoberfest tee or tree reward, you must register and make four valid pull requests (PRs) between October 1–31 (in any time zone). PRs can be made to any public repo on GitHub, not only the ones with issues labeled Hacktoberfest. If a maintainer reports your pull request as spam or behavior not in line with the project’s code of conduct, you will be ineligible to participate. This year, the first 70,000 participants who successfully complete the challenge will be eligible to receive a prize. You can register yourselves by visiting the official Digital Ocean Website online or through scroll to the References section for the relevant links.
What If Your PRs Aren’t Accepted/Merged?
As long as your PRs are not marked as valid or reported as spam, they will count, regardless of the fact whether they are merged or not.
DON’T SAY I DIDN’T WARN YOU: Only the first 70k participants, who create 4 valid pull requests will be eligible for the goodies. So, do not leave this till the end of October. Moreover, do create 4 quality pull requests since they might be reported as Spam by the maintainers otherwise!
Why Is Contributing Important In The First Place?
- Real World Software Development Experience: As I said earlier, for students who are still learning and seeking work experience but are not getting any opportunities to, since they are caught up in the contradiction of needing experience for getting a job but at the same time needing a job to get some experience; can find the end to their job search with Open Source. Since, for contributing you don’t need a resume, experience, expertise or anything troublesome. This is the best part about contributing to Open Source. Not to mention that in most software jobs, projects are handled on open source using Git among the departments. So you end up learning how to contribute anyways, why not give it a go earlier?
- Community Bonding: This is an understatement. You get to meet like-minded people on your open-source ventures and that’s something to treasure and benefit from.
- Exposure: A tad bit similar to the first point, the difference is that here we are talking of exposure to a new kind of environment which will be different from what you were used to before.
- Testing Your Skills & Validation: I believe the chance to test your limits, your good points and the bad ones is something that you get on Open Source very readily and receiving validation for your good points(aka skills you nurtured) is a great feeling indeed. It really facilitates the growth of you as a person to get feedback in a regular manner this way and helps you in deciding what should you work on next.
Why Should You Dive Into The Openverse?
- Quality & Reliability: Working on any software in teams really helps in assuring its quality as it has gone through multiple hands and several people have examined it before contributing on it’s issues. Contributors can also raise issues in repos available on Github. This let’s a person attain a sense of the reliability factor of any particular software hosted on Open Source.
- Security & Stability: The greater the reliability of a software, the more stable and practical it is in usage. The security of these are ensured through “Terms of Service” of the hosting platforms that they are part of.
- Adaptability & Customization: Being able to keep track of the number of versions of your software that have ever existed and to go back in time every time a mishap happens, makes open source software very much adaptable and customizable, which is a boon for coders and developers. Since, now they won’t have to worry about losing hours of their hard work if something goes wrong.
- Freedom & Flexibility: The kind of freedom you have on open source is amazing, there is no limit to the number of repositories you can contribute to and you can play the part of a developer, designer, writer, anything you want to and there are no limitations that are placed on an individual on which fields they make their contributions to.
- Cooperation & Community: For people, who have never worked in team environments before or collaborated with other individuals to create projects; contributing using Git is probably one of the best ways to get a hang of it.
Here Come The References!
Thank you for sticking around and hopefully I could get through to you! This is the list of references that I incorporated in this Guide and things I mentioned to put in for ease of use to the readers.
- A incredible article for beginners: Git Explained: The Basics — DEV
- A meaningful conversation I happened to stumble upon: Reusing open-source code that doesn’t specify a license
- Something I found online on Hacktoberfest: Hacktoberfest 2020 — All you need to know | by Sharannyo Basu | Sep, 2020
- Official Hacktoberfest Registration Website: Hacktoberfest presented by DigitalOcean
- Official Archive for GSoC: Google Summer of Code Archive
- Official Website of Outreachy: Outreachy | Internships Supporting Diversity in Tech — Outreachy
Follow Up Material
- An Intro to Git and GitHub for Beginners (Tutorial)
- Hello World
- Share your Alexa Skills · Issue #11 · alexa-dev-hub/alexa-skills (If you are looking for a repository to make your first PR to, you should consider this one).