Week 1 - My Encounter With Open Source Projects
When I decided to enroll this course Open Source Software Development, I did not quite look at the term open source. This is a software development course, and I want to be a software engineer, why not take this course? I thought. But only after the first lecture did I start to think of what open source really means and what it can bring about.
Open Sourcing
Open source projects, intuitively, is in contrast to the individual (or closed source) projects, where anyone can review, refine, and redistribute (based on the 3R principle) the source code, making it more reliable, more comprehensible, and more powerful.
When I think about open source versus closed source, the first that come to my mind is Linux OS versus Windows OS. Linux is a free, open source operating system released under the GNU GPL, and is well known for its speed and security compared with Windows. While Windows provides many easy-to-use features, Linux is subject to fewer bugs and is much better in performance. There is a joke saying that even Microsoft programmers do not know what Windows OS is really doing. Though this is not true, Windows indeed suffer from kernel panic (a.k.a., the blue screen of death) more frequently than Linux. This is exactly a drawback of closed sourcing. In contrast, Linux is open source, so generally anyone can look into its source code, figure out its structure, and check if there is any bug. The power of the public is often stronger than that of an individual or a small crowd of people in this case.
Moreover, open sourcing can reduce the development time as well as the development cost compared with closed sourcing. It also achieves the greatest transparency, great scalability, and relatively high interoperability among all development models. While open sourcing involves mostly no legal agreement and developers may be not as expertise as closed source developers, it is greatly suitable for developing softwares which require testing, scalability, reliability, and interoperability at minimum cost.
But one should also be aware of the some drawbacks while enjoying the advantages provided by open sourcing. Firstly, the lack of standard license agreement due to open sourcing can be an issue. Moreover, due to lack of systematic software development and a universal agreement, some open source projects may not provide a user-friendly interface and may not be compatible across different platforms, which can cause issues to productivity. Even worse, malicious activities can take place since the source is available to and can be modified by all.
Open source projects that I use
-
Visual Studio Code: VSCode is the text editor that I have been using every day since my first time of coding. It is powerful and support almost everything a normal programmer would expect. When people have problems with a new programming language, VSCode provides a wide variety of extensions and supports. When people have issues connecting to CIMS servers, VSCode remote SSH solves their problem. When people fail to use
scp
to download from remote, it can be done using VSCode with a right click on the target file. As above are all examples of the convenience that VSCode provides to me and my classmates. It’s amazingly powerful and extraordinarily easy to use. -
TensorFlow: TensorFlow is a platform for data automation and model retraining. I got to know it in Summer 2022 when I was doing a DURF project on visualization of large graphs. I implemented the SDNE (Structural Network Deep Embedding) algorithm with the Python library
tensorflow
. However, though it is powerful and provides a lot of functionalities for fast computing, I found it difficult to use and it sometimes throws me incomprehensible error messages, so I have not used it again since then. -
Jupyter Notebook: Jupyter Notebook is a completely open source software. I first used Jupyter Notebook in Data Stuctures course which assigns in-class exercises using Jupyter Notebook. At first I thought the fonts and spacing were strange and I did not like it. However, later I found it useful since it provides a bunch of useful libraries for instant use without installation, and its interface can display some code results very elegantly. For instance, I am currently working on a project about network anonymization and I am responsible for the topology anonymization section. While tests with deterministic results can be easily implemented using Python’s built-in
unittest
module, anonymization algorithms are mostly indeterministic, and I always need to show my codes and results with my collaborators. Jupyter Notebook helped a lot in this case: my collaborators do not need to install all the required libraries and manually run the code to view the results; they can view my organized codes and results without additional effort, leading to much more efficient communications. -
Wikipedia: I almost refer to Wikipedia every day whenever I’m looking for some new concept, doing my homework, or doing some research or projects. It is freely available for modification and redistribution. However, I have not contributed to Wikipedia yet, but I will definitely do so in this course.
There must be other open source projects that I have used that are not listed above, which I may or may not know they are open source. I will get to know more and use more open source projects in this course and in the future.
Summary
I have talked about my first thoughts on open source and compared it with closed source. I have also listed some open source projects that I have used in the past. Finally, thank you very much for your meticulous reading and hope you enjoy it.