To není hoax, takhle funguje WSL 1 (Windows Subsystem for Linux). Aplikace volají knihovny OS, a ty v případě Linuxu komunikují s kernelem skrze signály. Microsoft udělal vrstvu, která tyto signály převádí na volání jádra NT. Můžeš si to představit jako WINE, akorát ten je o úroveň výš - převádí volání knihoven OS (NT jádro je tak navržené, že se nevolá jádro přímo).
EDIT: POSIX vrstvu má Windows někdy od NT 4 nebo 2000.
26. 1. 2024, 18:20 editováno autorem komentáře
>Bola tam na to, aby Microsoft a partneri mohli v obstaravaniach deklarovat podporu POSIX.
Přesně tak. Protože to tehdy vyžadovala americká vláda, která byla pro Microsoft potenciálním velkým zákazníkem.
Bohužel, ta podpora POSIXu ve Windows ani zdaleka nebyla kompletní. Specifikaci (FIPS 151-2) sice splňovala, ale nic víc. Ačkoli následně vznikl software od třetí strany určený pro portování UNIXových aplikací na Windows NT, bylo to těžkopádné a problémové řešení. Následně v době Windows XP/2003 Microsoft toto řešení třetí strany koupil a rebrandoval na "Windows Services for UNIX", otázkou však je, jak velké popularitě se toto řešení těšilo (sám jsem jej zkoušel používat a příliš mne nenadchlo). S vydáním Windows 8.x byla podpora Services for UNIX ukončena, ovšem pozůstatky původního POSIX subsystému zůstávají v NT kernelu dodnes a podle všeho právě na něm je založen "moderní" WSL 1.
Ono se rika ze je snadnější portovat cely interpret stélku než samotný shell script. Tady se ukázalo ze je jednodušší emulovat cely HW než několik syscallu .
S timhle problémem se pojí několik bugu a cele je to dost brutální mmap msync, truncate souboru a k tomu ještě zarovnavani/zaokrouhlovani stránek v paměti. Jde to to co uvidí v paměti druhy proces když první proces provede tyhle operace a zatím to vypadá ze NT memory Management tohle nedokáže emulovat.
Na straně libdbm to taky nikdo nechce řešit protože se to už moc neudrzuje a v tom je kódu už je teď milion hacku pro různé jiné Unixy. Posix nejde do takové hloubky aby to bylo skutečně přenositelne.