Tak možná to mohli nazvat jinak a to už by tolik nevadilo, že jo :)
Ono pokud není jiná cesta, tak toto není špatné řešení. Popř. to navrhnout tak aby i jiné knohovny z toho mohli profitovat. Né všechno co má Windows je špatné...
Jo, příště by někdo mohl chtít dát po naběhnutí jádra přehrát tu melodii při startu z Win95! :-D
No nevím, myslel jsem si, že kvalita kódu se posuzuje podle kódu a ne podle toho, kdo jeho změnu navrhl. Je to docela podobná argumentace jako že všichni imigranti jsou špatní, protože jen my zde v ČR víme, jak se správně žije a vůbec tu nemáme žádné zloděje a vrahy...
Kvalitně udělaná interoperabilita s Win aplikacemi je pro Linux podstatná funkcionalita. Jinak teda předpokládám, že ovladač bude formou modulu, který lze v /etc/modprobe.d/blacklist blacklistovat.
Tuhle argumentaci nechapu. Chcete na linuxu provozovat aplikace z Windows? Tak provozujte Windows.
Nechapu tyhle snahy na jiny platformy implementovat jiny operacni systemy.
Nechci nic říkat, ale vypadl ti tam ten Linux.
A ono je to oboustranné - ve windows je taky nějaká Linux vrstva.
A je to tu.
Mrkvosoft v oknách začne používať jadro linux a kvôli kompatibilite sa robia prípravné práce..
Pochopitelně píše nesmysly, ale s videem nechť se taky všichni jdou vycpat :-) Dnes přijde juniorní programátor a místo toho, aby si za deset minut projel dokumentaci sleduje dvě hodiny videa.
Spuštění kódu z Cashsoftu v linuxu je dost zásadní... protože ty dva světy bez sebe nemůžou být a co potřebuješ na linuxu, tak potřebuješ i na Win. Postupně ovšem je dost možné, že celá Win éra přejde pomalu do linuxu....
A první co udělá uživatel z Win na linuxu, tak se naží spustit něco z Win... A Wine za poslední 2 roky udělal obrovský evoluční krok a šlape dál a dál. Program Wine neklapává už i jiným emulačním programům (né ve všem, ale jde pomalu na to).
Je vtipné, že kolikrát pod emulací Wine program z Win funguje lépe a stabilněji než na nejnovějších Win....
tipuju ze to tak 10 let co letel svetem hoax, ze nekdo ohnul linux vzal jadro windows nt, nad to dal posix vrstvu a gnu+linux userspace.
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
Ta POSIX vrstva není nic extra - první portace Postgresu na Windows NT byly založené na POSIXu v NT, nicméně nakonec se z výkonnostních důvodů stejně přešlo na nativní API.
POSIX vrstva v NT nebola na to, aby ju aplikacie pouzivali. Bola tam na to, aby Microsoft a partneri mohli v obstaravaniach deklarovat podporu POSIX.
>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 ani to WSL1 není kompletní. Chybí tomu korektní implementace mmap. Bez toho nepoběží žádná rozumná databáze ani libdbm, a na libdbm je založena databáze rpm balíku, a bez rpm na tom nebezi polovina distribuci
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.
To je docela fajn, protože ty windowsí synchronizační mechanismy (WaitForMultipleObjects a příbuzné) vůbec nejsou špatné. V linuxu se nahrazují docela neohrabaně, navíc s dopady na výkon. Možná by to mohly v budoucnu používat i normální linuxí softy.
27. 1. 2024, 12:13 editováno autorem komentáře
Hlavní problém bude to nt v názvu. Když Apple pro hardwarově akcelerovaný emulátor Rosetta 2 potřeboval v ARM ISA režim zaokrouhlení z x86, tak instrukci pojmenoval jako JavaScript rounding, protože JS chování tehdy převzal podle majoritní (prakticky jediné) architektury.
27. 1. 2024, 14:21 editováno autorem komentáře
Toto ale není pravda.
fjcvtzs a cvttsd2si mají úplně jinou sémantiku. fjcvtzs dělá wrap-around, cvttsd2si dělá truncate, ale není wrap around.
V X86_64 se pro konverzi double -> int32 v JS použije [v]cvttsd2si s 64-bit GP registrem a použije se jen těch 32 spodních bitů, tím se docílí ten wrap-around, ale je to spíš chytrý hack než feature.
Takže, fjcvtzs nemá nic společného s X86.
Já vidím problém právě v tom využití někým jiným. Toto je podpora jen několika funkcí způsobem, který se hodi specificky Wine. To z mého pohledu není úplně kandidát na přijetí do upstreamu. Ale je to izolovaný driver a ničemu to neuškodí, nevím.
27. 1. 2024, 19:30 editováno autorem komentáře
Neznám podrobnosti, ale měl jsem za to, že epoll_wait() je v podstatě totéž co WaitForMultipleObjects(). Ale pokud má tohle nějaké výhody, třeba by se to dalo využít pro různé async runtimy.
Bohužel v podstatě totéž nestačí, musí to být identické. Jinak se musí použít softwarová emulace a čím novější hra, tím víc dat načítá (streamuje), tím pomalejší.
Myslím, že velmi dobrou tradicí linuxového jádra je nepřidávat do něj jednoúčelové věci či věci sloužící jen jedné konkrétní aplikaci - a na místo toho vymyslet nějaký obecnější mechanismus, kterým se požadovaná věc dá implementovat, ale možná ještě spousta dalších.
Krásným příkladem budiž snaha dostat do jádra kontejnery, ze kterých se nakonec vyklubaly namespaces, které jsou užitečné i na mnoho jiných věcí (aplikační sandboxy, emulace síťových topologií a mnoho dalšího).
Jiný příklad byl třeba ashmem z Androidu (potřebný pro běh emulačních vrstev typu Waydroid - tedy podobný případ jako tady u wine). Nakonec byla místo slepého přijetí této jednoúčelové věci přidána potřebná funkcionalita to memfd, což je daleko obecnější mechanismus, a Android userspace se to naučil používat.
Doufám, že i v tomto případě to dopadne podobně.
Takže podpora Android aplikací není jednoúčelová a Windows aplikací je? Myslíte, že ten memfd bude třeba za 5 let používat aspoň jedna další aplikace? V jádře je mraky různých typů synchronizací, není žádná "ta jediná správná pro Linux". V monolitickém jádru to jinak udělat nejde. Aspoň že je to jako driver modul, tj. kód se vám nemusí zavádět, dokud si neřeknete.
Memfd je hodně užitečná věc, kterou dnes používají i prohlížeče a další SW, který potřebuje JIT (třeba javascript runtime). Není to rozhodně jednoúčlová záležitost.
Je to spíš naopak, když není memfd k dispozici (různé BSD, atd...), tak se to musí dělat oklikou, a není to hezké...
Zrovna ta synchronizace ve Windows, pokud by byla implementována rozumně uceleně, je obecná dost. WaitForMultipleObjects a její příbuzné jsou skvělé obecné funkce, protože (ve Windows) do nich můžete strčit cokoliv, co disponuje signálním stavem (event, mutex, process, thread, file/pipe/socket, semaphore, ...).
Souhlas, WaitForMultipleObjects() je hodně užitečná věc, a taky hodně univerzální a zrovna ve Windows se používá úplně všude.
V Linuxu ale taky vzniklo hodně zajímavých věcí. Třeba Futex byl v Linuxu mnohem dřív než ve Windows a Windows ho musel implementovat aby WSL vůbec mohlo existovat :)
U linuxového jádra mě vždy z povzdálí bavilo sledovat právě tyhle experimenty s implementacemi nových primitiv. U Windows byla adopce vzhledem k politice zpětné kompatibility vždy o dost pomalejší, pokud vůbec proběhla :-).
Co se týče futexu, je fakt, že nějaký +- ekvivalent asi přišel s Vista (2006) a jejich condition variables a SRWLs (pointer-sized RW zámky, co se také snaží vše řešit v usermodu, dokud to jen jde -- v jádře se v podstatě to samé jmenuje pushlock a je to tam již od XP). Z hlediska snahy volat jádro pouze v případě nutnosti tam již dříve byly tzv. kritické sekce (v jádře tzv. executive resources), ale to jsou dost těžkotonážní obludy.