Reasons why Windows is terrible

People often wonder why I discourage the use of, poke fun at, say bad things about, or otherwise disparage Microsoft Windows. At any moment I usually can’t come up with a big list of reasons, or I can’t explain them well. So I’ve made a little list of some of the reasons why I think Windows is so terrible. Note that a big thing is that I’m not evaluating it in a vacuum — other operating systems don’t suffer from the same problems on this list. Other operating systems that normal people can use, and which I recommend. If Windows were really the only operating system in existence I probably wouldn’t be so critical of it. It has some features that are nice. You can use it to get work done, access resources on the internet, etc. But other operating systems do those things as well, and are much better.

This list is mostly technical stuff, so most people may not understand many parts of it. If you think these technical issues with Windows don’t affect normal users, think about how all the software normal users use is made by technical users (programmers) who have to work around all of these things. I think a good analogy is that if programming is like driving a car, programming for Windows is like driving a car that can’t turn right. Sure, you can still get to most places, but you have to circle around making lots of left turns where you could just use one right turn. And yes, I mean left turns with all of their traffic implications for countries where cars are driven on the right side of the road. Every time I think about making something work on Windows (eg. to help my poor family members who feel tied to Windows) I think about the very simple process it would be to do on a Unix system (such as GNU/Linux). Then I see the mountainous barriers to make such solutions work on Windows and I throw up my hands in despair and move on to more productive things.

Again, being mostly a technical list, I assert that this isn’t just some mamby-pamby “I don’t like Windows because I know where buttons are on something else” post like I usually see telling why one operating system or another is bad. These are areas where Windows is in fact technically lacking compared to other operating systems that you can put on your computer today.

Now, I should note that some of these may be out of date. The last version of Windows that I used full-time was Windows XP. I used Windows 7 fairly heavily at work at a couple of jobs I had. I have used other people’s machines with Windows Vista a reasonable amount. But I have not really used Windows 8 or Windows 10 at all. But even so most if not all of these are true for these newer versions. If I’m wrong about things, let me know and I’ll correct them.

So here is a list:

  • The windows registry. It is a monolithic configuration database that strongly discourages any but the brave and confident from configuring anything on their machine, and makes it very difficult to find out how, to track changes, to document things, etc. It is also a massive single point of failure. It is disgusting. It is awful. You seriously have to configure all sorts of stuff in it with hex strings for specifically 32, 64, etc bit values. You can’t simply stick it in git or your favorite version control system without lots of import/export operations and nonsense. It is opaque. It is nonsensical.
  • Path separators are backslashes instead of forward slashes (\ instead of /). If you think this is arbitrary, you have never programmed in a language where \ is a string escape character. (This is the case for most languages, including all the seriously supported languages for programming on Windows, and their stupid shell.)
  • Windows is the only operating system left to use \r\n newlines. Newlines have a surprisingly complex history. But seriously, let’s standardize now.
  • No package management (Though apparently Windows 10 now has a package manager, which I’ll have to find out if it is any good. Preliminarily, I think it only works via the command line on the “power shell”, so most people will still not get the benefits of package management that are sorely needed.). Also, in all likelyhood this package manager only lets you install packages from the Windows App Store.
  • As a result of the lack of package management, there is no good way to write programs for Windows that depend on other programs or libraries, because you can’t rely on anything useful being installed on Windows. So you have to install all of your program’s dependencies with it. So forget about any simple script writing to solve your problems like you can on Unix, or sharing dependencies between programs!
  • It has only relatively recently supported symlinks, they require administrative privileges to make, and they still don’t work as well as they do in unixes. And symlinks are awesome and so useful for managing your files!
  • No good command line interface to anything. This is important for expert and mid-level users — the command line gives you a lot of power and the ability to script things (IE automate what you would otherwise do manually).
  • No posix — IE no posix programs (eg ls, cat, grep, etc) for portable and convenient scripting, and no posix system calls (eg. fork). Posix is not the holy grail of computing, but it is the most standard thing we have. I would forgive a system forgoing posix to provide something that’s actually better, but Windows does not.
  • You can’t run batch scripts without opening a terminal window. (At least without some additional hackery, such as registering a service (which is a pain, and needlessly complicated and difficult) or making a program that can put an icon in the application tray.) [Correction — apparently you can now. But you apparently couldn’t when I looked into it.]
  • Horrible security (seriously, windows security is just laughed at among security people everywhere).
  • Even when they say they improve security, it still ends up being terrible in most cases, largely due to legacy crap.
  • Until recently it only worked on x86/amd64 architecture, and its proprietary software ecosystem has held the world back from being able to adopt any other architectures for personal computing.
  • It has terrible error messages that usually tell you to contact an administrator, even though you probably are your own administrator (Ok, so I don’t think the error messages tell you to run and cry to your administrator any more, but still. Error messages on Windows generally tell you literally nothing.).
  • Windows is full of anti-features, and you have to shell out lots of money to get rid of them (those that you can get rid of). There is a great libreplanet talk where this is explained (Watch from 32 minutes to 38 minutes. Although the whole talk is great. But watch the whole thing if you watch the first part. In fact, from about minute 31 on it is one of the best expositions about the benefits of Free Software that I know of.).
  • Windows is slow and bloated.
  • For a long time it seems there was no “kill a process” feature for Windows — IE you could do the equivalent of a Unix “sigterm” but not “sigkill”. I guess this has changed now, but it led a friend of mine for many years to believe it was simply a technical impossibility for an operating system to stop processes.
  • No customizability — for example, global shortcuts are hard coded and un-changeable. Seriously, even with arcane registry hacks it seems impossible to change the Windows-key+L combination from doing anything other than locking the screen.
  • To customize even basic things you have to edit barely documented binary or hex fields in the registry.
  • Even then most customizations actually don’t work!
  • The keyboard driver, configuration system, etc. are all terrible. They can’t even keep Alt and a second-level shift (often known as AltGr) separated. As someone who uses a custom keyboard, this hits home for me. This doesn’t affect most people, but it is a drop in the bucket of examples of how Windows only works for the common and the default. Once you try to do anything creative, different, or off the beaten path on Windows you start to hit walls, and everything starts to break down.
  • The window manager (IE the thing that places windows and lets you move them around, etc) is deeply tied in to everything else, and you don’t have many options for doing anything differently. You can use some serious hacks to get something a little different that will work poorly (eg OpenBox on Windows). You can use Autohotkey scripts to fake something better (like bug.n, which seems to be the best option for tiling window management on Windows), but it has lots of edge case errors and weird behavior.
  • Automatic updates at startup/shutdown. These can come at terribly inconvenient times, and you can’t just tell it to cancel them.
  • Windows has to shut down and restart several times during installation, and it has to reboot between phases of updates. Seriously, this is stupid — updates are changes to files on your hard drive. Nothing more, nothing less. Other operating systems don’t need to reboot several times to install stuff — they just write the files!
  • It tries to hide everything technical. You may think “Oh, it just keeps things clean for novice users”, but this is serious. It is a serious hurdle to people who want to be more than novice users. And it makes it harder for expert users to help the novice users. You can have technical stuff available without making it difficult for novices — you can always have some “see advanced details or features” button or some such thing available.
  • Mount points at C:\, D:\, etc, inability to mount drives at sensible locations in a whole directory tree. (Contrast this with Unix — the root of the tree is simply / and within there drives can be mounted at arbitrary locations. One classic example is mounting /home on a separate drive or partition so that OS changes don’t damage user files.) [Correction. Apparently you can mount file systems to empty folders. But it is still not something that you can see by default, and you still have to deal with the default mount points being these silly letter-drive things. Fun trivia: Do you have any idea why it starts with C:\? What about A and B?]
  • On the point of mounting, the last time I used Windows (I had to for work) I had this network drive that would auto-mount to the wrong place every time I re-booted. I have no idea why. And I had several other weird bugs that would annoy me. All operating systems have bugs, of course, but I see a lot of people complaining about bugs they run into with, say, GNU/Linux when I see similarly stupid bugs in Windows as well.
  • No support for file systems outside of NTFS (the Windows-specific file system [that is supported on free software platforms]) and FAT (which is a crappy, outdated, least-common-denominator file system) (And stuff like the standard CD file system). Compare this to free software operating systems that support MANY file systems, including advanced ones like ZFS and BTRFS, as well as many others with nice properties (journalling, etc). This is the main reason everyone uses FAT file systems on thumb drives, etc. — so they will work on Windows and Mac. [There is a third party driver I heard about once for read-only support for ext3. I’m not sure if it works at all.]]
  • USB drivers in Windows are bad. In order to access a USB device it has to have a kernel driver. Other operating systems have a library that handles the kernel part that userspace programs can interface with. This is particularly visible when you try to use an Android device via USB with Windows. You have to have a driver from the manufacturer of the Android device.
  • Motherboard upgrading is awful. If you change your motherboard suddenly drivers stop working, and I believe something about your Windows registration is tied to your motherboard. On Linux you can change any component without a hitch.
  • MS hosted video drivers are stripped of the OpenGL parts, so you have to go to the graphics card vendor to get a driver that supports OpenGL.
  • Licensing is frustrating — you have to keep track of these long product keys. You may have them conveniently on a sticker on your laptop… but good luck reading them in 4 years when they’ve faded away from rubbing on your lap. You have to punch the keys in when installing, if you can find them. You have to do this for all the proprietary crapware you use on top of Windows as well (MS Office, etc). A hacked version that doesn’t check the license is more convenient even for people who have paid for their license.
  • If you are a company or want to run servers then licensing is even worse! You have different licensing schemes (per machine, per user) that are all a pain!
  • If you tell a laptop with Windows to shut down, then close the lid, it will “go to sleep” instead of powering off.
  • Terrible group policy stuff. I’ve never personally worked with this stuff, but I’m told it’s this horrible thing that wraps the registry.
  • Setting up background services or periodic services (cron jobs) is awful on Windows.
  • Windows doesn’t always have a working ethernet driver when it is installed. It also (more forgivably) does not always have a working wireless networking driver. This means it often has no way of connecting to the internet, meaning that you have to get the driver without using the internet (or perhaps by loading some GNU/Linux distro from a USB stick and downloading them, because any Linux distro always has working ethernet, and usually has working wireless as well these days). Seriously, why doesn’t the installer come with a bunch of drivers so your fresh system isn’t isolated from the internet?
  • Windows comes with Internet Explorer, which is the worst web browser in the world. It is a notorious security vulnerability. It doesn’t follow web standards. It has been a tool for domination, control, and subversion for Microsoft. Seriously, it was purposely made to break standards and divide web programmers into camps of which browser to support (because who wants to support multiple incompatible systems?), and support Microsoft’s monopoly. Microsoft’s power plays in Internet Explorer have cost thousands of web developers countless hours of wasted effort trying to work around things that Microsoft purposely broke. They have caused countless bugs and endless frustration. Millions of man-hours of labor from people unaffiliated with Microsoft have been flushed down the drain for this. Internet Explorer was nothing short of an act of war against society to control our communications infrastructure. I am dead serious about this.
  • Being a proprietary software system, only its true owners (Microsoft) can change it, study it, know what it does or how it works, etc. Microsoft has complete control over it, and if you want something else you are out of luck!
  • Ultimately, this last bullet point is the most important to me. Freedom is incredibly precious. It has enormous value, even to people who don’t recognize that. Software that denies its users freedom is simply bad. Individuals and communities have a right to be able to control their own destinies, including what they do with their computers, and how their computers work. You don’t truly have this freedom if your software is in the sole control of another party. It doesn’t help that with Microsoft, this other party is a massive, soulless corporation that cares only for profit. I have nothing against Microsoft employees, but they take their orders from executives that have a fiduciary duty to drive the company to higher earnings. If higher earnings are gained through (probably legal, but occasionally maybe not!) unethical practices, that is what the company will do. Don’t let corporations or others dictate what you can and can’t do with your property, how your property can be used, etc. Be free, and join those who are collectively and independently claiming computing freedom!

On the flip side, here are some good things about Windows:

  • It has a nice default color scheme.
  • The Windows 7 Aero interface looks really slick. They did a nice job on that. Seriously, those blurred glass effects are nice and I really like them. High five to the guys who made that happen.
  • I have fond memories of playing the MS Solitaire game while listening to music in my high school days. I guess I just got used to their specific interface, and the way the cards all bounced down when you won.
  • The NT kernel has some cool features I’ve read about. Unfortunately, even if the kernel has some cool features that Unix systems lack, it doesn’t seem to translate into much good for the userland.

Yeah… that’s about all I have to say about things that are good about Windows. You may say, “wait, what about driver support, photoshop, and blah blah blah”. Well, let’s look at that.

Here are some things that are nice about Windows but that are only that way because Windows is dominant — IE if some other operating system became as popular as Windows, even if it were total crap like Windows is, it would have these things too:

  • Every hardware manufacturer makes sure there are working drivers so that people can use their hardware with the dominant operating system.
  • Software vendors make their software work on the dominant operating system, and usually no others.
  • That includes software vendors who sell games. The dominant operating system has all the games!
  • The developers who work for these companies are used to the dominant operating system and its quirks. They know how to do stuff with it. They are comfortable there.
  • Everybody is familiar with basic things about the dominant operating system.
  • Following on familiarity by the masses, it is easy to find someone who is capable of fixing small issues with the dominant operating system.
  • Many professionals provide support for the dominant operating system.
  • You can assume that you can use a computer running the dominant operating system at your office or at your school.
  • Almost every computer store sells computers with the dominant operating system pre-installed and pre-configured.

When people talk about all the things that are great about Windows, it is generally about how there is so much software available, that they can buy hardware that will just work out of the box, that it is familiar… all things that only come from the fact that it is incumbent as the dominant operating system. Haiku (the BeOS clone) would have all this stuff practically over night if it somehow magically became the operating system everyone used.

So there, Windows is terrible. Horrible. Awful. Despicable.

I may update this document from time to time as I remember or run into other issues that bother me.

Addendum - other operating systems are bad too

I don’t want to give people the impression that because I have a laundry list of issues with Windows that I think other operating systems are perfect. Linux distributions and other operating systems are better than Windows in many respects. However, Linux distributions, as well as BSD distributions, and even more so other popular operating systems like MacOS, Apple iOS, and Android, have many failings.

(Here is a fun list of problems with Linux distributions, my favorite operating systems for real-life use. I would make many different conclusions, but the list of problems is pretty fair.)

I’ve been meaning to write some articles about my thoughts on operating systems. But for here, suffice it to say that Unix itself has major problems and limitations in its design. Every operating system that we can reasonably use today is either a Unix, something that is Unix underneath with a wrapper on top that makes it in many ways worse (Android and iOS), or something that, while not quite being Unix, shares many of the same core design limitations and implementation problems as Unix (Windows).

So while I think that Windows is definitely technically worse than any of the major Unix systems out there, the others have problems, too. My list of good things about windows could definitely be longer if I put more thought into it — of course Windows has some technical features that are better than other operating systems. The Windows team has done a lot of impressive work in many ways.

But, still… Windows is awful.