The little DLL that broke Windows 7 (on purpose)
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!
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:
- Why is there no Python3.11 for Windows7?
- Windows 7 support for Python 3.9 or 3.10, without a fork (Guido van Rossum steps in)
- Api-ms-win-core-path-l1-1-0.dll not found warning using auto-py-to-exe
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.
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
).
Nice post! Thank you for the info.
For the nostalgia, there are still browsers that can run in Windows XP, some targeting even CPUs older than Pentium 4, that are actively maintained.
One of them is Mypal68. Others can be found here.