Abhinav Upadhyay is an Indian software developer, the NetBSD project contributor, and works with the exciting field of machine learning (ML). Recently I did a quick Q and A with Abhinav about his life-changing journey with NetBSD, getting started with ML and FLOSS community, and his daily workflow.
Who are you, and what do you do?
I am Abhinav Upadhyay, a fellow human being based out of Hyderabad, India. I spend majority of my waking hours reading/writing code, or something in that vicinity, so I guess I qualify as a software developer (although I’ve a strong impostor syndrome when I say this). I’ve a bachelor’s degree in computer science and have been working professionally as a programmer for about a decade. I am a strong proponent and supporter of open source software and have been involved with the NetBSD project for several years as a developer. Currently I am part of an early stage start-up, working as a senior engineer.
How did you first get into software development?
Why did you choose to work open-source model and NetBSD?
I started using open source software such as Linux, Firefox, GCC etc from my undergrad days. I did not know much about open source but I started reading about them and understood how they are developed. The most amazing thing for me was that all the code was available in open and that I could change it. The fact that I could contribute a change in these projects I was using and that there was potential of my code being used by millions of users was very exciting. This was the biggest motivating factor for me for being part of the open source community. Apart from that there was a side-effect of an immense learning experience by being in the company of some of the smartest hackers in the world.
My initial few steps were in the Ubuntu and GNOME communities. I started by fixing bugs and contributing few small features in Ubuntu and the GNOME tomboy projects. My involvement with the NetBSD project started in 2011 as a student developer as part of the Google Summer of Code program. I was mentored by Joerg Sonnenberger on the rewrite of the apropos(1) utility to implement full text search of man pages. I continued to contribute patches to NetBSD on and off long after the summer of code was over, which eventually lead them to give me commit access to the project. My association with the NetBSD project and the people associated with it has been very a very fruitful experience, there are some very exceptional and kind people from whom I’ve got mentor ship and guidance. This has also given me the opportunity to travel to conferences, at places like Tokyo, Paris, and Belgrade to present my work as well as socialise with fellow developers from the BSD world. This has been an experience of a lifetime.
Can you please share any interesting and lesser know facts about the NetBSD project?
There are many interesting facts about NetBSD which are little known outside the community. I will mention a few of them:
- Earlier this year NASA successfully landed the rover on Mars and there was lot of excitement about it being run on Linux. Several years before that, NASA used the NetBSD operating system for measuring the microgravity environment in the International Space Station and for investigating use of TCP in satellite networks.
- NetBSD has also been part of a world record. The Swedish University Network (SUNET) used NetBSD to record the fastest Internet2 Land Speed Record. They managed to transfer around 840 GB of data in less than 30 minutes, using a single IPv4 TCP stream between a host at Luleå University of Technology and a host in San Jose, CA, USA. The achieved speed was 69.073 Petabit-meters/second.
- NetBSD is well known for its portability and modular code allowing ease of porting on new hardware platforms. There are several hardware architectures which have long been deemed unsupported by most of the operating systems, such as the VAX, Amiga, Sparc and Sun family and so on. NetBSD still runs on them till date. Interestingly you can still compile software for VAX with GCC on NetBSD.
- A portable build system – NetBSD has a really flexible and sophisticated build tool. You can cross compile NetBSD for a different hardware on your machine and not only that, you compile it on a different operating system as well. For example you could cross compile NetBSD for aarch64 on an amd64 laptop running Linux or Mac OSX. This is very powerful.
What does a “day in the life” look like when you work on software development project?
A typical day for me includes office commute, meetings, discussions and coding. Since the pandemic started last year, we have been working remotely and I’ve been enjoying the change, it leaves me plenty of time and flexibility in getting the work done.
Once the day ends I usually take a break and then I engage in some of my personal interests. These may include hacking on a side project, or perhaps some NetBSD related work (although I’ve not done this for a while). Sometimes I also spend the evening time studying, for example math, machine learning or compilers.
Describe your computer hardware and software setup. What hardware do you use? And what software/Linux or Unix distro do you use daily?
Despite being part of the NetBSD group where people take pride in having a hardware zoo, I am not too fancy in that area. I like to have one main powerful machine where I can do most of my day to day work and maybe one backup machine in case there are problems. At present I’ve three laptops – my main laptop is an Intel core i9 octa core, with 64 gigs of RAM, I run Ubtuntu 20.04 exclusively on it. My older secondary laptop is an Intel core i7 with 16 gigs of RAM, I have it dual boot with Ubuntu 20.04 along with NetBSD 8. My oldest laptop is an Intel core i3 with 4 GB of RAM. I run NetBSD 8 on it.
What open-source apps/software/tools can’t you live without?
There are too many of them – tmux, fish, vim, curl, clang, gdb, and more.
What’s the best advice you have ever received?
The best advice I ever received was early in my college days and it was to master the C programming language and read the book “Advanced Programming in The Unix Environment” by Richard Stevens. It changed my life, it essentially exposed me to the Unix world – and gave me the ability to read and understand a lot of open source code out there. If that advice had not come my way I might have been on a totally different path than where I am today.
What advice would you give to someone starting fresh with the open-source software development world?
There are various ways to start contributing to open source projects. It becomes very easy if you are a heavy user of the project, because that means you actually have motivation to fix things and add features. The next thing is to become active within the community, either by lurking on the project’s IRC channels or by subscribing to their mailing lists. This gets you familiar with the development process, and lets you know the issues which are important for the community to address and fix. Then you can pitch in for help with bug fixes, documentation improvements or testing. Usually there are nice people in every community generous with their time who can mentor you in doing those tasks and in the process you become an active contributor. Showing up is the key.
What are the prerequisites to start learning machine learning? What open-source tools do you recommend to someone new to ML?
Machine learning is a pretty exciting field but also requires a large number of prerequisites to get started in it, which may seem daunting. I’m mostly self taught in this area, my starting point was the first MOOC by Andrew Ng on machine learning back in 2011.
You need knowledge of linear algebra, calculus and probability. We don’t need advanced courses in any of these areas, most of what we learned in school or first year of college is enough. If this feels daunting or boring I recommend taking a top down approach and starting a ML course and refresh the math requirements as you work your way through the course.
The other part of learning ML is programming knowledge. You need to be able to code the models or take an existing model implementation and use it. Another aspect involves collecting, cleaning and preparing datasets for training the models, which requires familiarity with the tools and libraries used for doing these tasks. Python is the language of choice for this. Apart from knowing Python the language, it’s also good to get a grip on the common scientific programming libraries in Python, such as numpy, scipy, pandas, scikit-learn, matplotlib etc. The more cutting edge machine learning work may include deep learning libraries as well such as TensorFlow and PyTorch.
This is a pretty vast range of things to learn and it may seem daunting but there isn’t really a shortcut to avoid the learning curve. Picking up a problem to solve, curating dataset to solve it and then building a model will give you an all round exposure of everything required to execute an ML project.
I can’t resist quoting from one of the episodes of Bojack Horseman, where Bojack picked up running as a way to get in shape for a role in his upcoming movie and just after few steps he runs out of breath, falls down on the pavement saying “I hate this, running is terrible, everything is terrible” and a seasoned runner comes along the way and says “It gets easier, everyday it gets a little easier but you gotta to do it everyday and that’s the hard part”. It’s the same thing with learning anything, we need to put in the hours.
- Do you listen to background music?
I do. That’s really a part of the charm of coding – when you are in the zone, writing away the code, the music puts you in a trance. Sometimes I look forward to coding time just so I will get to feel this high.
- Best time to write code for you? Daytime or nighttime?
I’ve most fun while coding during the night time. I am someone who is easily distracted with even the slightest of sound or anything happening around me. During night time when things are quiet I find it much easier to get my focus going.
- Tea or coffee?
A strong cup of tea in the morning
- IDE/text editor?
- Favorite shell tip?
Using fish as my default shell and tmux has been great for me. Fish has great autocomplete integration with most of the tools and tmux allows me to do everything inside the terminal without ever touching the mouse.
What do you do when you’re not hacking and writing code?
I like playing table tennis. I also like to meditate. Reading books (but I’m easily distracted so I need to be genuinely interested in the subject), some of the topics of interest for me include Astrophysics, finance/investment, history, math. Sometimes if I am in mood, I like to cook a nice lunch.
Editor’s note: You can follow Abhinav on Twitter for the Machine Learning and software developer’s daily adventures. This interview was conducted on March 27, 2021.