People stopped using Windows 7 not because Microsoft ceased offering security updates; they had to do it because more and more programs that they needed suddenly started to require “Windows 8, 8.1, or 10.” But in most cases, those new versions of the respective software didn’t have anything really innovative, nor any feature suggesting that they needed “Windows 8, 8.1, or 10.” Nothing should really require a newer Windows if it isn’t a UWP. Microsoft used to care about backwards compatibility–something that Linux never cared about, as there is no stable ABI in Linux. The dynamic linking in Linux requires, more often than not, a specific version, not a minimum version of a given library.

But how did Microsoft force software developers, most likely unbeknownst to them, to create software that automagically became incompatible with Windows 7?

Starting with Visual Studio 2015, the default project settings were adjusted to use the Windows SDK targeting Windows 8 or later, which means linking against the Universal C Runtime (UCRT), which in turn depends on various api-ms-win-* DLLs, including api-ms-win-core-path-l1-1-0.dll.

What makes api-ms-win-core-path-l1-1-0.dll so special?

The malice behind api-ms-win-core-path-l1-1-0.dll is absolutely unnecessary. It is so unnecessary that in most cases it’s the only DLL from the UCRT that is required and which is missing from Windows 7!

That’s the Win95/Win98 theme. This is how I used to theme XP.

Why would be this one and only DLL so important?

For no reason whatsoever! It was a trap to force people out of Windows7!

Here’s the DLL info as per Nirsoft (the size is however wrong; it increased from 1 KB to 3 KB):

  • ApiSet Stub DLL
  • 61 other DLL files in system32 directory are statically linked to this file
  • The following functions are exported by this dll:
    PathAllocCanonicalize
    PathAllocCombine
    PathCchAddBackslash
    PathCchAddBackslashEx
    PathCchAddExtension
    PathCchAppend
    PathCchAppendEx
    PathCchCanonicalize
    PathCchCanonicalizeEx
    PathCchCombine
    PathCchCombineEx
    PathCchFindExtension
    PathCchIsRoot
    PathCchRemoveBackslash
    PathCchRemoveBackslashEx
    PathCchRemoveExtension
    PathCchRemoveFileSpec
    PathCchRenameExtension
    PathCchSkipRoot
    PathCchStripPrefix
    PathCchStripToRoot
    PathIsUNCEx

So, a bunch of cretinoid functions that deal with paths. More precisely, with strings that represent paths. 100% crapola. Link against this shit, and you’ll kick people out of Windows 7! Oh, of course, only “Windows 8 or newer” have the rocket-science technology of removing backslashes or extensions from a file name!

How about a fix, then?

There is a fix for that, because of one single human on planet Earth. He beat Microsoft. But let’s temporize a bit.

Take a look at these threads on the official Python forums:

Yeah, Guido van Rossum being the archetypal benevolent dictator for life, even after he resigned from this position, he agreed with everyone that there isn’t enough manpower nor rationale to keep supporting Python builds for an OS that’s not supported anymore by Microsoft, yada, yada. If only those retards bothered to get informed what was the useless DLL that created the said OS incompatibility!

👍 Someone did. His name is Alexandru Naiman, and he created api-ms-win-core-path-HACK, a DLL that replicates, for Windows 7, the functionality of the official DLL that cannot run under Windows 7.

This is an implementation of api-ms-win-core-path-l1-1-0.dll based on Wine code. It is made to run Blender 2.93 (specifically, Python 3.9) on Windows 7.

Well, it’s also useful to run Thonny, more precisely the latest “Installer with 64-bit Python 3.10, requires 64-bit Windows 8.1 / 10 / 11: thonny-4.1.4.exe (21 MB).” And many, many other small pieces of software that have nothing to do with Python, but require this DLL because their developers have used the default settings in Visual Studio.

Do what Microsoft wants you to do!

For no reason whatsoever, some people even forked Alexandru’s work, without adding a single byte. Whatever.

But when I think of all those idiots who preferred to hide behind “oh, we can’t support a Windows 7 build because Microsoft doesn’t support Windows 7 anymore!”, and when you realize that they didn’t know that they don’t need to link against UCRT and create this unnecessary dependency of a newer Windows, maybe you’ll finally agree with me that 99.8% of people are dumb shit.

OK, here’s a last explanation, tailored for these 99.8%:

If you believe that you need to target Windows 8/8.1/10 and link against UCRT, but in the end the only dependency that’s incompatible with Windows 7 is a crappy 1-3 KB DLL that only manipulates strings that represent file paths, then you don’t need to target Windows 8/8.1/10, you fucking shitheads!

But again, they will force you

Even people who know how to build Windows 7 software would eventually force you to upgrade to Windows 10, which actually means you’ll be forced to upgrade to that abomination called Windows 11.

Chrome stopped supporting Windows 7 on January 15, 2023. The quick fix is called Supermium. Firefox still supports Windows 7 via Firefox ESR 115, but the updates will end on October 1, 2024. The next ESR release, 128, doesn’t run on Windows 7, 8, and 8.1. Fucktards.

A very last note

Speaking of Windows 7 and its unpatched vulnerabilities. This post has been written on a laptop from 2016 that came with Windows 10 and that has been downgraded to Windows 7 after some 8 months. In August 2021, it was emasculated to have no interference from Windows Defender. It has absolutely zero protection against any kind of malware, and yet, three years later, while being used on a daily basis (with torrents and all kinds of crap), it never got infected by anything. For a while, WSH was disabled, but currently it’s working again.

That’s because I’m not one of those 99.8%. I’m not as sharp as I used to be, but I’m anything but stupid.

Oh, did it ever occur to you that the claimed “vulnerability against the attacks from the Internet” is trumped by the fact that all home routers have a firewall, and unless you DMZ it, “the Internet” cannot attack your computer?

Eventually, I’ll install some Linux on it, but I’m not sure about the distro. In anticipation of that event, I purchased a replacement for the original 240 GB Kingston SSD, a slow and crappy SATA device that somehow uses an M.2 2280 slot. The secondary storage, originally a 500 GB HDD, has meanwhile been replaced with a 1 TB Samsung 860 EVO, but the main SSD must be replaced if I want to keep trusting it. An ADATA Ultimate SU650 (the M.2 2280 version!) will host the future OS, and the EVO will host /home, as I did on the mini-PC (256 GB for the OS, 2 TB for /home) and on the newer laptop (256 GB for the OS, 1 TB for /home).