Why Windows sucks (the tip of the iceberg)

  1. The whole system seems to be based on some fundamentally bad and annoying design principles.
    1. Everything is giant, rigid, monolithic block.
    2. There is no simple way to combine two things.
    3. In Unix you solve problems by combining existing programs.
      In Windows you just add another monolithic block.
    4. Shitty GUIs all over the place. Seriously.
    5. As a result, it's hard to automate things.
    6. Naming sucks. Always. C:\Users and Settings, seriously? (Yes, it has been fixed)
      As a hilarious example: syswow64 contains x86 DLLs, system32 contains amd64 DLLs.
    7. Special cases abound.
      Compare Unix daemons to Windows services.
      Compare Unix X11 programs to Windows magic graphical programs.
      Compare Unix text config files to the Windows registry.
  2. The system as a whole is insanely complicated and impossible to understand.
    1. The whole system is impossible to debug. For many problems the only solution is "reinstall".
  3. Swapping out the kernel. Why.jpg
  4. Documentation sucks, it's often ambiguous and sometimes outright wrong. Since there is no source, you're basically fucked in that case.
  5. The API sucks completely.
    1. Function names like FindClosePrinterChangeNotification
    2. Functions which try to do 20 things at once
    3. But also unnecesssarily specialized functions and many functions which do mostly the same (WaitForSingleObject, WaitForMultipleObjects, WaitForMultipleObjectsEx, WSAWaitForMultipleObjects etc etc etc)
    4. At least 10 parameters on every function, seriously every function call has at least one NULL parameters
      Unix open() has two parameters, Windows CreateFile() has seven
    5. An inconsistent naming convention
    6. Too many (i.e. more than one) calling conventions
    7. Bad C practices are mandatory, like casting between different pointer types.
  6. The driver system sucks.
    1. You get some binary blob from a hardware vendor (we all know how good they are at writing software).
    2. Windows by itself has almost no drivers.
    3. This discourages hardware vendors from making good and/or compatible interfaces.
    4. Thus, installing a windows system is a pain in the ass and the system as a whole is made more unstable than necessary.
  7. Charset handling is terrible. Completely terrible. Lobotomized-monkey-on-crack terrible.
    1. While the system pretends to be based on Unicode, special code pages are still common.
    2. Two versions of every text handling function (i.e. any function with a string argument). Seriously?
    3. But you still have to manually convert before writing to a file.
    4. Unicode-capable code has to use "wide" versions of everything.
    5. Windows uses UTF-16 in wchar_t* in its "wide" interface (This is not a joke).
  8. Spaces in file names are common in standard file names, but much code does not support it. What the hell.
  9. Lots of bullshit which unnecessarily deviates from existing de-facto standards all over the place:
    1. Drive letters.
    2. \ as a path name separator. What the fuck.
    3. CRLF line terminator
  10. The shell sucks. Totally. (PowerShell is even worse)
    1. No sed, no awk, no fun.
    2. The terminal is complete shit.
  11. Every message, signal or output from any tool, program, utility or solution is unnecessarily wordy, loquacious or verbose, i.e. in simpler terms it uses many more words than are absolutely necessary to describe something plain, simple and straightforward, while often giving not enough information or data to understand, analyze or debug a potential unusualty or problem. Consult your system administrator for further information.
  12. Terrible localization (frankly no localization is often the best localization). MS-Dos-Eingabeaufforderung, anyone?
  13. Stuff like NETBIOS or "My Network Places" which never works.
  14. The GUI follows best practices like randomly popping up modal dialog boxes and focus stealing.