Windows is Weird and Jank

Do what thou whilt shall be the whole of the law.

I often get confused responses from tech nerds when I say I’d rather use macOS than Windows despite being primarily a Linux user and enthusiast. The common complains being that Macs are more expensive than PCs, and that macOS is so locked down. Neither of those things are true but that’s a topic for a different day. Anyways, it’s a relatively complicated conversation to have with someone who themselves are more or less happy Windows users because there is no sort answer and I don’t want to waste my time and theirs explaining every minute detail to them for them to understand. Especially since there’s generally workarounds for getting most things done with Windows even if it isn’t an elegant solution. So rather than all that, let me just tell you a short story about something that happened to me earlier today.

I’ve been working on a project recently and I finally finished it and went about putting together the release versions for the GitHub page. The Linux version was pretty straightforward to get working. I developed it on Linux after all. I already had it working so I simply packaged the whole thing up in a .tar.gz as is typical and uploaded it to the releases editor page. No problem. Task done. Then I went to create the Mac version. Third party Mac software is usually distributed in a .dmg fine for the macOS file system but I couldn’t find a quick way to package it up into one on Linux so I pulled out my old MacBook and booted it up. It was slow with how old it was but it was still fully functional. I packed the files for the Mac build I wanted to be created as a dmg into an iso and transferred it over to the MacBook via network. I then used macOS to extract the iso and then create the dmg. No real problems. Task done. Then came time for Windows to have its turn up to bat and hoo boy that was a nightmare and as of this writing it’s still not done. In fact, I had to leave it behind to go to an appointment and haven’t been back home to my laptop. Yet, even getting it to this point was already an ordeal. I figured I might as well type out the whole of it here while it’s fresh so next time someone asks me about it I can point them here to read this instead of trying to explain.

First off, I don’t own a Windows computer. I own an old MacBook and my current laptop from System76. The MacBook runs macOS as you’d expect and the System76 runs on their Pop!_OS Linux distribution. I have no use or desire for a Windows computer so I simply don’t own one.

Recently I’ve had this ongoing project I’ve been working on using primarily Python. It’s a fork of another project but the details aren’t important right now, just that I’m done with the project itself and I’m ready to put out the full release binaries.

Now, I’ve tried compiling Windows code via wine but it’s always breaks so I didn’t waste my time this time trying that. Instead, I put Windows 10 in a VM to compile the Python code and in short it was a nightmare. One error message after the other. I installed Python via the Windows store. You’d think it would be easy but no. Now I’m out of time to mess with it because of a prior obligation and it’s still not done. Despite having to leave, I have the time to write this during the break between activities, but I don’t have access to my computer here to work on it further.

So with my options so limited, I decided the best solution was to throw Windows into a VM and use that to compile the code. You’d think that was the easy route but it you couldn’t be more wrong.

So upon creating the VM and loading up the Windows 10 iso my problems started immediately. Microsoft disabled the option to make a local only account, at least on this version of the iso. It forces you to use a live ID so that was annoying because I use a password manager and had to type that mess in manually to log in. Then when it did, it named my account after my old email address I don’t even use anymore instead of my current or my Outlook one so that’s gross. Then when I finally got to the desktop I had to install the VirtualBox guest additions. That part is normal for a VirtualBox VM like this, even including with Linux, but it was still a step I needed to take, so I figured I’d mention it. Then finally I could use it so I went about installing git…only git isn’t anywhere in the Windows store that I could find so I had to fetch the installer from the website which had all these weird options when you install it that I had to navigate. Instead of just integrating with the existing command prompt or PowerShell, it installed a version of bash on my desktop to use to run git. Easy enough at that point but it’s weird it had to install its own terminal. Apparently neither command prompt nor PowerShell are good enough. Not clear on why exactly but at least bash is something I’m used to using so no issues there for me at least.

Next, I went about cloning the repository but found out Windows home folders are semi-hidden and the link on the taskbar just takes you to a folder called “My Documents” where it expects you to put everything in, not just document files. I don’t know why it isn’t a typical home folder like on other OSs. I remember that from the old versions I used to use years and years ago but I figured they’d have fixed that by now, especially since there actually is a home folder now. Yet oddly you have to get to it by browsing the hard drive. But then you quickly find out that the drive isn’t mounted normally, it’s in “My Computer” which is what Windows has instead of the root directory. Then the drive is only labeled by a capital letter which again I do remember from using Windows years before in my youth but it’s still weird to me that it’s like that. (Plus the drive letters start at C. A & B are reserved as floppy drives as if we still use those these days. Why they haven’t changed this is a mystery to me.) So I had to sort the home folder mess out and create a manual Projects directory in the semi-hidden home directory. (I say semi-hidden because it’s in “C:/Users” rather than just “/home”.) I was able to change the icon though so that was nice at least. I picked one from the list that fit well enough. So then in the fake bash I navigated to newly created Projects directory and used git to clone the repository…except I couldn’t. It wasn’t taking the address despite using copy/paste and it looked correct. It kept saying the https protocol wasn’t supported which makes no sense at all since that’s the normal way git runs. I tried the SSH option from gut hub as well to no avail. Googled why and found it was because Windows copy+paste adds an extra hidden two characters at the front so after you paste it, you have to set the cursor just before the h and backspace twice to delete the hidden characters. Then it finally worked.

Then I installed Python from the Windows store. No problems with that step…until later.

I also installed Visual Studio Code while I was at it. Then I found that for some reason it had added files to the home directory labeled with a dot prefix like hidden files on a Unix system but they weren’t actually marked as hidden in the Windows file system. Mind you, this is Visual Studio Code, the official Microsoft coding IDE, not some ported over thing or something from a third party. It’s like Microsoft forgot what platform they were developing on. It’s a Windows application from the Windows developer on a Windows system. Why in the world are there files named to be hidden on a Unix system but not actually hidden on the Windows filesystem? It makes no sense. I went ahead and hid them in the Windows filesystem as well. No idea what they were thinking with that.

After that, I went to compile the code. I went back to command prompt to do that, except it turns out Windows can’t just build Python from the command line into a Windows binary so I had to install this program using Python’s built-in pip utility to do that for me called pyinstall. (Which is a confusing name since it compiles binaries rather than packages them into installers.)

So I pointed that tool at the .py code file to compile…except command prompt said it didn’t know what pyinstall was. So then after a bit of research I found out I had to manually create a PATH entry for it in the advanced settings. So, following a guide, I opened the applications drawer on the bottom panel and typed in control panel. It came up but I couldn’t even find the option the guide described. After some confused hunting I realized it told me to type in system so I did and a different option came up called system but with the description saying it was the control panel. It said control panel but it wasn’t the same control panel I found before. So apparently Windows has two different control panels with different options on each and no obvious way to tell them apart in the launcher except the one only pops up if you search “system”. So anyways the second one was the one in the instructions and followed them to get to the tool to edit environment variables and added it’s full path which was long and convinced making use of the hidden AppData directory which I had to navigate. (Essentially the same as the .config folder in Linux I guess.)

Finally after all that, I went to compile the code using that python tool so I typed it into command prompt, pointed it at the .py file, and hit enter…and it still didn’t work. It threw an error. That’s when I ran out of time and had to leave. I’ll have to figure it out from there when I get home.

This little ordeal is a prime example of why I don’t like Windows. This is the kind of experience I’ve had every time I’ve tried to use Windows to do things that are normal everyday tasks on a Unix system like Linux or macOS. I don’t understand the structure. It follows nonsense logic without any underlying philosophy. It’s a total mess of patchwork binaries and SysWOW compatibility layers that makes no sense at all why it’s like that or any convenient way to learn it beyond trial and error, googling issues, and memorizing it. I don’t like using it. I hate having to compile it. Everyone who comes to my house with a Windows computer who tries to use the network services I have setup on my home server like printing things out has a hell of a time getting them to work and ultimately a lot of the time I don’t even know how to help them because nothing is there where you’d expect it to be and all the settings are a confusing mess and you can’t even go the route of directly editing the config files because for the most part there aren’t any. It’s all in this horrifying directory tree separate from the filesystem of keys and settings called a “system registry”. It’s like I’m using a computer built by a madman. In short, it’s janky, it sucks, and I hate having to use it.

Update: after coming home and messing with it for awhile I finally got it to compile and finished the project but I had to delete the Python from the Windows store and install a newer version directly from the Python website before it worked. I also learned you don’t have to use git in that bash emulator. You can use it in the regular command line.

Love is the law, love under will.

Fuck Microsoft,
Vanessa

System.d and the Dreaded BSOD

Do what thou whilt shall be the whole of the law.

Before I go into the weeds with this one, let me start out by saying I’m not i one of those haters who dislike system.d as a whole. In general I find it a useful piece of kit unix philosophy be damned. I’m even in favor of the move they’re making in terms of user directories becoming portable files so long as it’s done elegantly and doesn’t break anything.

That being said, in recent news the system.d project is implementing a function to display a blue screen of death message during a boot error.

I think this is a bad move, but not for the knee jerk reasons many may have towards it. The thing is, we already had an answer to this; kernel panic. What we need is not to just ape the Windows solution but simply improve the existing solution. Have a kernel panic or boot error crash down to a terminal output and display all the debug information that way as part of the terminal output. If it’s lower level than bash, then just display a simulated one, like GRUB has. It’s more in line with how Linux behaves in general based on established norms. Since Linux users are used to getting debug information from the terminal, not via full screen messages with a blue background, keep in spirit of what we already know. If I didn’t know about this change and got hit by one of these things, I’d assume it was a virus or some sort of rootkit before I’d ever think it was a legitimate Linux output message. It just doesn’t match the way things are handled in our neck of the woods. We’re not Microsoft. We’re not Windows. We should never try to be. You can take lessons from it all day long but you should never just effectively copy and paste them like this. You should go “hmmm that’s a useful feature. How can I adapt the mechanics we already have to include that kind of feature for our system without breaking our established behavior of software and blindsiding front line techs with a sudden and uncharacteristic change of this magnitude?” Then do that.

Also ditch the QR code and just display whatever it would say along with the message.

Love is the law, love under will.

Hopefully,
Vanessa