If you are like me who never really worked in a real opensource community, then there is a possibility that you might not know what exactly some of the terms I am going to elaborate below mean. Or maybe it happened to me because my limited access to English vocabularies. But first, let me take the definition of open source and paste it here.
Open source is source code that is made freely available for possible modification and redistribution. Wikipedia
To add on that, it is worth mentioning that anyone can use the code, modify for personal or business purpose.
Okay, let's dive deep into the first term which is upstream. Upstream, in the context of IT/open source world, defines the original destination of project/code available on the Internet. The most common example is the public git repositories on GitHub, GitLab or any version control tools. If we further dive into any of the upstream repository (public repository), we are likely to see a number of contributors working on that certain project. Those contributors are not paid. They do it voluntarily. Contribution means are varied ranging from writing features, fixing bugs, raising issues, writing documentation...etc.
On the contrary, there is another term downstream. Downstream refers to a copied version of upstream which could include any slightly changes but not abandoning the identity of the upstream. An individual programmer or company who would like to add specific feature on top of the existing upstream project absolutely can copy the whole upstream and add the changes need to use for their own purposes.
Most of us might know the fork functionality in version control tool like GitHub already. That serves the purpose for open source workflow.
Now visualize the public repository for cupcake recipes. That repository contains ton of different of cupcake recipes. As a baker myself, I want to share my own recipe to people out there. So, I fork the repository (creating downstream), create my own branch for the recipe, create request to merge that to the upstream and wait for approval. Then, if any authorized maintainer of the repo thinks that my recipe is good, he/she can merge it to the upstream. So now, my recipe is available worldwide.
Now let's look into another case when I see the good recipe in the upstream. I have a cool idea to add one more ingredient that could light up the cupcake. So, I fork the recipe and create a branch for my changes. But, in stead of merging it into the upstream repo, I only make it available in my own repo (downstream) and only me and my team can access it. Therefore, my little cupcake shop now has a unique menu that no one else has.
Up until this point, I hope you learn something and most importantly the concept of open source. I think open source is beautiful. It starts from community of people who dedicates their time and effort for the community and it even allows business derivation from the community.
Top comments (0)