Return

Linux 2026-03-25

I have been sticking with my Windows 7 computer, but that time is approaching.

At work I originally had to use Windows 10, which was eventually updated to 11. On top of all the crap I hear about Windows, the contrast of switching between 10/11 at work and 7 at home every day has made me thoroughly convinced that this is the last Windows PC I will ever have for personal use, and has made me want to distance myself from any new technology in general. The work computer also has adobe programs and dropbox and the like on it though, it's hard to say how much those contribute to the awful state of things.

I would gladly keep using this computer forever, but it's falling apart. There's something wrong with the GPU that causes the computer to freeze and it seems to be happening more frequently. More and more programs are also dropping support for Windows 7, Gimp 3.0 doesn't work so I never got to try the new features and see if the program is finally useful, and now Krita's new versions don't work either. Web browsers don't work so I'm using "outdated" ones. That's not a problem per-se, I don't have a problem using the versions I have, but it's a trend that weighs more and more as time goes on. I'm a very picky gamer, it's rare for me to find any games that I want to play, so finding one that I want to play but can't because it doesn't work on Windows 7 is maybe what hurts the most. VxKex is a hack for Windows 7 that makes certain incompatible programs work, but Terraria 1.4.5 is the only program that I can recall actually using it for, it doesn't work for most things I've tried it for.

I've avoided Linux for various reasons, one of the big is that I don't like it as a programmer. Some of the APIs like creating windows are splintered into multiple APIs, and I keep hearing horror stories about how bad audio is on Linux.

Linux libraries are extremely invasive with their naming when you're programming in C. It feels like you can't use any common words because it has already been defined for something by some Linux system library. You can't make a function called "read" or "write" or call any type of yours "Window" or "Visual", there's lots of these. The lack of namespaces is one of the biggest problems I have with C though, I don't exactly blame Linux for it since it's more of a C problem, but it's nonetheless one of the things that makes it difficult for me to switch to Linux. Windows has a type called INPUT, that's the only invasive name on Windows that I know of and you can rename it with a macro.

One of the things I hate most about how Linux works is that you can't just make a program and release it on Linux because of huge incompatibilities between Linux distributions. There's workarounds like Appimages, but they all have problems compared to Windows where you can just download and click any .exe file and it will just work on every single Windows PC (unless the developer used shitty frameworks that need to be installed separately). This situation is so bad that one of the most stable ways to release software on Linux is to actually make a program for Windows and then rely on layers like Wine and Proton to make it work on Linux. If I recall right, even Linus Torvalds (the guy who created Linux) has complained about this problem. I can't rely on those though because a lot of my programs interact with the OS in very particular ways (notably file paths or calling another program like ffmpeg).

A problem that was a huge blocker for me originally was that keyboard and mouse behavior is completely different since Linux uses middle click and the Alt key as system keys a lot. On Windows those are used by programs for alternate actions which gives you more varied and more intuitive ways to interact with programs, losing all that just because the OS wants to move a window when you hold Alt key or some stupid shit like that does huge damage to my workflow. It was kind of painful trying to restore Windows-like behavior for my text editor (the tool I use the most and the tool that was most affected by this), it seems like you may have to do some of these configurations separately for each program.

A somewhat related annoyance that I noted many years ago was that you cannot change the mouse scroll speed on Linux. It just doesn't seem to be possible. As far as I know, the only way to do that is to install a program that duplicates your mouse scrolls, so each scroll step will scroll twice or something, which will break some programs since it will think that you scrolled twice.

I've been slowly using a laptop with Linux on it, and it's at a fairly comfortable place now, the only thing I need to figure out is my programming situation. My current codebase is optimized for a "unity build" where the compiler doesn't link with anything (well, anything that I can easily control). The way this is achieved is by defining all the types myself and loading all the functions myself. I could do that somewhat comfortably on Windows because I'm already familiar with everything. I need to start from scratch on Linux so it's a lot of work, although AI seems to be pretty good at exactly this kind of thing: dig this shit out from the documentation and just give it to me, take this Windows function and make an equivalent with Linux APIs. It's pretty straightforward and it's easy to validate since documentation will confirm what everything does. If I had a better programming language I wouldn't have to do any of this.

Porting programs and stuff

On the note of programming languages, I am also toying with the idea of making TFD again (with some modifications I haven't put to that page). I'm very comfortable with using nested functions in C, but they're a GCC extension which prevents me from using TCC to achieve lightning fast development builds, or experimenting with Webassembly which requires Clang. Scavgame takes 3-4 seconds to compile which feels awful, there's not even that much code in it but GCC is just that slow. If I had my own language, I could implement nested functions even if I transpiled it to standards-compliant C (I have ideas for how to do it), not to mention fixing most of my other grievances with C, including the lack of namespaces thing I mentioned above. I almost finished a big upgrade to SBC but one small fatal flaw broke it apart, that's what prompted me to want TFD. I actually have an incomplete updated version of SBC that I'm using.

Part of the motivation behind TFF Paint was to have a good alternative to MS Paint on Linux, but unfortunately I haven't gotten that to a very practical state yet. The whole program, especially the way it handles input, is programmed in a kind of restrictive way that makes it hard to work with. I was being too much of a perfectionist in places where it doesn't matter. The biggest missing features are proper selections and a text tool, in order to add them I would have to implement some kind of special UI layering system that conflicts with the way I handle input. I'm a bit tempted to remake the whole program, especially since the UI system has a bug that I was never able to track down.

A related project I've wanted to get to for a very very long time is a proper painting program that could completely replace Krita for myself. I started working on it in 2021 but didn't get much further than setting up some UI panel systems, I can't recall why I stopped. TFF Paint is meant to be minimal inside and outside, but I want this program to have it all + all the features I wish Krita had (like spritesheet management and region tagging and better sprite animating system and more, some of which I already prototyped over 10 years ago).

KaniView and Simple Text Search Tool are the programs of mine I use most. Thankfully both should be relatively straightforward to port to Linux, neither does anything unusual except that STST has a special way of handling drives (C:/ D:/ etc) which I'd need to change.

I record a lot of miscellaneous things with RegionCap, but it requires very specific ways to use windows (the UI is made with 6(?) borderless windows) and I don't have good memories of the last time I tried to open windows on Linux.

I also use PNG or Die whenever I make small png images, but one of the compressors it uses is not even available on Linux.

I don't know when I'll move to Linux for real. I don't really want to do it so for now I'll continue to use this computer as long as it still works, I'll develop my Linux codebase on the side since I have Linux on my laptop anyway. My ideal scenario would be to make TFD first because it would make a lot of things a lot easier, but past experiences make me pessimistic about successfully making a language.