Skip Navigation

Why I'm breaking up with Windows

I'm going back to Linux after ~8 years of maining Windows. I was a Linux desktop and server user back in college and did all my dev on there. When I got my first job, I bought a better laptop and started maining Windows.

I am going back to Linux for three main reasons: I hate the Windows 11 UI, I'm increasingly paranoid about privacy/security, and the development experience for native software has sucked for a long time.

Besides the obvious downward spiral in UI since Windows 7, it's also become unreliable and slow. Some days, File explorer just won't open. Others, it takes a full minute to load my "home" view, and some others I get weird bugs where the color settings are broken or I can't actually click on folders anymore. The start menu is slow to open when pressing the Windows key, windows search is slow to index and sometimes looks stuff up on Bing instead of opening a file. The default apps (calculator, image viewer, media player) have been getting replaced with slower UWP versions with flatter and flatter UI. Finally, Windows is increasingly pushing AI stuff onto the platform, which leads me to privacy/security

I am increasingly paranoid these days about privacy and security. While I don't have any outstanding issues with security at large, I don't trust Microsoft's telemetry collection and I especially don't trust anything that gets sucked up into Windows Recall's AI Black hole. This hasn't been an issue, but I've always wondered why Microsoft hasn't made it simpler to create containerized applications with AppX/Windows SDK. It seems like it should be way easier to create a flatpak-like sandboxed application with any API (Win32, WinForms, WPF, or any language really).

Believe it or not, Windows is a good development platform, these days, unless you're trying to write Windows software. Microsoft, under Satya Nadella, has been taking care of its developer community and making a lot of tools free and some open source. vcpkg has revolutionized my C++ development and I've always been fond of many MSVC extensions such as SAL. There's a lot of pros and cons, but I generally prefer NT API calls over POSIX API calls (which are far more long in the tooth than NT at this point). That said, I tend to just write cross-platform "modern" C++ and don't make too many system calls anymore. I will miss Visual Studio (and the ease of SLN/Vcxproj files), and it seems like the only comparable C++ IDE available for Linux is CLion. I'm actually a fan of DirectX and HLSL over OpenGL and Vulkan: Microsoft has made a lot of really great first party libraries/tools available for DirectX that make it a really fun API to work with when you include DirectXTK. I am one of the rare few users who actually enjoys PowerShell; I prefer piping typed, structured data over piping streams of bytes. I also really hate sh/zsh/bash syntax.

That said: Microsoft has utterly lost the plot on native windows application development. They release a new UI Framework for C# and Whatever the latest managed C++ framework is every 3 or so years, and then immediately fail to support it, subtly changing XAML syntax or .Net namespaces so that your old UWP or WPF code is strangely not compatible anymore. To me, what is most telling about Microsoft's level of commitment to its newest frameworks is the fact that they are still supporting WinForms with modern, cross platform .Net builds, meaning that you can use modern C# and .Net features in a runtime that is supposed to have been replaced by their XAML products a long time ago. The only really viable way to write a DirectX application, and the only way that has any official documentation on it, is STILL to use the original Win32 APIs to create a window and manage IO.

So anyways, I'm not as zealous about Linux as most people on the internet are; I still think Windows is a good software development platform and maybe Microsoft can turn the ship around some day, but I doubt it.

9 comments
  • they are still supporting WinForms with modern, cross platform .Net builds, meaning that you can use modern C# and .Net features in a runtime that is supposed to have been replaced by their XAML products a long time ago.

    Microsoft is all about corporate clients, that's why their Windows is backwards compatible down to Windows 95, because there is some big corporation that buys the corporate license in bulk and runs some corporate Windows 95 accounting application on it.

  • the development experience for native software has sucked for a long time.

    For as long as Windows has existed, I have found its APIs to be noisy, awkward, and generally unpleasant to use. It was a major part of why I switched my development focus to Unix a long time ago. I guess this is a matter of personal taste; I wonder how you'll feel about the APIs more commonly used on Linux after five or ten years of using them full-time.

    Despite a few niggles (I don't care for Bourne-style shell syntax or Windows shell syntax) I have found my productivity to be better and more enjoyable since the switch. Nowadays, benefits include everything that comes with an open-source ecosystem, like the software install/update model of Linux distros, and the ability to solve or work around library/OS problems myself if I can't wait for someone else to fix something.

    And, of course, having a privacy-respecting platform for myself and my users is important to me.

    In short, I'm happier here. Welcome.

    By the way, if you do cross-platform desktop app development, give Qt a try. It does an excellent job overall.

    • I hate that DOS has been so influential to command lines. SQL and Cisco IOS are both a pain to use.

  • Hey, it may not be what's going on with you, but I had similar issues years ago on Windows Vista (file explorer hanging up, not launching, start menu slowness) when the HDD in the laptop started failing.

9 comments