Hacker News new | ask | show | jobs
by detaro 2097 days ago
The WSL terminology really only makes sense if you are aware that Windows has the concept of subsystems - and which is why swapping other labels makes even less sense. I.e. the run-Windows-on-Linux thing would probably not be called Linux Subsystem for Windows, because what is a "Linux Subsystem"?

And of course WSL2 isn't a subsystem anymore, but is stuck with the product name. ¯\_(ツ)_/¯

6 comments

A "Linux subsystem" is a Linux system that is a part of a bigger system. And "Linux audio subsystem" is an audio system that is a part of Linux. And if you swap the words, you get "audio Linux subsystem" which doesn't make sense, not really.

So the proper name would be "Windows Linux subsystem", but I concede that it does sound really weird (because both Windows and Linux are the same kind of things, they're OSes).

And of course, if it was named "Windows's Subsystem for Linux", there would be much less confusion, but apparently the English for some reason doesn't use the possessive case here (although that's the perfect place for it) and prefer to use the noun as a possessive adjective.

This is helpful, but the composition rules are weird and confusing.

It's true that a Linux Subsystem is a subsystem of Linux, but an "X for Linux" is a component of Linux or an application for Linux.

When you put them together, it seems that the "for" wins the battle. In parsing terminology, it has lower precedence (though I'm sure the actual rules of English are more complex than that indicates).

I'd love to see an actual linguist comment on why this phrase is so confusing.

I have an English degree and can confidently say the issue is the implicit understood possessive in the correct parsing. As it stands, “for” dominates mentally because the phrase obviously needs a possessive to make sense and “for” denotes possession. If it were “Window’s Subsystem for Linux” or “DOS’s Subsystem for Linux”, explicating the proper possession, the parsing trouble would disappear.
So would just saying Linux subsystem for windows.

Which was raised when this name came up but they didn't like that Linux came first so went with gymnastic language instead.

Its even more obvious with this new name.

Its a Linux subsystem for DOS.

You could use the possessive form here: "Windows' Subsystem for Linux", but that's not a thing product managers like to use in naming...
It probably had an internal name like "winix" or "lindows" - but PM took the reins and came up with a much worse name, as is tradition.
Oh yes. My favourite example is [0] (and the parent twit).

[0] https://twitter.com/ericlippert/status/1205372172534874112

Oh, true, Linux actually uses the term in that context, somehow didn't think of that.
> And of course WSL2 isn't a subsystem anymore, but is stuck with the product name

Even WSL1 is not a classic Windows NT subsystem. Its implementation (picoprocesses) is quite different from that of the classic Windows NT subsystems (Win32, OS/2, POSIX/Interix/SFU/SUA). The classic Windows NT subsystems all involve using ntdll.dll to make NT syscalls; WSL1 processes make Linux syscalls and can't actually make NT syscalls or call ntdll. There is nothing technically stopping an OS/2 1.x executable from realising that it is running on NT and start talking to the NT kernel using the normal NT API; by contrast, a Linux executable running under WSL1, even if it detects it is running under WSL1, isn't allowed to talk to the normal NT kernel interfaces.

Aren’t you describing personalities instead of subsystems?
Windows NT user mode code is divided into programs and subsystems.[1][2] Programs are the actual applications/utilities/etc you run. Subsystems are OS components executing in user mode, generally composed of DLLs and server EXEs which expose LPC services (a little bit like Unix daemons).

There are two types of subsystems – environment subsystems (which provide APIs to programs) and integral subsystems which provide services to the environment subsystems. Integral subsystems include the security subsystem (lsass.exe). (Sources are a bit unclear about whether there is one "integral subsystem" composed of multiple parts, or multiple integral subsystems – e.g. are lsass.exe and smss.exe separate integral subsystems, or two subsystems of the integral subsystem???)

There are three environment subsystems in Windows NT – Win32, POSIX and OS/2, although the latter two have been discontinued in newer versions. The design was always open to adding more (e.g. maybe an OpenVMS subsystem) but that never happened in practice. (Win32, despite its name, doesn't just run Win32, it also runs Win16 and DOS; also, in practice the POSIX and OS/2 subsystems were dependent on the Win32 subsystem and borrowed functionality from it, despite in theory being independent of it. csrss.exe, despite having "subsystem" in its name, is not a separate subsystem, but rather the primary LPC server for the Win32 environment subsystem.)

The term "personality" is sometimes used to describe the environment subsystems, but it is not the term the Windows NT developers used. The term "personality" actually comes from Mach. The idea with Mach was that existing operating systems could be ported to run on top of the Mach microkernel through layers called "personalities" which would map the existing OS API to the underlying Mach API. The original CMU Mach team built such a layer for BSD Unix – the BSD personality – and it actually survives in XNU (macOS/iOS/etc), but they never implemented any other personalities. However, IBM's abortive Workplace OS project actually did implement an OS/2 personality for Mach, which could run alongside an AIX personality, so they actually got closer to delivering on CMU's original vision (albeit the whole project was cancelled before being fully released.) Possibly, NT's environment subsystem idea took some influence from the Mach personality concept; plus, outside observers quickly noticed the similarity between NT environment subsystems and Mach personalities, and started using the term "personality" for the former; but it has never been the officially preferred terminology for Windows.

I've never heard anyone call WSL1 an "environment subsystem". Its method of implementation is very different from the classic NT environment subsystems. You might call WSL1 or WSL2 "personalities", but as I said that's never been official Windows terminology.

[1] https://en.wikipedia.org/wiki/Architecture_of_Windows_NT

[2] http://vig.pearsoned.com/samplechapter/0201791064.pdf

I was under the impression that the name arose out of trademark requirements.

https://news.ycombinator.com/item?id=14093517

Windows has had subsystems since the OS/2 era, and WSL1 was actually such a subsystem. Initrix was the Microsoft POSIX Subsystem.
There was a POSIX subsystem in Windows NT before Microsoft acquired Interix (which became Windows Services for Unix).
Yes, but the name "Linux Subsystem for Windows" would have been much less confusing.
WSL1 isn't actually an NT subsystem like Interix was.
Could they have just called it the Windows Linux Subsystem?
I assumed it was marketing. They didn't want to put the other guy's name first.
And if you think "Windows Subsystem for Linux" is bad, the subsystem that enables the Win32 API is csrss or "Client/Server Runtime Subsystem" and it makes you think: why does that subsystem not mention Windows but the Linux one does?
I have to assume the answer to that question is marketing. They really want to hammer into you that you're running Linux on Windows.
Agreed. "Linux on Windows" is more clear to me.

The "on Windows" part makes it clear that Windows is the host OS.

Many Microsoft's past products used "for $PLATFORM" in the product name. For example:

Microsoft Word for Windows

Microsoft Word for DOS

Microsoft Word for Mac

It makes it clear that it was the version of the product FOR a given platform.

At first glance "Windows Subsystem for Linux" seems like Microsoft's version of WINE.

Maybe we'll get a real "Windows Subsystem for Linux" when the desktop version of Microsoft Linux arrives.

Better choice would have been "Subsystem for Linux on Windows". Its all indeed a big naming confusion
It still doesn't even make sense when you know about Windows subsystems though. True, it is a "Windows subsystem" in Windows terminology, but from my native-English speaker point of view, it's not "for" Linux in the way that the word "for" is used in standard English.

It does work if you assume it's a shortening of something like "Windows Subsystem for Running Linux Applications (on Windows)"

But I get that naming it is a tricky problem, because even a technically accurate name like "Windows Linux Subsystem" (after the old 'Microsoft POSIX Subsystem' name) is still confusing.