Parallel toolchain universes: three-step Linux vs Visual Studio's descent into madness
Description
White background meme with plain black monospace text. Top block reads: "linux toolchain" followed by a numbered list: "1. install packages", "2. compile", "3. run". After a blank line, second block reads: "windows toolchain" with list items: "1. install visual studio 2022" and "2. WELCOME TO HELL, BITCH." - the last line is fully capital-lettered for comedic aggression. Visually minimal yet highlights stark contrast: Linux development perceived as straightforward CLI package install, compile, execute; Windows workflow caricatured as enormous IDE install leading to complexity, bloat, and configuration purgatory. Resonates with senior engineers who have wrestled with MSBuild configurations, SDK workload sprawl, and 30-GB installers versus a simple `apt-get build-essential && make` flow
Comments
92Comment deleted
Linux: `sudo apt install build-essential && make`; Windows: “First, reserve a weekend for the Visual Studio installer to finish, then debug why MSBuild thinks x64 is an exotic architecture.”
After 20 years in the industry, I've learned that Visual Studio's installer size is inversely proportional to your will to live, while its dependency graph complexity rivals the observable universe's entropy - and somehow, you'll still need to manually configure environment variables like it's 1995
The real difference isn't the three steps versus two - it's that Linux's step 1 takes 30 seconds with apt/yum/pacman, while Windows' step 1 involves downloading 8GB of Visual Studio, wrestling with Windows SDK versions, configuring MSBuild paths, debugging why vcpkg won't find your libraries, and questioning every life choice that led you to need native Windows compilation. By the time you reach step 2, you've already experienced the five stages of grief and discovered three new ways CMake can fail on Windows
Windows: where cl.exe is easy to install and impossible to find; LNK2019 is just MSBuild’s love language
Linux: O(1) setup time. Windows VS installer: Amortized over your career in reboots
Cross‑platform standup: "Support Windows?" Sure - after a 3GB installer, finding cl.exe in the Developer Prompt, picking the right v143 toolset/SDK, and scheduling an LNK2019 exorcism
windows toolchain: ziglang.org Comment deleted
2022 is a bit modern, I remember having to install 2016 and 2010, even for modern software and god forbid I install a slightly wrong version Comment deleted
windows toolchain: winget install LLVM.LLVM # compile # run Comment deleted
LLVM.LLVM 🌚 why not org.LLVM.LLVM.package.distribution? Comment deleted
better windows toolchain: wsl 1. install packages 2. compile 3. run 😁 Comment deleted
Except it doesn't support POSIX so if you need signals for anything you're fucked Comment deleted
Source? Comment deleted
Windows/Unix documentation Comment deleted
And how does this relate to the WSL2? 🤨 Comment deleted
I'm a ReactPHP dev. It doesn't support the proper POSIX.2 signals under either WSL1, WSL2, or Windows directly so basic functionality doesn't work. Things like child processes and sigterm are completely unavailable. Comment deleted
Can't you just install the PHP inside WSL completely? Or use Docker for PHP (in WSL or not)? I'm not a PHP dev so can't relate, but want to investigate 😁 Comment deleted
Gotcha. Signals and related APIs for your tasks exist inside WSL2 only, but if you run PHP directly on Windows it lacks support for POSIX features and interaction between Windows and WSL, which introduces inconsistencies (?). So, it's possible for you to use PHP directly in WSL2, but it doesn't address your concern because the problem is all about the POSIX-compliant process handling... You may be technically correct here Comment deleted
Something's off... That should literally not be true. If you work entirely inside the WSL2 environment, your ReactPHP applications should function without any issues because the WSL2 kernel is fully POSIX-compliant, shouldn't they? However, if you're trying to interact between Windows (which lacks POSIX compliance) and WSL2, then of course you would run into problems. Am I wrong here? Could you elaborate? Comment deleted
There many showstopping issues, you should start looking into the compatibility issue for https://github.com/reactphp/child-process and it'll quickly open the door to the others Comment deleted
🤔 Comment deleted
The notes are incorrect. Clue states in the issues that he does not develop on Windows Comment deleted
I’m not a PHP dev, so I can’t verify the points you’re making. Therefore, I’ll trust your expertise. Let’s leave it at that. Thank you for the information! Comment deleted
WSL2 literally runs a real Linux kernel inside a lightweight VM Comment deleted
In vscode they even added "code" at the end to indicate that the IDE is now actually suitable for development Comment deleted
Its not tho 😭💀 vscode is absolute shit and only suitable for web dev stuff Comment deleted
What's wrong with vscode? Comment deleted
Everything Comment deleted
At least it's not vim Comment deleted
You forgot about NET. Framework vX.Y🙃 Comment deleted
god I hate .NET Comment deleted
.Net is heluva drug🤓 C - shoot urself in the foot C++ - blow your head off C# - murder your entire company with interop Also: C union [StructLayout(LayoutKind.Explicit, Size = 8] public struct AUnion { [FieldOffset(0)] public int x; [FieldOffset(0)] public double y; } Not even the latest VS will hint to this struct's consumer what is up Comment deleted
This is because you have to exchange parameters between managed and unmanaged code. There are conventions in compilers how this is done. .NET is managed and uses it own conventions (MSIL) like many other managed languages. There are many advantages to why. In order to be able to do fancy things and call CLI functions you can use attributes in code to hint the .NET Interop class how it should align managed type's values to be passed to the cli function. Comment deleted
Umm...ikr? (If i did not know that then i wouldn't be able to write that struct that is packed like a C union) Comment deleted
Then I dont get this reference? Whats missing? Comment deleted
Well, if VS and NET is hell for the author... what a nightmare should be java for him then? Comment deleted
Java has Intelij IDEA Comment deleted
yep, so I can wait 2 sec lag after each key input, thanks. Comment deleted
Buy a better cpu Comment deleted
yeees, partake in consumerism Comment deleted
The only way not to is to buy a risc-v cpu Comment deleted
wha? that's still consumerism Comment deleted
I mean, less of it is going to some rich assholes, but still Comment deleted
That's open source at least. What's your solution, NOT having literally anything? Comment deleted
yep. go to the woods. pick up a frog. a great time for everyone! Comment deleted
Never had that problem, even in a 6th Gen U series intel Comment deleted
And NET has Rider And Python has PyCharm And Rust has RustRover And... Comment deleted
java is a hell I don't want to be trapped in ever again and I'm saying that as my current main job is writing object-oriented php Comment deleted
my condolences Comment deleted
still meaningless repetitions. is there another LLVM package? Comment deleted
Clangd Comment deleted
are there two clangd packeges? Comment deleted
I think on Winget clangd is llvm.clangd and all the other stuff is llvm.llvm Comment deleted
and they have no name collisions on any other system, but have to be placed inside of a namespace for some reason. Comment deleted
LLVM can be installed with winget with just winget install llvm, he's true. it's my own thing to use the full package ID when installing something with winget. that's all Comment deleted
\ Comment deleted
You do not understand what POSIX is if that's your argument, please Google first Comment deleted
Bruh Comment deleted
WSL2 is a VM running a Linux kernel, not POSIX compatibility for Windows Comment deleted
Ofc it's not. So what? Comment deleted
Linux toolchain 1. Install packages (3 days later....) 2. compile.. Comment deleted
dial-up or gentoo? why so long... Comment deleted
If we are talking about Gentoo - forget what I said about 3 days. It can take much more... Comment deleted
just put a nix on top of it :) Comment deleted
also, binary cache exists now, if you don't want to tweak your USE flags Comment deleted
This is why I code in assembly Comment deleted
which one Comment deleted
I still have no idea how to compile assembly on Windows Comment deleted
Do I just use nasm? Comment deleted
step 1. open browser step 2. google "how do i replace windows with linux" Comment deleted
that usually requires admin privileges 😬 Comment deleted
you dont need admin privileges if you can just switch the drive Comment deleted
okay, I still need physical access Comment deleted
that doesn't tend to work well when writing malware 🙂 Comment deleted
well then use https://lekkit.github.io/test/index.html Comment deleted
the fuck is this Comment deleted
jesus... Comment deleted
is that wasm? Comment deleted
wow Comment deleted
RVVM on WASM demo Comment deleted
nahh why do they remap the keyboard layout 💀 Comment deleted
direct input Comment deleted
Requires only a notepad (optional) and working computer Comment deleted
Also, Windows toolchain: 1. Google the installer 2. Click the right link, avoid clicking on links that pose as your tool but are malware 3. Run the installer, be hand-held tough a long, tedious process. 4. While going through, make sure to (un)-check any boxes that would lead it to install malware along your tool 5. Restart your computer. Don't ask, just do it. Windows might need to update for 20 mins too 6. Your tool is most likely installed, you may need to open a terminal to add it to PATH Comment deleted
what does any of this mean Comment deleted
I wouldn't expect that to be a thing on developer-oriented software Comment deleted
Are you speaking from experience or parroting a meme? Comment deleted
Probably Comment deleted
Man, Linux is easier to install software on Comment deleted
HAHHAHAHAHAHAHA Comment deleted
VS is definitely the best Comment deleted
And consumerism isn't bad Comment deleted