gsoc-FAQs
gsoc-FAQs copied to clipboard
How I will start contributing in open source like in big projects ?
NOTE: How to Ask Questions the Smart Way
What is your query?
I am new to open source and I dont know how to start with it and I actually want to contribute to the projects but how can I find it.
Is this question specific to a participating organization?
Y
Have you read the FLOSS Manual yet?
yes
Have you read the questions in the README?
Did you Google search this before posting?
ya
Do you think this question will help other applicants?
Yes, this will help who are new to this
Hey @Ankitagulati4 It would help us understand your query if you can fill up the issue template.
Hello @Ankitagulati4,
Thank you for responding to @kshitij10496's comment. (Although you should comment as well, to notify the people watching this repository).
How I will start contributing in open source like in big projects I am new to open source and I dont know how to start with it and I actually want to contribute to the projects but how can I find it.
If you go through this question from the perspective of a reader, it appears as if it's put out in a confused state. Let me try to break it down into the queries I am able to understand.
Question: I am new to open source and I do not know how to start with it. My answer: On doing a Google search, a very nice resource is shown as a result. https://opensource.guide/how-to-contribute/ The whole opensource.guide is a great community-written guide. Hope you'll take time to read through it.
Question: I actually want to contribute to the projects but how can I find it My answer: Kudos! GitHub contains massive number of open source projects (including this repository). There are several ways of finding projects to contribute to:
- https://github.com/MunGell/awesome-for-beginners and other links which appear on a Google search "github projects to contribute to"
- Personal projects of users you know or follow
- Previous year GSoC orgs https://summerofcode.withgoogle.com/archive/
- github.com/trending and the language specific tool
- KWoC projects https://kwoc.kossiitkgp.in/projects
- reddit.com/r/programming and /r/python and many language or technology specific subreddits are almost daily occupied with open source projects and news.
You just need to be in the community and projects will follow. :)
Question: How do I contribute to big projects? My answer: By "big projects", if you mean the organizations with very vast userbase e.g. git, mozilla, KDE, Ubuntu, Linux Kernel, Tor, etc. then I'll request @pranitbauva1997 (git) @pratham-pc (git) @madan96 (mercurial) to answer this question. I find that these projects are highly focused on their goal of producing quality software and getting beginners is not their top-most priority. Hence, I would personally recommend you to try out smaller projects on GitHub (to learn the workflow of contribution) and then dive on to these projects, which can significantly affect/improve your career.
Cheers!
@Ankitagulati4 this is a great question which many people want to know the answer to. Thanks @OrkoHunter for a general answer about getting started. I would like to share some specific things (which worked for me). A small disclaimer, many people have different approaches which are suited to different projects. But on an average, this should work.
The steps roughly are:
- Install the binary generally available to users (ie. via
apt
ordpkg -i *.deb
) - Try out and use the software and checkout their user-level documentation to know more about their use cases
- Read their
README
,CodingGuidelines
,SubmittingPatches
fully, get a local copy viagit clone
. - Configure the dependencies, compile the software locally and install the latest version of the tip of the master branch. Also, run the test suite to make sure everything is passing.
- Now it would be time to checkout the easy to fix issues. So find an issue using the issue tracker which the software uses (generally the
Issues
tab on Github) - Pick up a keyword which you think you can find in the codebase.
- Do a
git-grep
to find all occurances of that word in the source code which will include the places where it is defined as well as the places where it is used and the developer documentation. To filter out the places where it is defined, use some specific expressions for matching in thegit-grep
argument. - Once you find the line, do a
git-blame
and search the commit history which will explain the change. Use this extensively withgit-log
andgit-show
. - Alternatively, some projects choose to use Github comments instead of git commits, in that case, search the keyword on Github's project which will perform a search restricted to the project and will return all occurances in previous PR's, issues and the source code (I personally like this feature the most).
- Some projects also depend on mailing lists or slack or gitter extensively. SEARCH those channels and read about the keyword to get more idea on the discussion that's happening and its priority.
- Try reading/understanding the merged PRs which will explain everything (also the issues) regarding the thing.
- Now you can go ahead, make a change in the source code to fix it. (Funny thing, this is the only thing they teach in 4 years of college). Also make sure you stick with the coding standards. No standard is right or wrong, the only wrong thing is to do something different than the already existing codebase.
- Make sure you compile it locally and test it. Also run the whole test suite. Push out your code and schedule a
travis-build
. Note: If the software doesn't have a travis-build or a test suite, it can be a good first issue. - Submit the change as a PR.
- This doesn't complete everything. Now there will be other people watching your submitted change and trying to understand what you did. Many thing they will ask you why you choose this approach and why not the other one. Make sure you have done your research properly and answers those questions in a very good spirit. (A personally story: I learned more from comments/reviews than I ever learned by any other thing).
-
git-rebase -i
the commits, make the relevant changes withgit-commit --amend
- Reiterate and let the process continue.
Of course, I have just given an overview and purposely used some words which one might not know which is exactly the reason I used them. Try searching about those words on Google explicitly and understand what it is. The best way to do it is by actually trying this out.
Also I intend to write a blog post which I will do soon. I will share here once I complete it.