first things first:
1. you said wsl is not the linux kernel.
how it can execute native linux modules?
eaven it supports unix-specific file systems
(you can compile linux kernel under windows for execution on windows)
it's not linux on windows (it is impossible to run linux beside windows without a vm due to things like gdt, irs etc which is set durring the os initialization)
other than those, wsl is the most emulated kernel on windows
You entirely missed my point. WSL does not execute Linux kernel modules. It can't. Period. It doesn't run the Linux Kernel; that's impossible (you can't run two OS kernels simultaneously on bear metal without one being within a virtual machine or a virtualized environment). Second, you asked how it runs ELF files. That's simple: ELF isn't necessarily a "file format". Its a specification of a file format. ELF stands for 'Executable and Linkable Format'. ELF programs can be ran under WSL because Microsoft and Kanonical implemented the specification for its execution. (The specification can be found here for the original specification published on March 18, 1997 and here for the October 2009 update. The System V ABI, AMD64 Supplement, ELF ARM specification and System V ABI, Intel386 Architecture Processor Supplement/Itanium Software Conventions and Runtime Guide (September 2000) may also be of use to you.) As for Unix-based file systems, again, more of a specification than anything else. Like I said in post 15, WSL is more like a docker container than a full Linux environment.
2. you said it is closed source
linux kernel by itself is open source while the other modules written for it might be closed source (which is not needed to be open source)
secondly, what you get from reading the source? you want to write another linux on windows?
I can't see how I was ambiguous here. I specifically said that WSL was not open source. I said that was bad. Nuf said.
3. why i need those (linux-specific softwares)
my reason is, linux can execute those because those are for linux (and i need them) while cygwin on windows cant because cygwin applications are windows applications dependent on cygwin1.dll which should completely be executed on cygwin itself because cygwin's shell sets the path to where cygwin1.dll exists
also when you want to execute an application under cygwin, you should recompile that
You don't always need to recompile apps for them to run on Windows (some GNU packages provide windows binaries, for example). And you usually don't need to compile most apps you want to run under cygwin; most of them are already compiled for you. Also, clearly, you have no idea how DLL loading works. DLL loaders do not depend on externally set environment variables to find DLLs. They use trused environment variables (like the first few paths in the PATH variable, for example) and leave it at that. They'd never search the entire PATH environment variable otherwise apps would take much longer to load. Secondly, a DLL loader will first check the apps currently existing directory, and (perhaps) its surrounding directories (that is, the directories within the currently running directory and the directory up one level) to find a DLL, and then it will search known paths to find it. If it can't find the DLLs the app needs in any of the paths it tries it raises an error which the application can choose to ignore). The other way a DLL can be loaded is through a call such as dlopen()/LoadLibrary(). However, these library calls are internal to the application and question and are not usually called when the DLL loader is first executed just before the application starts and main()/WinMain() is called.
4. you said you can execute linux applications on windows and install app packages on cygwin
ok, go and execute this command and tell the results here:
apt-get install terminfo wget
ok, cygwin is not based on debian, and we think it like redhat's CentOS:
yum -y install terminfo wget
Please tell me where I said this. I nowhere said that you could ever do this (though I know of a Cygwin package manager that works like apt/apt-get called apt-cyg).
5. you said its buggy
does being buggy mean it's impossible to use?
although it has an issue tracker for reporting bugs on github
I said it was buggy. I never said it was unusable; just that it was buggy and what averted me from it was that I couldn't update it without seriously breaking it horribly.
6. about the speed, i didnt test that so i cant tell you anything
7. about installation of the packages:
the connection speed and ping time also changes the speed
although at least for me thats not important
Yes, connection times change this, but connection times are pretty much irrelevant during compilation unless your makefile or CMake module downloads files over the internet, which is very uncommon.
"On two occasions I have been asked [by members of Parliament!]: 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out ?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question." — Charles Babbage.