WSL is a great tool

This post explains why I am using WSL in my work and why I like it. There are plenty of Linux purists who are not happy with the fact that Microsoft created WSL and even made their own Linux kernel for it with the help of Canonical1 (It is the company which makes Ubuntu2 distribution of Linux). But each coin has two sides. And here I will try to explain:

  • Why I use WSL and how I use it.
  • Why WSL is a great tool inside the Windows ecosystems.
  • Why I think, that WSL is not a threat, but a great help to Linux community.

1. Why and how I use WSL

I am a long time Windows user. And quite often I don’t have a choice because Windows is the only OS which is given at my work. Here I literally mean “given” because when you work in the big company, you usually receive company PC/Laptop with no administrative rights, with no access to BIOS settings, with pre-installed OS and applications.

Working in the corporate environment requires to have access to corporate e-mail, calender, travel portal, SAP tools, Sharepoint, etc. Those things are usually integrated with MS Active Directory and it is quite hard to have access to them from unsupported operating systems. And even if I will manage to build such access, company technical support will not help me in the case of any issue. I have to work with documents and 99% of the content which has been generated in the company is in the format of MS Office files or PDFs.

Also, corporate WebEx. How could I forgot about it?! It does have proper client only for Windows and MacOS, but neither client nor even good WebRTC based client for Linux. At least in the version of WebEx server which is used by my company.

On the other hand I am working in the project, where my company builds private cloud using OpenStack. And I have to write documentation for internal use and external distribution. For this project we have our own GitLab server, and we use as much Open Source software in DevOps as possible. Teams write their issues, release notes, guides and other documentation using Markdown and converting Markdown files to static web-pages (using Hugo pages).

So, shortly, I have to:

  • Write my content in the Markdown.
  • Use GitLab daily.
  • Convert my Markdown into PDF documents.
  • Create web-pages from Markdown files.
  • Write CI pipelines for GitLab.
  • Create some small shell and python scripts.
  • Have supported access to my corporate environment based on Microsoft Active Directory:
    • MS Exchange server.
    • Sharepoint servers.
    • WebEx.
    • MS Office.

And this is what WSL gives me.

2. Why WSL is a great tool for me

Here is quite generic list of benefits of WSL for me personally:

  • Bash shell (or any other shell you like: fish, zsh, etc.)
  • The universe of *nux tools like sed, awk, tee, wget, curl, etc. etc.
  • Normal OpenSSH client and server. I don’t need Putty/Kitty/MobaXterm and other clients.
    • I can even make SSH tunnel in my WSL and use it as a Socks 5 proxy in Windows applications like web browsers, etc.
  • Ability to write my own shell scripts which will work almost everywhere (on Linux).
  • VIM/NeoVIM.
  • Linux package management:
    • I can install almost any Linux application and it will work, including ones with GUI.
    • I don’t need to ask for administrator rights on my Windows machine.
  • I can learn different aspects of Linux without installation of Virtual Machine.

I see that I use Windows built in GUI applications less and less. Because WSL mounts Windows driver inside the Linux subsystem, I can use utilities like find (or better and faster fd), grep, etc. They work faster than Windows GUI and Linux bash is much better tool than cmd.

Also, I have my home automation server which runs on Raspberry Pi under Raspbian OS. I have my own Linux VMs hosted in the cloud. I can create different shell and Python scripts locally in the WSL and after test just upload them to my servers. I don’t need to think about file formatting (MSDOS vs UNIX text file formats), etc.

2.1. WSL at my work

As I already said, big part of my job is related to creation of documentation, white papers, presentations, etc. Before I used MS Office tools and most of my content was produced in the format of MS Word, Excel, PowerPoint, etc.

Few years ago when I started to work in the private cloud project, I could not find any good tool for Windows for simple PDF production. Technically it is possible to write MS Word document and save it as PDF, but the problem with MS Word was the following:

  • MS Word file format is not consistent.
  • Collaborative editing of MS Word file is a nightmare, because each contributor brings his own styles in the document, and overall formatting turns into complete mess over time.
  • MS Sharepoint does not help, because of access issues inside group of companies I am working in.
    • It is also not working correctly with many browsers.

As I mentioned earlier, my company has its own GitLab server and all DevOps engineers use it, they write in Markdown their internal technical notes, issues, GitLab Wiki pages, etc.

Then I made following list of criteria for my set up:

  • Source files shall be in the Markdown format.
  • Collaboration must be made via GitLab project/repository.
  • PDF must be created from the Markdown source.

After a bit of research, I found out that the best tool for this is Pandoc. Being more precise, a bundle from GitLab server & Markdown & Pandoc gives the following:

  • Markdown syntax in source files.
  • Documentation as code.
  • Collaboration via GitLab server.
  • Predictable PDF output (style, formatting, etc.).

Pandoc is really tuned for *nix systems and this is why I asked my company admins to install WSL on my machine. Our administrators allowed this because:

  • WSL obeys local user privileges, and it does not break any corporate policies on my Windows machine.
  • But it gives user root rights inside its WSL and user can install all supported Linux programs and packages.

Due to kernel limitations in the WSL1, not all Linux applications can work. E.g. networking stack is not presented (therefore nmap or tcpdump will not work), Snap packages do not work, Docker containers do not work, etc.

But in the WSL2 architecture is changed. WSL2 works with the native Linux kernel and all Linux functionality is supported there.

Then I started to look for the good editor and after some struggle with different applications I stick to VIM (or, actually, NeoVIM).

2.2. My setup in WSL

  • WSL1.
  • wsltty as terminal application for WSL.
  • Bash.
  • tmux.
  • NeoVIM with different plug-ins.
  • Pandoc to generate PDF documents and presentations (Pandoc beamer format).
    • Pandoc requires also latex, imagemagick, etc.
    • How I use Pandoc for PDF you can see on my GitHub page.

    • How I use Pandoc for slides creation you can see on this GitHub page.

  • qpdf for encryption/protection of the PDF documents.
  • Hugo pages.
  • git.
  • Additional small tools like: fd, bat, fzf, etc.

My WSL looks like this:

NVIM and Tmux

NVIM and Tmux

Tmux and powerline

Tmux and powerline

3. How I think WSL helps Linux community

Many Linux purists don’t like WSL. They say that true Linux experience can be received only if one has full Linux installation.

On the other hand, many Windows users, who would like to migrate from Windows to Linux, jump into, IMHO, wrong question about “better Linux distribution for beginner”. They are too focused on the GUI aspect of the operating system and spend a lot of efforts to find Linux distribution which GUI looks and behaves similar to Windows.

By my opinion, this GUI focus puts them further from the real power of Linux, which lies in the command line (or in terminal), configs in the text format and plethora of built in native *nix tools.

I think, that power user of Linux must be able to use Linux from terminal only, must know basic and advanced shell commands, must know how system is structured, must be able to write his own shell scripts… Actually, the latter makes Linux installation your own, personal, really tuned by you and for you. Because collection of your own scripts and configuration files makes any Linux installation work as you desire.

And this is what WSL brings on Windows.

  • There is no GUI3.
  • WSL user from the start gets only terminal and has to learn Linux from it.

Yes, learning curve is steep, but if person copes with it, then Linux community receives new member who has no fear of command line, who can take a step further and install full Linux PC, or Linux VM in the cloud, etc. etc.

I personally had been positively impacted by the power and flexibility of the Linux shell, by the freedom I have there, by the level of control I have on my system and also, by the great community of Linux users. And I am not going back to Windows as my main system.

We value more what we made with our hands rather than what is given to us. This is one of the powers of Linux and that is why if you really own your Linux system, you most probably are not going to leave it for any commercial product controlled by some company.

  1. ↩︎

  2. ↩︎

  3. But it is possible to have Xwindows server installed on Windows and connected to WSL. ↩︎