DEV Community

Pacharapol Withayasakpunt
Pacharapol Withayasakpunt

Posted on

WSL vs Linux with a desktop environment

What is better, if not don't need some specific softwares (like MS Office or Power BI) that often?

Like, how customizable is Windows' desktop environment? What about Git Bash? (I don't even know yet about zsh on Windows. Also, is PowerShell productive? And how lock-in?)

What about WINE vs real Windows?

Also, what about Chocolatey vs Ubuntu apt in WSL2?

Actually, I am on an old MacBook hardware, but I am trying to avoid macOS like a plaque. (Because of update requirements not as backward-compat and light-on-hardware as Linux.)

Top comments (2)

ahferroin7 profile image
Austin S. Hemmelgarn

MS Office

Look for alternatives here. There's an online version of MS Office that covers pretty much everything about 99% of people need from it, or you could look at Google Docs, or you could go for LibreOffice if you really want a native app (and LibreOffice works cross-platform, optionally instead KOffice if you end up using KDE), or you could even just get Abiword if you only need a word processor. There is no real reason to buy MS Office anymore, let alone run it.

how customizable is Windows' desktop environment

Barely at all compared to almost any Linux DE you care to name. In particular:

  • All modern Linux DE's give you a lot of options for customizing panels (their equivalent to the Windows taskbar or macOS dock and menu bar), while Windows gives you essentially nothing.
  • All modern operating systems except Windows give you options to rebind global hotkeys, but Windows doesn't. So, for example, if you want to lock the screen with something other than WinL you're out of luck on Windows, but can do so trivially on Linux.
  • Most Linux DE's let you change window decorations (title bars, window borders, possibly shadows), Windows does not.
  • Many many other things I've not thought of are more customizable on Linux.

Also, is PowerShell productive? And how lock-in?

I'm a bit biased here because I came into learning PS well after I had been using first bash and then ZSH on Linux. I personally despise PowerShell, both the tool itself, and the terminal emulation that comes with it.

PowerShell is a thin interactive veneer on top of the .NET APIs with some extra stuff thrown in to make it a bit more friendly to interactive usage. It's got a number of issues which make it a pain to work with on a regular basis:

  • It has no escape character. In almost every other interactive command line environment, you can use something (usually \) to tell the shell to not treat the next character as special in any way. PowerShell completely lacks this, which when combined with the fact that Windows uses metacharacters in paths all the time (spaces are the big offender here, but there are many others), means that you need to quote things far more frequently than you do in many other environments.
  • It's object oriented, not text oriented, and quite often likes to produce very verbose output. This is big, because it means you quite often need multiple commands after your actual command to get the output formatted in a way that's useful, and often have to use complicated sequences of punctuation in multiple places to extract the exact data you need.
  • Most PS commands have no short options. Some of the core stuff does, but a lot of that is borrowed directly from CMD and dates back to the DOS days, and there's a lot of stuff that doesn't that you'll end up using on a regular basis. This is a pain both because of needing to type more to do the same thing, and the increased chance of typos.
  • Privilege escalation from a running shell is a nightmare compared to most UNIX-like environments. You have to jump through a number of hoops and spawn a new session in it's own window to get an admin shell, compared to just running sudo -s and having a working admin shell in the same window in one command.

As far as the terminal environment, the console host that gets used by default is useless for any real work (too many quirks and way too many limitations), Windows Terminal is better but still has a number of issues compared to terminal emulators for Linux, and there aren't many good third-party options that play nice with PowerShell (Terminus is the only decent one I've found, but even it has issues).

What about WINE vs real Windows?

Provided the app doesn't need hardware access and doesn't rely on undocumented quirks of the NT kernel APIs, it will often work flawlessly in WINE. If it makes aggressive use of DirectX you may need to use Proton instead of WINE, but most common stuff will work fine there too. Rather entertainingly, in some cases you may actually see better performance under WINE on Linux than you do natively on Windows (usually due to scheduling behavior in Linux compared to Windows).

Must stuff that needs actual hardware access does not work well under WINE, if at all. Some simple stuff like serial connections don't have issues, but a lot of things just don't work because they would need WINE to emulate complicated hardware behavior (for example, the DRM stuff in a lot of older applications that requires you to have the application CD inserted in the system's CD drive does not work at all under WINE).

Also, what about Chocolatey vs Ubuntu apt in WSL2?

In terms of actual behavior, I'd take APT over Chocolatey any day, though I'd personally prefer Aptitude (terminal-based frontend for APT) over both. APT is more mature, behaves more intuitively for most people, and isn't hampered by stupid limitations in the native packaging format.

In terms of actual available software, APT wins also, though this is a property of the distribution it's run from, not APT itself.

Overall, I'd lean in favor of Linux over Windows (Linux Mint or LMDE are what I would personally recommend for people new to Linux, they're just as user friendly as Ubuntu but don't have as many of the same stupid limitations that Ubuntu imposes). Personally, I actually use both, dual-booting Windows 10 and Gentoo Linux, using Gentoo for work and when I need to do actual Linux things like cloning hard drives or recovering data and Windows otherwise (largely because I'm a very active gamer), but I have WSL2 set up on Windows with Debian (specifically Debian Sid, but that's not entirely relevant) for when I just need to do something quick in a Linux environment.

himujjal profile image
Himujjal Upadhyaya

Recently shifted to an all Linux system. Lifelong Windows user here.

Let's see all of your points one by one:

  1. You dont need MS Office that often, prefer not installing them. Try to use the web version. Or google docs

  2. Git bash is good. But it is a pain to work with it sometimes. Unless you are ready to get into Windows native development. Well if you really are. Go for Msys2. You get pacman with it. BTW you can skip this part.

  3. Install Windows Terminal. You will love it. Its the best terminal I have used so far. Linux Windows all combined. Set WSL2 in Windows Terminal as default.

  4. Install WSL2. Its awesome. Dont go for unofficial distros like Arch or anything. Ubuntu will get you through. Also dont bother installing packages for Windows native env. You will save a lot of time of your life. I wasted mine. Do everything with WSL. VS Code has good WSL2 support. Vim/Nvim works great too.

  5. Only install Windows-only apps in Windows. Take this advice. Almost 90% softwares/tools/frameworks/libraries work in WSL2.0. So keep programming all to WSL2.0

  6. If you are still thinking about Windows Native dev consider Chocolatey and Scoop. Many packages are either present in choco or in scoop. Prefer Scoop though.

Good luck. Ping me for help if you need.