Email or username:

Password:

Forgot your password?
daniel:// stenberg://

When shown the huge list of operating systems curl runs on, people often ask me which is the strangest, or hardest, operating system to keep curl support for. The answer is always, and will probably always remain: Windows.

No other operating system has so many custom, special, weird and quirky ways that require special-case solutions in the code.

25 comments
Sid (谷思谛) 🐺 soon @38C3

@bagder Are the newer versions of Windows better than the old ones? 🤔 The thing is of course, that there is the Win32 API, which no other OS (except for ReactOS) uses.

daniel:// stenberg://

@autinerd Nah, just different. And in our case, we keep support for a lot of old generations anyway so adding things means adding new code, not removing old...

ocdtrekkie

@autinerd @bagder Bear in mind Windows has a lot of Linux support features now, long file path support, etc. However, because Windows' prevailing focus is backwards compatibility, none of that is enabled by default, and hence can't be depended on. The stock behavior of a lot of Windows things is still rooted in support for Windows 98 and XP era software.

Sid (谷思谛) 🐺 soon @38C3

@ocdtrekkie @bagder Yeah, I know, the backwards compatibility is on the one hand awesome, on the other hand difficult.

ocdtrekkie

@autinerd @bagder I really enjoy the details about like, how Windows devs would special case stuff in Windows 95 to do something legacy when it detected SimCity was running so not to break compatibility with the Windows 3.1 version.

It feels truly alien today to take backwards compatibility to the level Windows traditionally has. Not sure if that's a good or bad thing though honestly.

halikular

@ocdtrekkie @autinerd @bagder Imo software should be light, neat, minimal, and fit for purpose. To cover all needs it rarely ends up being minimal, but for os’s there should be one that most use as their daily driver and focuses on fast development good stability and performance. A second that is for compatibility for ancient commercial software, weird hardware, devices, interfaces etc. Windows 10 doesn’t need the bloat those who need it are on xp. I like nixos as it can be anything you want.

Neal Gompa (ニール・ゴンパ) :fedora:

@halikular @ocdtrekkie @autinerd @bagder That is not commercially viable. You're essentially asking to split a development team in two. And the team that does new things would be starved of resources because the team focusing on compatibility has much more work to do. Ironically, having it in one codebase and one team means you don't do *too much* of the compat work and you balance how much of that you should actually do.

Gonçalo

@bagder the goal of never breaking compatibility is probably not very helpful towards cleanup and modernization.

Multivortex Tornado

@bagder Don't leave us hanging, what kind of weirdnesses, quirkynesses or special cases are the most egregious? We need examples!

daniel:// stenberg://

@DubioserKerl everything from path separators, stupid shells, charsets, to not excepting non-sockets in select, no std libc, ownershipd of memory passed to DLLs, ...

Multivortex Tornado

@bagder "no std libc" There is no libc for windows? I find that hard to believe

PulkoMandy

@DubioserKerl @bagder there is one but it's not following the standard specification when Microsoft decides the standard is wrong. Which they do more often than other systems.

PJB

@DubioserKerl @bagder libc versions on Windows are actually a part of the compiler instead of a fundamental system component like on Linux. This means the MSVC version you use determines the libc version you ship (either statically linking it, or relying on those VC++ redistributables).

This is actually a good thing compared to Linux, because it allows cleaner separation between modules. This is a problem for Flatpak etc on Linux wrt graphics drivers.

Jernej Simončič �

@bagder @DubioserKerl As long as you're not using native (\\?\) paths, / works fine as path separator. But yes to everything else.

PJB

@bagder @DubioserKerl with "no std libc" do you mean that it's not standards compliant like another user pointed out?

halikular

@bagder Then I wonder how consumer gui and 3d graphics software always works so well on windows. It’s always command line software that sucks on windows presumably because cli is much more used on linux instead.

daniel:// stenberg://

@halikular they work fine because they are Windows-only programs written by Windows-only programmers.

ocdtrekkie

@bagder @halikular And CLI software doesn't suck on Windows. The core issue is that basically every OS that isn't Windows agrees on POSIX-like terminals, and Windows does its own thing. So running stuff between Mac and Linux will generally feel fine, but between those and Windows will always entail some sort of compatibility shim. But you can also write CLI software natively for Windows and that works great.

halikular

@ocdtrekkie @bagder This is just one case and might be outdated, but the mpv developer(s) rants more about macos than windows. Mpv which the original root fork was written for linux. github.com/mpv-player/mpv/wiki

I wonder how much code is actually shared between platforms by common open source projects and which platform is hardest to develop for with the most hacks. Windows is hardest for curl, but it’d be interesting to know the rest.

Christian Hujer

@bagder This has also been my experience. Linux and BSD, and anything POSIX-y is usually super-easy to support. Amiga OS is so-and-so. But Windows is terrible. And it says something that Windows is worse than Amiga OS.

Go Up