The Linux Desktop is changing

It is no secret that Linux has a very small market share in terms of the desktop userbase. There are many factors that led to this (topic for another article) but the fact remains that there simply are not that many people, percentage wise, that use Linux on their laptop or desktop. Couple this with the fact that many people simply use their phone and do not use a laptop or a desktop at all for personal computing, and it is easy to see why this has led to a lack of application availability for Linux. The lack of applicaiton availability is a major reason why more people have not moved to Linux. This is not the only reason of course, nor in my opinion is it the primary reason (which I believe is due to it simply not being pre-installed on PCs as people tend to use what came with the device). Why is this the case though? Shouldn’t developers simply release their app to Linux anyways to support the small amount of people there? Surely some money is better than none, right?

Not long ago, to develop an application and support mutiple operating systems, you had to use the native frameworks for each operating system. This is fine for a large company with many software engineers on staff, but for a solo developer or a small team, this was typically not feasible. Imagine being a solo developer and writing an application for Windows, turning around and writing the same app again for macOS, and then again for Linux. On top of that, you would have to do the exact same thing with every single update to the app. It is easy to see why Linux got left out of being supported in favor of the other two OSes (Windows first, then macOS in order or market share). Even with large companies, they would often refuse to see the value in such an endeavor, especially when support costs are factored in (hiring and training support staff to handle Linux questions). 

Linux Desktop Marketshare

And then there was another problem, which is if an app actually WAS ported to Linux, there are a dozen different packing formats and distros to support. Linux is actually just a kernel and typically people are actually referring to a Linux distribution when talking about it in the desktop context. There are actually hundreds of Linux distributions with about a dozen or so being actually popular. These have different packaging formats in which apps need to be packaed up into to support these OSes. Ubuntu has .deb packages for example and Fedora has .rpm packages. This complicates things even further for developers because they have to try and package their app up into either one or all of these supported types and then test against different versions of each OS due to dependency conflicts. This means that at any given time, there may literally be dozens of packages required to support several versions of each of the top Linux distros. If that sounds complicated and terrible, it’s because it is. 

Thankfully, that is not where the story ends for Linux desktop application support. These two major problems mentioned actually now have solutions and they are a huge deal in getting more application support on Linux. The first is the rise of cross-platform GUI technologies. These mainly address the first problem mentioned in this article by allowing developers to write an application once and deploy it across all three major operating systems (and sometimes even mobile OSes too!). Frameworks like Qt, Electron, and Flutter are all leading the way in this valuable tech space. These types of frameworks abstract away the underlying code that interacts directly with each OS and allows the developer to simply write something once and access library functions that do the underlying OS calls. The most popular by far is Electron which uses web technologies to make desktop apps. Although these are often scoffed at in the tech community for their larger install footprints and higher resource usage, they have come a long way and any application support is far better than none. In fact, many major applications have been written in Electron such as Visual Studio Code, Todoist, and Slack just to name a few. All of these support Linux, which otherwise would probably NOT have been supported without that. 

The second major problem is overcome by newer packaging platforms such as AppImageFlatpak, and Snap. These are quickly gaining ground in the Linux desktop space to the point where even very popular apps are abandoning traditional packing formats for these. Ubuntu is set to release their own snap-only distribution next year called Ubuntu Core. Firefox is already snap-only on Ubuntu and Red Hat recently announced they are no longer packaging rpm versions of Libreoffice and instead are wanting people to go download the Flatpak.

So, how do these packaging technologies work and why are they a game changer? These all work in a similar way in that they bundle all of the dependencies for a specific application together with the app. This alone is a huge deal because it means that an app can be packaged up once with one set of dependencies and is guarunteed to work the exact same way across all Linux distributions where it is installed. Previously if the dependencies for an application were not available, the distro would download those packages. If there were conflicting versions of dependencies (say two programs both had the same dependency on a library but they wanted different versions), you had a depdency conflict that somtimes could not be overcome without a recompile of the application. Needless to say, that is a mess. Another benefit to using these technologies is that applications can be updated outside of the OS updates. Previously to get a new version of an app, in many cases you had to upgrade the OS. With these packaging formats you can imagine your OS as a warehouse with the applications being boxes within and each box has everything it needs to run the app.

Neatly packaged applications

Another great advantage to these packaging platforms is that they all three support sandboxing, and in the case of Flatpak (and Snap with a few exceptions) sandboxing is required. Sandboxing means that an application is isolated in its runtime from the rest of the system. Imagine that you download an app to test it out and it ends up being malicious. Without a sandboxed environment, that app may have access to a great deal of your files and personal data. It may be able to turn on the webcam and microphone and record you. With sandboxing mandatory, these apps have access to a very limited set of files and resources and these can be manually given or taken away. This is a huge boon for security. 

In conclusion, the Linux desktop is in a much better state than it has ever been in terms of app availability and it is all due to cross platform desktop frameworks and more recently to packaging technologies. Does this mean that Linux will finally reach app parity with Windows and macOS? Only time will tell.

Tags:

To comment, please go to this article on Medium