Week 1: Getting started with open source
Me and Open Source
Open source wasn’t a part of my life until I started high school. For sure, I was using a few open-source tools already but I wasn’t aware of the “open source” concept. In high school, I joined a club that was trying to create a school management system for our school. While developing the system, I was introduced to Linux, python, PHP, MySQL, and many other open source tools & projects.
Since then, I think about collaboration and community when I hear the term “open source”. Whenever we had issues with the open source tools we used, we were able to ask questions on the respective discussion forums and get very detailed answers. The other thing I relate to open source is “free”. Before last week’s class, I was considering “free” as in both “free of charge” and “freedom”. Now, I understood the philosophical difference between these and which one applies to a given situation. This being said, the freedom of the individuals should be limited by the licenses chosen or created by the original authors. The other thing is the importance of communication between the developers. Everyone has their way of coding, and sometimes writing code with other people is like trying to drive one car with two drivers. So, good communication skills are required in addition to good programming skills for contributing to open source projects. As a result of having multiple independent contributors, there will be many different versions as well. So, versioning using a tool like Git or SVN is also a big part of open source. These are a few of the things I think about when I hear the term “open source”.
Thinking about open source also makes me think about its advantages when compared to closed source. First of all, the product being developed is developed by many people and employing that many people in a single company wouldn’t be practical and possible. For example, Linux has over more than 23,900 contributors as of February 2020, and I don’t think that it would be possible to gather all of these contributors in a closed source project within a company. If appropriately organized, having numerous contributors also means having countless new ideas to implement and numerous bugs to fix to improve the project. Open source gives developers the opportunity to fix minimal typos as well as adding completely new features. Of course, having this flexibility also allows contributors with bad intentions to insert malicious code pieces into the source code for harming users or making money. Sometimes people don’t even care about the licenses related to the project, and they do things that violate the licenses. So, having such security issues and/or license violations are some of the possible problems with open source. The good thing is, even if such malicious code is found, the open source community will try their best to solve such problems.
Why “Open Source Software Development” course?
As I have mentioned, I have used many open source tools and projects for developing my own projects. I think now it is time to give back and develop these tools. I have tried to contribute to some of these open source projects in the past, but it was difficult for me to understand the codebase in the first place. I also realized that some of the things I know & practiced about open source are not really correct, and I thought it would be a great opportunity to learn the proper practices. Additionally, during my freshmen year, I started an open source indoor farming project (open source in terms of both hardware and software). So, CSCI-UA 480 seemed like the right course for me to understand open source philosophy and properly implement it to my project.
Open Source Projects/Tools I Use
Here are some of the open source projects/tools I use in my daily life. I would definitely recommend you to use or at least take a look at them.
ownCloud
Even though I get unlimited Google Drive as an NYU student, I still prefer to keep some of my files on my own cloud solution. I know no will actually check my files on NYU provided Google Drive, but the fact that NYU IT has access to all of our files doesn’t make me happy. I have installed ownCloud on a Raspberry Pi and I have connected my hard drives to that Raspberry Pi. So, I can control the security of my own cloud and not deal with uploading terabytes of data to Google Drive. These being said, my setup is not on the internet, and I only use it within the NYU network.
Atom Editor
At the moment, I am writing this blog post inside of the Atom editor, and I love it! Before switching to macOS, I was using Notepad++, and it was doing fine. I needed to find an alternative since Notepad++ is not available for macOS. Luckily, I encountered the Atom Editor with some of my friends’ suggestions. It is an amazing tool because there are a countless number of addons written by the community. It also has a fantastic git integration that makes version management very simple.
PHP and python
Listing PHP and python understand this list might seem trivial, but actually, they are super helpful all the time. Python has a countless number of packages written by the community, and the language itself is also developing all the time to catch up with the latest trends. Similarly, PHP is a lovely mashup of python & C++ in terms of syntax and a great tool for building dynamic web sites that deal with complex databases. I know some people hate PHP, but it comes installed by default on shared web hosting servers and requires virtually no setup to build a dynamic web site.
Ubuntu
Finally, Ubuntu is the most important one on this list and it is built on top of the open source Linux kernel. I use it to run the rest of the open source tools/projects I have mentioned. It also has numerous community-driven packages, and most of the time, it is enough to type sudo apt install package-name
within the terminal. It makes software development streamline and simple. The community also deals with any bugs and security issues that I don’t need to worry about possible zero-day security flaws. These flaws get quickly fixed, even if there is one.