Open Source 101 has come back to our hometown of Columbia, SC, and we are happy to have our very own Thomas Panetti presenting as a guest speaker! He will be giving a presentation called Making the Switch: The Move to Linux in an Enterprise Environment. If you don't get a chance to see it in person, check out his slides and speaker notes here!
About the Presenter
Hi, my name is Thomas Panetti, and this presentation is about making the switch to Linux from an enterprise perspective. This chat is focused on the individual developer, not moving servers over or anything like that. Now the scope of this chat is practically infinite, so we have a lot to cover and I’m going to get right into it, with a small Q and A afterwords.
I’m a software engineer at Krumware LLC, and we specialize in hands on software as as service. I’ve been programming since I was around 13, first writing in BASIC and I’ve been complaining about it ever since. I’ve always had an interest in the works of Linus Torvalds and Richard Stallman, so I feel honored standing up here speaking about their works and their practical applications.
My first experience moving full-time to Linux was with my current company, Krumware. On day one, trying to setup my software stack on my computer (Docker, Node, etc) on Windows was an absolute nightmare. After about 2 hours of fighting configuration files, I remembered I had Linux installed on another partition of my hard drive. I switched to it and tried installing everything. It must have taken somewhere around 5-10 minutes. I was so impressed with the results that I haven’t used Windows for development since.
As the months went by and we continued to grow, every single one of our developers gradually made the switch until we were at 100% Linux. After a few days of learning for the newer Linux users, the results were astonishing. You never hear someone in the office complain about their operating system, since they only run the software they want on their computer. There’s no bloat, there’s no constant crashing, and the only discussion you hear about it is the occasional glance at someone's screen to see some new package that’s making everyone’s lives easier.
The GNU, the Linux, and the Ugly (non-free software)
Some quick background on Linux, as it’s one of the most interesting pieces of computing history in my opinion. In 1983, fed up with the closed nature of the software world surrounding him, Richard Stallman created the GNU project, with it’s main project the GNU C Compiler launching a few years later. This project would help highlight the importance and dominance of free software, as users realized they could not only use it without cost, but also have the freedom to edit portions of it for their liking. This would be an important step in Linus Torvalds decision to license Linux under the free software license, thus giving Linux one of its strongest features against competitors, freedom.
The term “Free” software is often thrown around without an actual definition, so let me try and explain. Free software doesn’t necessarily mean the software is released without charge, it means the software is distributed with it’s source code and the user is free to change it without violating any licenses. A good example of this, was a few years ago, when a group of students in Copenhagen released a product called “Free Beer”. They charged money for the product, but distributed the recipe for free. Anyone was allowed to use the recipe for their own product, so long as they shared the recipe as well. This is an example of copylefting, which ensures all downstream changes of a program are also released as free software. This is an integral part of linux, as any company that wants to make changes to linux must release them as well.
The Linux Ecosystem and You
The Linux software ecosystem is absolutely enormous. Thousands of on-going distributions of the kernel are currently in circulation and are used everyday. Linux holds a majority share in almost every field of computing, from cloud computing to mobile computing. If you’re a software developer, having experience with Linux is an absolute necessity. Right now though, we will be focusing on making the move to Linux on the user’s end, and the productivity gains that can be made from doing so.
Let me paint you a picture that is probably all too familiar for many of you. It’s Monday morning, you walk into work ready to bang out that new idea you’ve had simmering in your head since Friday. You turn on your computer and what are you greeted by. A nice 2 hour update, completely crushing your dreams of productivity and making you deeply regret waking up that Monday morning. It’s an extremely alienating concept to many people, but you as a user do not own your software. Operating systems such as Windows and Mac OS are only licensed to users, the users have no right to makes changes to the system, stop the companies from collecting your data, or remove ads or malware shipped with their operating systems. These rights are signed away in the long list of terms and conditions most people gleefully breeze past when installing their new system.
Finding the Right Distribution
One of the most challenging parts of switching to Linux is actually picking the right distribution. It is extremely important to begin by doing research on what is most common for your software stack. For example, someone working on the JVM stack would likely be more comfortable with Debian, which has a strong focus on stability. On the other hand, someone working with newer web technologies such as Node.js might prefer using Arch Linux, which has a rolling release schedule that focuses on cutting edge features.
Linux ships with all the tools and utilities you would expect to see on any unix like system. Grep, sed, awk, the usual suspects are all here and constantly receiving updates and new features. In addition, newer tools are often written immediately for Linux and are later ported to other systems, such as Apache web server and Node.js (Apache web server, by the way, was originally the quote unquote Killer App for Linux, which encouraged the majority of servers to switch to Linux for the software).
Components of Linux
A big portion of the “fun” of building your Linux setup is to pick the right utilities for you and your work. In the next few slides, we’ll be going over a few of the core components of a Linux setup and the customization options available for the user.
First and foremost, you have your package manager. For every major distribution of Linux there is a package manager, and this package manager is your friend, probably your best friend in the whole world. It makes installing software so easy you’ll wonder how you ever lived without one. I’d highly recommend spending a little bit of time getting to know your package manager, since they can differ from distro to distro. This is one of my personal favorite parts of the Linux ecosystem due to how simple it makes setting up new tools.
Next is the desktop environment, more commonly referred to as a graphical user interface or GUI. It’s a strange concept to many people who first switch to Linux, but you have the ability to completely change your default GUI to something else, or customize it entirely into something that fits your needs. Here are a few examples of common window managers: GNOME, Cinnamon, KDE Plasma, Xfce.
Gnome is the default desktop environment for most Linux distributions, including Fedora, Debian, Ubuntu, SUSE Linux Enterprise (exclusively), Red Hat Enterprise Linux, CentOS, Oracle Linux, SteamOS, Tails, and Kali Linux. I would highly recommend GNOME to first time Linux users, since it is extremely user friendly and very intuitive, taking plenty of notes from the Mac OS X operating system while keeping it’s own distinctive style and customization options.
Cinnamon is probably the second most common, it has a more familiar look and feel to windows, which many users are comfortable with. There’s also KDE Plasma and Xfce, which are both very common lightweight window managers that don’t include much gruff.
There’s also window managers which control how your applications appear and tile with each other. These managers can actually be used independently of any desktop environment (for advanced users). Common window managers include Openbox, i3, and xmonad.
As a lot of developers learn over the years, your best work is done in the shell. Whether you are writing code or just setting up your project, spending your time in the shell can either be a pain or something you look forward too. The choice is completely yours. Some developers completely live in their shell, writing programs for getting their emails or viewing websites directly in it (...Richard stallman does this for his emails). While we won’t be debating the merits of that level of efficiency, we can still discuss terminals and shell that can boost your productivity.
Linux User Support
One of the most interesting aspects of the Linux community is the comradery among its users for sharing information, hacks, and software free to everyone. There are often comparisons to the homebrew computer club in Palo Alto back in the 1970s and MIT’s AI lab, which of course produced the brilliant Richard Stallman. In those communities, software was always distributed with it’s source code, and users would modify and redistribute it so others could enjoy the changes and fixes they had made. The users of the Linux ecosystem generally share this idea, and make changes to pieces of free for everyone to modify. In addition to this, users are generally extremely helpful and will help newer users learn about Linux through various forums and help instructionals.
One day we will not need this slide. Hopefully, with the help of wonderful and interested developers such as yourself, we will push for full Linux compatibility with your software. But unfortunately, that day is not here yet. For now, we have Wine, a compatibility tool that has been around for somewhere around 24 years. It allows for better compatibility with running windows programs in case the software you’re using is extremely dated or tries to force windows usage. Wine is an entire presentation by itself, so we won’t be able to get into it, but it’s an impressive tool for getting compatibility. On the bright side, especially with web development, it’s highly unlikely you will ever need to use it today, unless you work on legacy software.
Linux is more than just an operating system, it represents an idea. The idea that software should be open and users should be allowed to modify that software, learn from it, and redistribute it for others. That idea is integral to the free software foundation and has been with Linux since the very beginning. Gains in productivity were my initial reasoning for making the switch to linux, and the decision to move our entire dev staff over to Linux. However, underneath that layer, there’s an entire community of sharing individuals who help support each other and help make the Linux ecosystem a more diverse environment. A big reason many developers don’t make the switch initially is because of the perceived learning curve, but just like making the switch to vim or emacs, the initial time spent is nothing compared to the lifelong gains in productivity and stability that linux offers for its users.