

Microsoft sure has come a long way in recent times, embracing the open source movement with actions such as creating the amazing Visual Studio Code editor and purchasing Github. Now that Windows 10 has integrated Linux support with Windows Subsystem Linux (WSL) and anyone can just as easily use a bash terminal on Windows as on Linux or MacOS, are there any good reasons still remaining to use Linux as the main operating system for one’s own personal desktop environment?
Certainly there are a few reasons one might still prefer Native Linux instead of Windows:
- Lack of Ads & Spyware: Windows 10 is full of ads, as well as riddled with telemetry and data collection so bad many call it Spyware. Franky, I don’t disagree with this assessment - the amount of data Microsoft collects and sends home is alarming, and there is no way to completely opt out of everything.
- Lack of Bloatware: Windows 10 by default ships with many applications users will find unnecessary. Why force users to have Skype, Minecraft, and OneDrive installed if they never plan on using it? Things get even worse when you factor in the different software installed by default depending on the computer manufacturer.
Linux is so much better in this department, especially with Arch or other minimal distributions that allow users to customize exactly what will and will not be on their machines. While this is certainly more work up front, it gives users complete control over everything.
And lets not even get started with the Windows Registry, which means that installing or uninstalling any software will have the unintended consequence of making the computer run slower over time, eventually requiring a reformat…
- Custom Window Managers: Windows has one and only one window manger: Windows. The benefit of this is that you can use any other Windows 10 machine and it will work exactly the same, with the same functionality and keyboard shortcuts.
However, the benefits end there. While there are many 3rd party tools one can install to modify the look and feel of the operating system, many of these are low quality, outdated, and of dubious origins. Linux allows for the user to select among one of dozens of Desktop Environments and Window Managers (such as Gnome, KDE, XFCE, i3, etc…), allowing for a person to select the method of interacting with their computer in the way that jives most with how they operate. Not only that, but these Window Managers can all be customized and tweaked to do anything desired, unlike Windows which forces a user to work only within Microsoft’s framework.
- Open Source: Ask a Linux user what Antivirus software they run, and you’ll likely hear a sarcastic chuckle in response. Since most software installed by Linux is open source, anybody can directly dive into the source code to see exactly what the software does and examine any risks personally. With Windows, you double click the downloaded .exe file and just pray nothing bad will happen.
The open source community is also amazing - software is always improving and evolving; people are able to fix their own bugs and add their own features…and by scratching their own itch, they are able to share it back with the world so everyone can benefit.
- Mindset & Learning: When using Windows, one must accept the world in which they live and learn to work within its parameters. Linux, by its nature, fosters an environment more conducive to learning how a computer operates. Sure, it can be a pain to spend hours configuring text files to get a simple thing working that can be easily done with a couple of clicks inside Control Panel on Windows, but which method fosters more learning about what is going on under the hood? Once the fundamental principals of Linux are understood, possibilities that are extremely complicated or impossible within the Windows are available.
- Stability: BSOD? Lol. Linux users measure their uptime in months or years!
But to be fair, Windows also has a large list of benefits:
- Driver support: Frankly, there are many pieces of hardware that are either a huge pain in the ass to get working with Linux or frankly just near impossible. With Windows, one can just go to the manufacturer’s website, download the driver, and it should work out of the box (while this can be blamed on the manufacturers, it is just the current reality).
- Better gaming performance: This is related to both Driver support and the fact that companies write games primarily for Windows first, with MacOS/Linux as an afterthought. Many see Windows 10 as a gaming OS, and it’s hard to dispute the benchmark numbers on that front.
- Software availability: Windows 10 can run Windows AND Linux binaries through WSL. Linux can only run Linux software (yes, Windows apps can be emulated through Wine, but frankly Wine doesn’t tend to work very well in many cases)…if using Windows only software is a requirement for work, then Windows might be the only option.
- Easier to use: Windows is just flat out easier to use for new users. Nobody needs to open the command line to move a file from their Desktop to their Documents folder, or open up a text file to modify their settings. While Desktop Environments such as Gnome or KDE have been improving onboarding for new users recently, Windows still can’t be beat here.
- Configuration: Configuring Linux can be a frustratingly huge pain in the ass. I just recently spent an entire evening trying to get an external monitor to work through my Laptops HDMI port. Because my Laptop has both an Intel and NVIDIA graphics card, Linux doesn’t support it by default, which means I had to download custom 3rd party drivers, edit countless configuration files, and scouring the web for hours until I stumbled on a working solution. In Windows? No configuration necessary, it just works!
- The default option: There’s something to be said about buying a new computer and just being able to pick it up use it like an appliance (this is one of Apple’s biggest strengths). Since very few manufacturers ship laptops preinstalled with Linux, one has to spend hours installing and configuring a new operating system if they decide to go the Linux route.
However, since the above reasons are more a matter of preference than objective facts, in this article I’m mainly going to talk about the performance differences between Native Linux and running Linux through WSL on Windows.
All of the below benchmarking tests were performed on my MSI GS65 laptop (with 16GB ram and i7-8570 processor) using Arch Linux, both within WSL (with performance tweaks such as Windows Defender disabled for better performance) and stand alone in a dual boot environment. While it was possible to install Arch Linux via WSL before through some custom hacks, it is now available in the Windows Store (however, I have recently learned that this isn’t an official release from the Arch team, so buyer beware). Though I still prefer Ubuntu for server environments, I strongly prefer Arch Linux on a personal machine for its minimal footprint, customizability, rolling release model (always ensuring newest software), and awesome package ecosystem (AUR)!
While I work with a variety of programming languages, my bread and butter is software engineering for web applications, which means that I work with a lot of Javascript. One of the tech stacks I work with most often is React, so I definitely install a lot of NPM packages and compile the source code through webpack. This tends to require a lot of I/O (which seems to be WSL’s weak spot), though I never knew just how big the difference would be. So, this seemed like a great place to start!
Test #1: create-react-app
For my first test, I installed a sample project using create-react-app
. This is a great test because it is a command I run often, and this command installs a lot of NodeJS packages, which involves a lot of disk IO. I ran this same test 5 times, then threw out the highest outlier to remove any anomolies.
- Native Linux (in seconds):
- Fastest: 15.59
- Slowest: 34.3
- Average: 24.945
- WSL (in seconds):
- Fastest: 146.57
- Slowest: 189.4
- Average: 167.985
So for the first test, creating a brand new React application was 6.73x slower in WSL than on plain Linux. Ouch…that’s a lot of extra waiting around to start a new project! Also, while running this command on Windows, the fan ran LOUD - the CPU was bouncing around from 91 - 102% utilization!
Test #2: Compiling a sample project in Angular
For my second test, I wanted to focus on a different framework other than React, so this benchmarks building a sample project using AngularJS with the Ionic Framework.
- Native Linux (in seconds)
- Minimum: 13.207
- Max: 13.325
- Average: 13.266
- Windows (in seconds)
- Minimum: 22.177
- Max: 39.41
- Average: 30.7935
WSL performed much better in this test, but still was 2.32x slower on average than Native Linux; that’s a lot of extra thumb twiddling between every compile. Most of the test were in the lower end of the 20s, but randomly it would spike to almost double that (WSL speed can be very unreliable). Native on the other hand, was rock solid and predictable.
Test #3: Hard Disk Test File Reading / Writing speed
The third test I performed directly benchmarks the achilles heel of WSL: Hard Disk I/O performance. I simply wrote a blank test 1GB file in my home folder to test the write speed, and then read it to test the input speed. For completeness sake, I also performed a test in an Arch Linux VM with Virtual Box. I also performed the test multiple times, and included the ranges and average of the results.
Here’s the results of this test:
- Output:
dd if=/dev/zero of=/home/json/largefile bs=1M count=1024
- WSL
- Minimum: 227MB/s
- Maximium: 631MB/s
- Average: 429MB/s
- Virtual Box
- Minimum: 1.5GB/s
- Maximum: 1.7GB/s
- Average: 1.6GB/s
- Arch Linux Native:
- Minimum: 2.4 Gb/s
- Maximum: 2.4 Gb/s
- Average: 2.4 Gb/s
- WSL
- Input:
sudo dd if=/home/json/largefile of=/dev/zero bs=1M count=1024
- WSL:
- Minimum: 334 MB/s
- Maximum: 626 MB/s
- Average: 480 MB/s
- Virtual Box:
- Minimum: 9.7 GB/s
- Maximum: 10.8 GB/s
- Average: 10.25 GB/s
- Arch Native:
- Minimum: 9.2 GB/s
- Maximum: 13.1 GB/s
- Average: 11.15 GB/s
- WSL:
Wow, that’s a big difference between WSL and native Arch Linux. Writing a file to disk was 5.6x slower, while reading from a test file was a whopping 23x slower in WSL than on plain Linux! Yikes…
Virtual Box came much closer to the IO performance of Arch Native which was nice to see, but unfortunately Virtual Machines suffer the drawback of paying a CPU and Memory penalty due to running inside a container within the host OS (not to mention the sluggish graphics performance and compatability issues, which unfortunately makes it not an option for me as my primary work environment).
Test #4: Baseline Memory and CPU usage
For my last test, I wanted to test how many system resources were being used after a cold boot (memory & CPU):
- Linux with i3 environment
- CPU Utilization %
- Minimum: .1%
- Max: 1.4%
- Average: .75%
- RAM: 304 mb
- CPU Utilization %
- Linux with GNOME environment
- CPU Utilization %
- Minimum: 1.5%
- Maximum: 4%
- Average: 2.75%
- RAM: 956 mb
- CPU Utilization %
- Windows
- CPU Utilization %
- Minimum: 2%
- Maximum: 53%
- Average: 27%
- RAM: 3.5 gb
- CPU Utilization %
Again, i3 comes out as the clear winner. While Gnome was only about 3-4x as bad in terms of resource load: 304 vs 956 mb RAM, and .75% vs 2.75% average CPU usage, Windows was on a whole ‘notha level (and not in a good way)! RAM usage was 11.51x worse in Windows (304 mb vs 3.5 GB), and average CPU usage was a pathetic 36x worse! To be fair, the max value of 52% recorded wasn’t frequent, but it is unexpected as this is a cold boot and I didn’t manually open up any software (other than what Windows opens by default upon login, AND I waited for everything to load and settle before I took any measurements). Taking a look at the performance graph, far more CPU spikes can be seen in Windows than are encountered in Linux (which is very consistent in terms of CPU utilization):

Conclusion
Here are the results for comparison:
Test 1 (create-react-app
): WSL is 6.73x slower
Test 2 (Angular compile times): WSL is 2.32x slower
Test 3 (I/O): WSL is 5.6x slower for output and 23x slower for input
Test 4 (RAM & CPU): Windows RAM usage is 11.51x worse and CPU utilization is 36x worse compared to Native Linux using i3
As can be seen from these results, there is an order of magnitude difference in performance related to file operations. This has a big impact to me personally, since my particular use case involves a LOT of installing packages and compiling code, requiring heavy disk I/O. Fortunately, CPU heavy use cases are sure not to suffer nearly as bad; other benchmarks I have seen show that WSL CPU performance is almost on par with Native Linux.
Though there has been a lack of progress with the disk IO issue in Linux for quite some time, there is now a beacon of hope on the Windows side with WSL 2 coming up! When that comes out I will have to run these benchmarks again 😄
Also, Windows is just simply a heavier much more bloated operating system, and it shows with the amount of CPU & RAM being used. The amount of resources used by default is a huge difference; while this isn’t as big of a deal on my beefy gaming laptop, it surely would be on more modest hardware. With Windows, you can’t install any lightweight Window Managers such as i3 or XFCE to lighten the load, so you’re stuck paying the performance penalty.
So…after all this testing, what did I decide to use? Drum roll please…
Both! I currently dual boot, using Linux with the i3 Window Manager as my daily driver for programming/productivity, and Windows for gaming/multimedia (since Windows has much better external display support and software compatability). i3 is amazing - as a VIM addict theres nothing else like being able to control my entire computer only with my keyboard, and I’m finding it nice to have a separation of work and play…however, if WSL performance ever became on par with Linux I might just have to re-evaluate my choice again 😎
Test Results
time npx create-react-app
- While running this command on Windows, the fan ran LOUD!! The CPU was listed at 102%, 91%, etc.
Ionic Conference App:time npm run-script build
- Linux
- Minimum: 13.207
- Max: 13.325
- Average: 13.266
- Windows
- Minimum: 22.177
- Max: 39.41
- Average: 30.7935