There are two ways to read "Windows Subsystem for Linux":
1. This is a subsystem that runs on Windows that enables Linux binaries.
2. This is a subsystem that runs on Linux that enables Windows binaries.
The confusion comes in the fact that when I write those two sentences, I naturally want to write "This is a subsystem FOR Windows..." or "This is a subsystem FOR Linux... ." I had to consciously avoid using "for" in that sentence to highlight the problem.
So when someone who doesn't know what the thing does reads "Windows Subsystem for Linux" they may walk away with the false impression that the subsystem allows Windows binaries to run on Linux. Likewise, what you're seeing now is that people are seeing "DOS Subsystem for Linux" and thinking that this enables you run DOS on Linux.
And of course WSL2 isn't a subsystem anymore, but is stuck with the product name. ¯\_(ツ)_/¯
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.
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.
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.
[0] https://twitter.com/ericlippert/status/1205372172534874112
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.
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.
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
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.
- vs -
Windows Subsystem (for Linux)
is probably closest to WSL1’s intent.
It was a Windows subsystem (the first new one in years), and its goal was to let you run Linux apps.
"Windows Subsystem for Linux"
-----
Is the 'windows subsystem' for linux?
or is the 'subsystem for linux' a windows branded feature?
If you asked most people they would probably choose incorrectly.
Linux Subsystem on Windows
Linux Subsystem in Windows
They used to have a product called Windows Services for UNIX [1] which was, you guessed it, UNIX Services for Windows: NFS, Telnet, cron, rsh, etc.
"Windows' Linux Subsystem" might have been better as well (WLS), using it as a posessive statement, or "Windows' Subsystem of/with Linux" which would keep the same WSL abbreviation.
The suffix "for Linux" strongly implies it's software for use on Linux. It's like the "4j" and "4win" suffixes, implying software built for the Java and Windows environments, respectively.
What's more, Windows or DOS as an adjective of subsystem bind more tightly than "for Linux". So if you were to start dropping parts of the name, you'd drop "for Linux" first. Except you can't, because then it's just the Windows Subsystem.
LSW would have been a much more natural name. In a conversation about Windows subsystems, you could refer to it as the Linux Subsystem. If other operating systems picked up on the idea, they would have their own Linux subsystems, e.g. Linux Subsystem for macOS. If you wanted to check if your OS had anything like it, you could search "is there a Linux subsystem for FreeBSD?" Which might turn up results about the Linux ABI in FreeBSD. Speaking of which, imagine if it had been named the FreeBSD ABI for Linux. What an awful pattern! You can't even repeat the pattern unless both modifiers are proper nouns! Could you have called the VFS Subsystem the "FreeBSD Subsystem for VFS"?
This is why we teach sentence diagramming in elementary school.
Maybe the person who came up with "WSL" wasn't a native English-speaker?
In this case, the context known to the speaker but often missed when trying to "sentence diagram" WSL involves the part "Windows Subsystem". That referent, to which the original author was quite familiar, is invoked in WSL as a single noun in part of the larger noun phrase, and while you could continue to sentence diagram break "Windows Subsystem" into constituent parts here, it is important to remember it as a single connected "atom" to which "for Linux" modifies in the overall noun phrase of "(Windows Subsystem) for Linux". Given that context/referent, the sentence diagram here is unambiguous to the original team/"speaker". It's the audience with much less familiarity with the referent/context in question that has ambiguity problems in trying to "sentence diagram" the noun phrase.
My belief (!!), back then, was that it was intentionally named confusing. Back when it came around, Microsoft was under scrutiny for monopoly behavior. They didn't want Windows to be compatible with Unix in any way; they wanted the world to run Windows (9x, NT) only. That was my belief/theory, as it is now I don't have anything to back it up as it is though. Your theory might equally be viable.
The "problem" is that these products are not what you automatically assume they are!
To illustrate: SFU provided NFS and NIS servers, a cron daemon, a telnet server, and various CLI "utilities" (i.e., standard "services" provided by "UNIX") running on Windows -- not Windows services that run on UNIX!
Once you know that, the "Windows Services for UNIX" name kinda makes sense and helps to understand what the "Windows Subsystem for Linux" and, now, the "DOS Subsystem for Linux" actually are.
---
[0]: https://en.wikipedia.org/wiki/Windows_Services_for_UNIX
Usually, saying "for Linux" or "for Windows" about something means there's a thing that is for (or "to run on") Linux or Windows, not that the thing is "of" Linux or to enable the use of Linux. I appreciate there are two ways to look at the semantics, but the one they picked for WSL seems the least common one to me.
Instead it’s seemingly meant to be parsed inside-out with “subsystem for Linux” as one noun indicating a subsystem that runs Linux apps, and DOS as an adjective describing that noun. Maybe wsl did it to keep the windows brand first? Are there many other “windows subsystems for Y” out there and this is a Microsoft-universe term? I don’t know but it’s very strange.
If the project maintainer is reading, it would be super helpful to put that at the top of your REMADME.md. I'll even send you a PR. FTR it's not your fault the terminology is confusing :-)
Besides, latest WSL is not like that anymore, it's a hypervisor running a VM now.
1. It's for Linux (so Linux is the host).
2. It creates some subsystem that runs DOS (either emulated, virtualized or translated like Wine is doing for Windows on Linux).
That can allow running DOS games on Linux for example, instead of using DOSbox for it.
maybe it could be phrased as "for those who want linux but need to run DOS as their main OS"