Odpověď na názor

Odpovídáte na názor k článku Wine a Proton už spustí 90 % her v Linuxu. Potřebujeme ještě Windows?. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.

  • 24. 11. 2025 2:11

    Lael Ophir

    1. Ano, Microsoft udržuje kernel ve WSL2. Jenže WSL2 je tak trochu Frankensteinovo monstrum. Windows a Linux mají například své vlastní FS, a k druhému OS přistupují před redirector, řekněme jako na síťové sdílení. GUI se řeší tak že se na Linux přistupuje pomocí RDP, řečeno dosti zjednodušeně. Jasně, funguje to, ale nestavme to tak, že jde o dva rovnocenné kernely, protože nejde.

    2.A. Windows se nespouští ve virtuálce pod Windows. Windows běží jako root partition, což není totéž.

    2.B. User space libraries ve Windows volají Windows kernel. MS by musel napsat user space libraries pracující nad Linux kernelem, a u toho ten kernel opravdu výrazně obohatit o dlouhou řadu API, které dnes prostě nemá. Pro ilustraci, Windows kernel nabízí asi 2000 různých syscalls. Otázka je proč MS ztrácel zdroje na rozšiřování Linux kernelu a reimplementaci svých user space libraries, jen aby na konci měl to co už dávno má. Taková investice jako migrace z NT kernelu by měla smysl jen pokud by přinesla něco řádově nového, a to Linux těžko může nabídnout. MS migraci odmítl dokonce i migraci na Midori, která by něco nového přinést mohla, protože by toho přinesla málo vzhledem k úsilí, a přinesla by řadu problémů.

    2.B. Myslíte že by zákazníci ocenili třeba nestabilní kernelové API/ABI? To by vedlo například k nutnosti upgradovat third party drivery pro každý nový release kernelu, jako na Linuxu.

    3. Ano, knihovny Wine implementující část Win32 se v řadě případů dají nahradit originálními knihovnami. Jenže ty nakonec volají user mode funkce ntdll.dll, které propadají na Windows kernel pomocí syscalls. Například standardní kernel32!Crea­teFileW provede nějakou normalizaci cesty apod., a zavolá ntdll!NtCreateFile, což je wrapper který zavolá syscall NtCreateFile. Myslíte že můžete triviálně nahradit ntoskrnl!NtCre­ateFile pomocí linuxového open()? Nemůžete, protože fungují v detailech dost odlišně. Stačí si přečíst třeba jen dokumentaci v Win32 Naming Files, Paths, and Namespaces, a tam zjistíte že Windows mají hard links, junctions, reparse points, alternate data streams a namespaces. "\\?\Volume{8d0ad23a-470b-4c70-a225-2ad14a6a739d}\" může být třeba vaše vložená USB klíčenka; spusťte si někdy WinObj ze SysInternals Suite a pokochejte se, najdete ta i drivery zařízení které se také dají otevřít přes CreateFileW. K tomu přičtěte zamykání souborů, což je kapitola sama o sobě, a ACL. Většinu toho všeho Wine ignoruje, což je u hry každému celkem jedno.
    https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file
    https://learn.microsoft.com/uk-ua/sysinternals/downloads/winobj

    Jak říkám, může se to zdát jednoduché, pokud se nezačnete podrobněji dívat, o čem je vlastně řeč.