Computers‎ > ‎

Windows suck

Why Microsoft Windows suck?

(This article is updated on a regular basis, comments are warmly welcomed, read ALL before commenting. I will be more than happy to improve this article. Please DO read the conclusion. DO NOT take it for granted, it's not simply debasing Windows. Win-Win situation is something I would like to see.)


Microsoft loves Linux (since when? - post my XenServer journey @ Citrix AFAIR) ;-)

May 2020, I got a Dell Latitude 5300 2-in-1 with Windows 10 Enterprise pre-installed. After getting Local Administrator (took a week), I was able to configure the following productive workflow (around 70~80% as productive as my Linux workstation or macOS)
  • enable WSL 2 (manually installed Ubuntu 20.04 from wsl rootfs tarball)
  • winget (the Windows Package Manager) - not mature yet but works well (scoop still needed to install CLI tools as winget repo is building up...)
  • Windows Terminal (terminal emulator)
Not bad.
Know just enough WSL to be productive
  • explorer.exe . (xdg-open . / open . equivalent)
  • /mnt/c/Users/<username> (%userprofile% in Ubuntu @ WSL 2)
  • \\wsl$ WSL Linux distro directories

As of end of 2019, with Chocolatey (for GUI applications) + Scoop (for CLI applications) as package manager, WLS 2 as productivity environment (lightweight Hyper-V virtual machines to run Ubuntu or distros of your choice) makes Windows a better platform to get jobs done, it can be considered a productive environment.

WLS 2 solved the efficiency and performance issue introduced by the translation layer in WLS 1 (translate system calls to for NT kernel), by using lightweight hyper-V virtual machines, improved latency, performance (by removing overhead), disk I/O is greatly improved.

WLS 2 is more superior than Cygwin + mintty (cross compiled using MingW, API compatibility layer + CLI binaries), should be a sane choice on Windows to get Linux (emulated POSIX compatible) environment.

Anyway, Linux has won (server, cloud, super-computing, embedded devices, IoT, etc).

Adopting Linux / or other OSes as a religion is STUPID.

Personal workstation, laptop OSes are NOT important any more, as long as it's productive with at low cost,  it's more a personal attitude or flavour.

"The best OS is the one that does what you need at the best cost."

Below is past tense (around 2008-2015 era).

User Data transfer (reinstall, upgrade, migrate between different machines)


Simply keep /home on a separate partition (Btrfs => subvolume / LVM => logical volume). NOTE: remember to tar /etc and where you put custom stuff in case you need them, also look into /var for run time data like mysql, etc. under /var/lib). Also /opt and /usr/local for software compiled from source.


tar ~ or preferably $HOME directly (of course you can use | & send it over the network using netcat and/or via SSH without consuming extra local disk space. Use rsync to copy it to external HDD or to NFS on NAS via SSH. 

  1. Boot from USB/DVD Live is always safer, tar Jcvp -f dst.tar.xz src --exclude=~/.xxx
  2. rsync -avhz --progress --stats --exclude-from '/path/to/exclude.list' $HOME user@host:/path/to/backup
  3. Use dd (raw & violent) or create image by using Clonezilla / partimage etc.
It's so easy to switch distributions or replace your hard disk. For apps, APTonCD (for Debian based distros) offers the backup to all installed packages on the fly, unless you clean all the package caches in /var/cache/apt/archives by using apt-get clean command.

Note: The UUID may change if you replace any hardware, for example a larger and faster Hard Disk. Remember to change the UUID (use blkid) reference in /boot/grub/menu.lst (/boot/grub/grub.cfg for GRUB2) and /etc/fstab. Labeling file system is also a good idea.

To reinstall a Debian based Linux distro, simply export all installed packages to a list by executing the command on the source PC:

sudo dpkg --get-selections > pkg.list
# Restore all packages on the target
sudo dpkg --set-selections < /path/to/pkg.list
sudo apt-get dselect-upgrade

Fedora / RHEL / CentOS based

# dump user installed packages using dnf
dnf repoquery --qf "%{name}" --userinstalled > pkg.list

# or raw rpm
rpm -q --queryformat "%{NAME}\n" -a | sort > pkg.list

# install all packages
dnf install </path/to/pkg.list
dnf install $(cat pkg.list)

Arch / Manjaro (I don't think I need to do this for the target audiences).

Grab a tea or coffee, it's done when you are back!
Note: Be careful when using this migration method when moving between different architecture (e.g. x86->x86_64).

For Arch Linux users, check Backing up and retrieving a list of installed packages


Migration Assistant offers hassle free migration over wireless network or FireWire! Since 10.5 Leopard it supports Time Machine backup to external disk (USB), to another Mac. Imagine the use case => you replace the internal Hard Drive with a bigger and faster one. Re-install macOS and plug the old HDD to your Mac via USB, all user settings and apps can be migrated seamlessly (including homebrew stuff!). Even primary school students can do this. This should profit from its UNIX ancestors.

In real life, I had replaced my MacBook HDD (80G Seagate Momentus 5400.3) because it's slow and tight on space. I replaced it with a Seagate Momentus 7200.4 320G. What I did was replace the Hard Drive according to the official guide, made a external USB HD with the old HD, reinstalled Mac OS X. Then plug the external HD during the 1st boot, Migration Assistant will pop up and ask you to migrate all user settings, Applications and other data. Cool! I went out for a walk and then it's done. Of course you can use tools like CCC to copy the whole OS over to the new HD. I just don't bother, I want a fresh OS X install.

I bought a MacBook Air for TAOTAO, it is running OS X 10.8 (now 10.9). I migrated user settings and data from 10.7 Time Machine backup, everything works out-of-the-box as if I am using the old MacBook. The most incredible part is it even took care of packages compiled and installed via Homebrew. Although I had to install Xcode Command Line Tools before I could use it. This is productivity!!!
NOTE: I had to install a mising dependency - libpng (brew doctor told me) before I can use brew.

Another MacBook Pro (MacBookPro11,5) added to my personal list.


To be honest, do you find built-in Files and Settings Transfer Wizard useful at all? How do you feel like a Windows version upgrade (XP to Vista, XP to 7)? Is it painful or pain free? Tell the truth:)

Update: The new Windows Easy Transfer tool in Windows 7 works pretty well out of the box if you migrate from Windows 7 to Windows 7. However, it doesn't work with previous versions (between different Windows versions)...

Pain - Windows Update patching (hot fixes/service packs, leftovers and reboots)

If we install Microsoft Windows from scratch on new hardware, at least 2-4 hours will be wasted on applying Windows Updates, along with endless restart cycles.

Update leftover, garbage, ignore this if you have a big enough disk. While I think  nobody likes to keep junks at home, right? So you need to manually delete the craps:

  • %systemroot%\ServicePackFiles (if u have ever applied any service pack manually)
  • %systemroot%\SoftwareDistribution\Download
  • If u r not going to uninstall any HF later, delete %systemroot%\$hf_mig$ and %windir%\ any $NT*$ folders.
Calculate the size of these useless files. Of course they are just a small part of the craps... Also, consider the frequency that Microsoft releases hotfixes and Service Packs...


In most of the modern Linux distributions, package updates, security patches (errata) and even new versions of Linux kernel (pre-compiled) will be push to end-users from official repositories (if configured).

With Ksplice some Linux distributions (Free on Fedora and Ubuntu) is capable of applying security patches to the running kernel without rebooting. This is mission impossible for Windows n the foreseeable future.

Update: Now we have kpatch, and live patching (kernel/livepatch) is in the Linux Kernel mainline since 4.0.


macOS built-in Software Update (CLI softwareupdate) works pretty well in most cases. Homebrew (with cask) takes care of 3rd party packages.

File System

I am used to the *NIX file system and directory structure. As I am a hardcore user of GNU/Linux (Since 2001) combined with Mac OS X.

*NIX has a simple and clear directory structure, everything is under Root /, user profiles are under ~ or $HOME clean and tidy, easy to manage. Less fragmentation compared with FAT32/NTFS. Although officially, ext{2,3} is supposed to be fragment-free. But why there is still e2defrag? And in ext4, there is an online defrag tool e4defragThe so-called next generation Linux file system Btrfs has online engagement function:) I am NOT 100% sure about this... (@WIP)

Once M$FT's WinFS in 'Longhorn' - code name for Vista drew some of my attention. But the disappointing truth was that there was no such WinFS in Vista or Server 2008. Only a higher version of NTFS.

NTFS is all right. However, it is definitely NOT able to compete with ext4, Btrfs or ZFS...

NOTE: It's easier to take advantage of RAID on Linux because software-based RAID support is built-in (md, LVM, Btrfs / ZFS). The best practice is to combine RAID (all about performance and data reliability) - MD (multiple devices / mdadm) + LVM (about storage management and file system).

Btrfs (file system with built-in volume management)is the future of  Linux file system, often considered an equivalent of ZFS (on Solaris and FreeBSD). It's really cool! Try it out and see yourself, you'll love it! But DO remember to use raid1 or raid10 for data (metadata is by default replicated across drives) backup your data!!! => READ this => Btrfs Tips

Upgrade (rolling releases)

We all know that some great GNU/Linux distros like Gentoo, Arch Linux and Debian sid (close but not full rolling release) are rolling releases.

They have the concept of rolling upgrade which means, whenever there is a new release or version, we can just upgrade on top of the existing installation, all configurations and software packages will be upgraded automatically, dependencies will be resolved by package management. However, do prepare to fix endless problems, for example every time you don't upgrade Arch Linux after a few weeks;-)

However, whenever we upgrade Windows nothing seems to be smooth.

Mac OS X does a relatively good job as well, upgrade is an easy job. Migrating user settings/data is an easy job via Migration Assistant.

Stability, Reliability and Security

I don't want to discuss any more about the stability, reliability and security difference between *NIX and Windows. We all know the story. *NIX and Windows, totally different.

BSOD (Blue Screen of Death) & System Hang

One more thing about bloody Windows, BSOD. System hang! There is no way to recover unless hard reset, power off and on.

I have never experienced any system hang on Mac OS X so far, 3+ years (I did experienced a few unexpected shutdown and a couple of system hangs since 10.6 Snow Leopard). Aqua on top of Darwin seems to be well optimized, very stable.

Sometimes X11 (also known as X Window System, X) on Linux crashes or hangs. I can still kill the x session and restart it. The rest of the system is still alive. Login via either pseudo consoles or SSH to write back cache to disk and try to do backup unsaved work, use the Magic SysRq key (Alt + R, E, I, S, U B, reverse BUSIER) to safely reboot.

I have experienced many unexplained Linux system hangs (mostly on desktops / laptops) over the years, most of them were caused by my own silliness (I don't want to talk about this here anyway;-) Fortunately I didn't lose any important data because I use Chrome sync, Google Docs (Drive now) and Dropbox to push everything into the cloud. Also, do remember to use tmux (byobu / screen) when doing administration jobs on remote host, you know why;-)

Internet Explorer (devil)

IE seems to become a part of the fatty Windows kernel now, at least a very important part of the whole operating system. IE can be a severe security threat to Windows because of Browser Help Object. It is easy to inject malicious code by making use of the BHO, and run the codes inside other processes. What I can't understand is why Microsoft allows IE to be such a big potential threat to the whole operating system. The architecture of Windows is really ridiculous. I have never heard that browser can cause such a big risk in *NIX world. I did remember there were a lot of buffer/stack overflow or things like that for Linux, and by doing that someone can get root privilege. Most of them were kernel or device, device driver related. Browser? Never heard of, maybe I am ignorant...

So, who is to blame? Microsoft Windows architect?

I believe IE is losing its market share anyway. Although a lot of Internet banking or web apps still rely on ActiveX, as a result they are only compatible with IE and Windows(Run ies4linux, IE in WINE, I don't think it's a good workaround, we don't count running Windows in Virtual Machines either). I can't say IE is totally crap, but in fact it is very stupid and crappy. I have to use it because of web conferencing tool, Siebel CRM and netbank. But I normally run IE in a Guest Windows XP running in VirtualBox or VMWare Workstation/Fusion.

Better choice out there in the market:

Chrome, Chromium, Firefox, Opera.


The concept Registry should be a great idea and innovation, but Microsoft's implementation turned out to be crap. Back in Windows 98/98SE era, Registry was easy to get overstaffed and causes Windows to crash a lot. It's still a core of the Windows OS, even Windows Mobile. So many garbage in registry, normally don't try to clean up, just forget about it.

I prefer text file based configuration implementation in Linux (in /etc). That's far more reliable and straightforward.

No native Multi Workspace (virtual desktop)

We all know that almost all X11 or Wayland window managers (compositors) provide out-of-the-box workspace, like GNOME, KDE (Kwin is nice) and XFCE, it is a key feature to improve productivity for some folks. Also, in Mac OS X, Apple introduces Spaces (in 10.5 Leopard?) which is a improved version of Workspace.

However, the more expensive Microsoft Windows doesn't offer anything like that. Well, in power toys and sysinternals toolkit we can find apps to enable workspace like feature. Most of them sucks, like desktop. Some 3rd party open source/freeware do a fairly better job, for example: VirtuaWin and Dexpot. After all, they are not native feature and don't work as good as those born with *NIX. I don't think it's hard to implement a workspace like feature in Windows. In the latest Windows 7 beta and RTM, there is no footprint of features like workspace, no hope to see that in GA, although it has an enhanced taskbar with pins. Shame on Microsoft.

Package Manager - 3rd party applications install/remove/update/upgrade


dpkg + APT offers you the peace of mind. Once you set up all necessary apt repositories and PPAs (only for Ubuntu), leave all the upgrade, dist-upgrade, install, remove, clean, autoremove jobs to the package management system. No worries, mate!
Arch Linux
Similar to Debian's APT, Arch has its own Swiss knife, pacman, plus the AUR (Arch User Repository, its yaourt frond-end make it something even better than Ubuntu's PPA) and ABS... Arch was born for geek! It's actually my favorite so far;-)
Fedora, RHEL and Oracle Linux
I know that YUM from yellow dog does a similar job, rpmfusion and EPEL are PPA like extensions.


Drag and drop installation was once the symbol of the ease of use of Mac OS X. Even a dummy can install and remove OS X applications without any difficulties. But remember, we still have .pkg installers from inherited from NEXT. But it's still relatively easy, similar to .msi on Windows platform.

Most of the time, leave the maintenance job to the application itself, when it asks you Yes or No to upgrade, click yes, that's it! What underneath it is that the 3rd party applications will check if there is newer version, if there is it downloads the latest version, remove the old version (can be found in Trash) and copy the latest version into /Applications folder. However,  not all OS X apps work this way. We all know that Mac OS X doesn't have a package management system. As a result, some applications use the .pkg format installer, are not able to update automatically.

homebrew - the missing package manager for OS X written in Ruby. It is the best among its kind, much better than macports and fink. Now iTerm2 + homebrew is the standard for System Administrators or Developers using Mac.

Cask was added later to manage 3rd party apps (not distributed via Mac App Store).


Nowadays, Windows Installer takes care of the install/remove in most cases. Remember to use appwiz.cpl to add/remove programs, it it's not working, try to fix it using msiexec.exe. Sometimes, dll dependencies will be annoying, it's time consuming to resolve dependency problems. Not like *NIX OS.

Basically, you do all the updates manually! OMG! That can't be possible, right? Although software like HFS (not the OS X File System) will pop up and ask you if you are going to upgrade. Click yes, and HFS will take care of it via a script. But not all developers are that considerate. What's more, not all software can be easily updated, only those portable applications can.

Update: Chocolatey is a package manager (apt-get for Debian/Ubuntu) for Windows (written in Powershell). It works not as good as homebrew and APT BUT at least Windows, at last has something called a package manager. On Windows, Cygwin + Gow (GNU on Windows) + Chocolatey makes it a productive environment.


Global proxy settings
IE settings, yes! Why IE? I don't know...
IE settings -> Connections tab -> LAN settings, why? I don't understand. Why Microsoft put this in control panel and make it clearer to all users.

1. Gnome Proxy Server settings
2. Find /etc/profile (Debian/Ubuntu), add export http_proxy="http://username:password@hostname:port/"
3. Session wide ~/.profile, ~/.bashrc, ~/.bash_profile
4. System wide /etc/profile, /etc/environment (not a script, key value pair)
5. Terminal session wide export http_proxy="http://username:password@hostname:port/"

Mac OS X
System Preferences

This post was originally inspired by a post on Lifehacker, in response to: What are your Biggest Windows annoyances


So to sum up, I hate Windows as it sucks in so many ways. However, it is still good enough for most people, especially after installing Cygwin + Gow and Chocolatey + scoop (package manager for GUI and CLI apps). Although Canonical has been working hard to make Linux easier to use, the market share of Linux has climbed up to around 1.7%, still a long way to go.

No worries, Linux is being improved rapidly, especially after Ubuntu's appearance (I don't like Ubuntu in a few ways BUT we CANNOT deny the fact that it has contributed a lot to make Linux easier to use and dramatically increased Linux's market share). The rich guy Mark Shuttleworth is smart and so far he and his team have done a fantastic job. Let's wait and see;-)

To be honest, I would like to see a Win-Win situation. We can choose whatever OS we like, it's ONLY a tool after all!

I am with Tux (I own terry@tux[dot]im^^) and open source, because I enjoy KISS, love freedom.