Portál AbcLinuxu, 5. května 2025 19:01

Zpravodaj o Víně – 29. 2. 2012

6. 3. 2012 | Luboš Doležel
Články - Zpravodaj o Víně – 29. 2. 2012  

Příchod Windows na ARM. Navrhování chybějících knihoven. Stav mmdevapi a praskání zvuku. Změny v databázi aplikací.

Obsah

Příchod Windows na ARM

link

V průběhu historie Windows se objevily a zase zmizely porty na jiné architektury než x86. ARM je ale platformou, které se jako snad jediné daří tomuto válečnému (vítěznému) tažení odolávat díky svým vlastnostem. V Microsoftu ale cítí, že zde přicházejí o potenciální tržby, a tak se rozhodli portovat Windows právě i na ARM. A Wine se taková aktivita pochopitelně týká.

Podle blogového zápisku na zdnet.com nenechá Microsoft vývojáře používat win32 na ARM (i když to sám Microsoft pravděpodobně používá pro Office na ARM). Namísto toho musejí nativní aplikace používat WinRT, knihovnu tříd v C++.

Podle Wikipedie jsou knihovny WinRT interně postaveny nad Win32.

Pokud to bude mít úspěch a někdo se bude cítit na to, aby doplnil podporu do Wine, tak by pravděpodobně měl začít implementací prvních věcí v C, jako to je v msvcp ve Wine. Nakonec – jakmile a jestli vůbec se do llvm dostane podpora ABI Visual C++ – by ve Wine mohlo být umožněno používání zdrojového kódu v C++.

(Jen pro informaci, vypadá to, že na tom pracoval Charles Davis [1] [2] [3].)

Vincent Povirk si myslí, že je na spekulace příliš brzo, a celkově případné nadšení z podpory ARM trochu utlumil.

Nevím, jak jsi dospěl k závěru, že hlavní cestou k používání WinRT API je C++. Zjevně je to tak možné, ale to neznamená, že to je způsob, jaký většina vývojářů použije.

Navíc ani nevíme, zda nám způsob šíření aplikací nad WinRT vůbec umožní se k takovým aplikacím dostat. Je docela možné, že ani nebude jak si soubory z Win8 Store jen tak stáhnout. Ruční nahrávání aplikací bude dost pravděpodobně možné (ale nemusí tomu tak být), ale i tak by užitečnost Wine byla omezena na aplikace, které lze takto získat.

Bylo mi také řečeno, že „není podporováno“ nemusí nutně znamenat „nebude fungovat“, ačkoliv i kdyby Microsoft své win32 arm binárky nepodepisoval, je pravděpodobné, že na desktopovém ARMu nebude poskytováno plnohodnotné Win32 API. Budeme muset počkat, dokud to nevyjde, a pak teprve uvidíme.

Debata se přesunula k vyjasňování, co je WinRT vlastně zač. Charles Davis:

Jak už napsali jiní, není to úplně pravda [že by WinRT bylo knihovnou tříd v C++]. Ano, je to pravděpodobně napsáno v C++. Ano, dvě z rozhraní k této knihovně jsou knihovny tříd v C++, jedna z nichž přitom vyžaduje speciální verzi C++ (Microsoftem nazvanou C++/CX). Ale WinRT jako takové není knihovnou tříd v C++; je to COMovská knihovna s několika rozšířeními k obyčejnému COMu. Což znamená, že naše implementace může být napsána v čistém C, stejně jako všechny naše COMovské knihovny.

Ale to všechno platí, jen pokud to bude mít úspěch. A tomu já nevěřím. Osobně si myslím, že bychom měli své už tak vypjaté síly zaměřit na zlepšování kompatibility s Win32. Vzhledem k tomu, že se Microsoft chystá ke všemu možnému, jen ne k opuštění Win32, se Wine stane ještě důležitějším, a to k používání starších aplikací, které nejsou na WinRT založené.

Dan Kegel se na závěr této debaty zeptal, jak to s podporou ABI Visual C++ v LLVM vlastně vypadá – jak daleko se vývoj dostal. Charles Davis:

Moc daleko vlastně ne. Trochu jsem pracoval na dekorování názvů a na 64bitovém EH [obsluze výjimek] a někdo jiný pracuje na rozvržení tříd [class layouts], ale k použitelnosti to má daleko. Částečně je to kvůli tomu, že jsem neměl moc času se tomu věnovat.

link

Hlavním pomocníkem při instalaci aplikací pro Windows na Linuxu (a dalších podporovaných platformách) je asi nástroj winetricks, jenž je udržován jedním z hlavních vývojářů Wine, Danem Kegelem. Winetricks pomůže s instalací spousty různých knihoven, frameworků nebo důležitých aplikací. Adam Kłobukowski se ozval s nápadem, že by Wine kromě nevýrazné hlášky v konzoli mohlo na chybějící knihovny upozorňovat trochu lépe a konkrétně by mohlo odkázat na způsob, jak danou komponentu doinstalovat (třeba právě pomocí winetricks):

Wine (zatím ;-)) neimplementuje všechna Windows API a velké části existujících implementací jsou jen pahýly. Proto by mohlo být užitečné, kdyby Wine dokázalo odhalit případy, kdy se program pokusil použít neimplementovanou knihovnu, jež jde ale snadno stáhnout, napadá mě .NET, MSXML nebo VCRUN*. Namísto prostého selhání by Wine mohlo nabídnout radu, co s tím má uživatel dělat.

To by také mohlo pomoci s API, která jsou z větší části pahýly – fungují v některých situacích, ale v jiných selžou – mohlo by se detekovat, zda se aplikace nesnaží použít nepodporovanou věc a příslušně zareagovat.

Stefan Dösinger se na to však dívá poněkud realističtěji:

No, pokud DLL vyloženě chybí, tak by se mělo vypsat ERR. Pokud aplikace zavolá pahýl, tak ten vypíše FIXME. Nevím, co jiného bychom mohli dělat – ukazovat v těchto situacích dialogové okno není dobrý nápad. Nebo myslíš to, že bychom měli udělat zprávy informativnější, že by se vypisovalo třeba „Budete asi muset nainstalovat Visual Basic 6 Runtime z http://microsoft.com/foo/bar“ místo něčeho jako „nelze načíst msvb60.dll“?

Snad nejhorší situací je, když aplikace načítá knihovnu za běhu, a tudíž nevyvolá chybu linkeru, nebo pokud se pokusí načíst třídu OLE a uživatel pochopí chybu err:ole:XXX jako problém s OLE a ne jako chybějící knihovnu.

Obecně spíš dávám přednost tomu, aby takové informace byly v dokumentaci nebo na wiki, nikoliv v kódu.

Jak asi tušíte, Adam objasnil, co tím myslel – hlavně mu vadí to, že současné hlášky nejsou pro běžného uživatele zcela srozumitelné. Frédéric Delanoy vysvětlil, že zejména s pahýly to není moc přímočaré:

Problém je v tom, že některé aplikace fungují, i když jsou některé knihovny skoro celé plné pahýlů, ale přitom selžou, když se tato knihovna nahradí nativní. Ještě horší je pak to, že dokonce i stejná aplikace/stejná verze může k běhu potřebovat různé obezličky...

Opravdu si nemyslím, že bychom měli v kódu kopírovat AppDB.

Dan Kegel – kromě upozornění, že se podobný nápad už několikrát diskutoval – poskytl ukázku toho, jak by se o podobné rady („srozumitelnější hlášky“) mohly postarat samotné linuxové distribuce:

Už tu na to notifikační systém máme, jde o ladící kanál winediag. Řekl bych, že smyslem bylo umožnit distribucím ukazovat tyto zprávy uživateli (například pomocí dialogu) a všechny ostatní hlášky skrýt.

V současnosti chyba při načítání knihovny do +winediag nejde. Možná by měla (i když je někdy možné ji ignorovat, takže si nejsem jist).

S +winediag, nebo bez něj, tak či tak si dovedu představit wrapper mimo Wine, který bude upozorňovat na podobné situace a v těch pár případech, kdy je šance na úspěch vysoká (mfc42? vb6run?), nabídne uživateli pomoc.

Hrubá ukázka:

wine "$@" 2>&1 | tee foo.log
if grep -i "Library MFC42.DLL" foo.log
then
    zenity --warning --text "This app seems to need mfc42.  Try
running winetricks mfc42."
fi

Dalo by asi dost práce dát dohromady něco, co by stálo za nasazení, ale pokud máš zájem, tak jen do toho...

Stav mmdevapi a praskání zvuku

link

Je tomu skoro rok, co jsme psali o nástupu MMDevAPI, neboli nové implementaci zvukových ovladačů, protože stav těch původních byl dosti všelijaký. S MMDevAPI je to teď snad o trochu lepší. Důležitou informací pro uživatele PulseAudio je, že problémy se zvukem ve Wine mohou často zmizet po aktualizaci PulseAudio – ne vše je tedy vyloženě chybou Wine.

Hlubším problémem při přehrávání zvuku obecně zůstává plánování zápisu zvukových dat do zařízení.

Máme tu několik problémů s praskajícím zvukem:

Maarten Lankhorst navrhl použití rtkitu pro nastavení realtime priority u vlákna jako řešení problémů s plánovačem. Joerg se toho ale trochu bojí:

Docela chápu, proč AJ nechce ve Wine RT kód mít. Také by se mi to nelíbilo. Jen málo lidí si podle mě uvědomuje, že RT je dar i velká odpovědnost. Je třeba mít na paměti, že RT procesy mají vyšší prioritu než všechny procesy uživatelů nebo roota. Stačí něco pokazit, zatížit procesor na 100 % a u jednojádrového stroje můžete rovnou zmáčknout reset. RT kód bych nepřijal bez opravdu důkladné revize kódu a opakovaných úvah nad důsledky, také bych požadoval návrh, který by udržoval RT část aplikace pokud možno co nejmenší a co nejvíce oddělenou.

Na druhou stranu, RT je způsobem, jak získat pravidelné časování a je to také důvod, proč to PulseAudio, jakožto zvukový server, chce. Teď se můžeme dohadovat, že mmdevapi ve Wine představuje pro w32 aplikace něco jako zvukový server, tudíž to má stejné potřeby.

Jak se ukazuje, s PulseAudio je situace o něco snazší. Maarten Lankhorst píše, že PA se tomuto problému snaží předcházet:

Tak jako tak to není pro ovladač pulse potřeba, používám funkci automatického časování a zpětné volání v situacích, kdy rendering neběží. Když buffer ještě není vyčerpaný, tak používám zpětné volání zápisu, abych dal vědět, že jsou k dispozici další data.

Andrew Eikum potvrzuje, že PA je v tomto bohužel výjimkou:

Jediným backendem, který poskytuje takové informace, je bohužel jen Pulse. Proto tak jako tak potřebujeme řešení pro ostatní ovladače. Budeme se muset rozhodnout, jestli chceme použít stejný mechanismus jako u Pulse, nebo spoléhat na zpětná volání. Používat stejné principy u všech ovladačů má své výhody, i když to v některých situacích nemusí být úplně „korektní“.

Účastníci diskuze si pak ještě vyměnili několik e-mailů plných technických detailů o různých možnostech časování. Problém ale zůstává prozatím nevyřešen.

Změny v databázi aplikací

link

Změny od správců programů

link
ProgramPůvodní stav/verzeNový stav/verzeZměna
Reason 5.0 Silver (1.3.13) Gold (1.4-rc4) +1
Adobe Acrobat 7.0 Gold (1.3.36) Silver (1.4-rc4) -1
Everquest 2 Full Install Client Platinum (1.4-rc3) Garbage (1.4-rc5) -4
eTrading Securities HOTS 2.0 Silver (1.2.2) Bronze (1.3.36) -1
ROSE Online Br Gold (1.3.27) Garbage (1.4-rc5) -3
Igor Engraver 1.7 Platinum (1.3.22) Gold (1.4-rc3) -1
Microsoft Office (installer only) 2003 Platinum (1.3.24) Silver (1.4-rc4) -2
PlayOn 3.X Garbage (1.3.12) Bronze (1.4-rc5) +1
Celková změna -10

Změny od uživatelů

link
ProgramPůvodní stav/verzeNový stav/verzeZměna
nullDC 1.1.x Platinum (1.1.9) Bronze (1.4-rc2) -3
Halo: Combat Evolved 1.0x Gold (1.3.18) Garbage (1.4-rc5) -3
Spore 1.0 Garbage (1.2.2) Gold (1.4-rc3) +3
Cold Fear 1.0 Silver (1.3.21) Garbage (1.4-rc5) -2
Disney's Toontown Online 1.x Gold (1.3.28) Garbage (1.3.37) -3
Commandos: Behind Enemy Lines Ammo Pack (GOG) Garbage (1.1.40) Silver (1.3.37) +2
Windows Installer 4.5 Silver (1.3.10) Garbage (1.4-rc4) -2
Might & Magic Heroes VI 1.2.0 Silver (1.3.35) Bronze (1.4-rc3) -1
SonarViewer 1.2.2 Platinum (1.0.0) Garbage (1.3.37) -4
Game Maker 8 Version 8.1 Bronze (1.3.25) Silver (1.4-rc5) +1
Google SketchUp 8.x Bronze (1.2.2) Silver (1.2.3) +1
Adobe Photoshop CS5 (12.0) Gold (1.4-rc2) Silver (1.4-rc5) -1
Sid Meier's Civilization V 1.0.0.17 Platinum (1.3.37) Gold (1.4-rc5) -1
Windows Installer 3.1 Garbage (1.3.5) Silver (1.4-rc4) +2
Dungeon Siege III Release Gold (1.3.29) Platinum (1.4-rc4) +1
Mass Effect 3 Demo Gold (1.4-rc4) Platinum (1.4-rc5) +1
Dark Messiah of Might and Magic Steam Silver (1.2-rc3) Bronze (1.4-rc5) -1
StarCraft II Retail Bronze (1.4-rc1) Gold (1.4-rc4) +2
Kingdoms of Amalur: Reckoning Full-Steam Garbage (1.4-rc3) Bronze (1.4-rc4) +1
Adobe Acrobat X Pro Gold (1.3.20) Silver (1.4-rc5) -1
Guild Wars All Versions Platinum (1.2.1) Garbage (1.2.3) -4
Powerpoint Viewer 2007 Silver (1.0.1) Gold (1.4-rc3) +1
Dear Esther Steam Silver (1.2.3) Bronze (1.4-rc5) -1
Archicad 12 Gold (1.4-rc1) Platinum (1.4-rc5) +1
Dungeon Keeper 2 1.x Garbage (1.4-rc2) Platinum (1.4-rc5) +4
Delphi 7 Silver (1.2.2) Platinum (1.4-rc2) +2
Unreal Tournament 3 Steam Gold (1.3.7) Platinum (1.4-rc6) +1
Anno 1404 1.02.2619 Gold (1.3.14) Platinum (1.3.37) +1
Bioshock 1.0 Platinum (1.3.35) Gold (1.4-rc6) -1
Alan Wake Steam Gold (1.4-rc4) Bronze (1.4-rc5) -2
Kingdom Heroes current Gold (1.2) Silver (1.4-rc5) -1
Command & Conquer: Tiberian Sun Firestorm: 2.03 Bronze (1.3.8) Platinum (1.4-rc5) +3
Command & Conquer: Tiberian Dawn Gold 1.x Gold (1.3.12) Garbage (1.4-rc5) -3
Celková změna -7

Seriál Zpravodaj o Víně (dílů: 42)

První díl: Zpravodaj o Víně - 339, poslední díl: Zpravodaj o Víně – 25. 6. 2014.
Předchozí díl: Zpravodaj o Víně – 10. 2. 2012
Následující díl: Zpravodaj o Víně – 3. 4. 2012

Další články z této rubriky

Týden na ITBiz: Lepší šifrování se stává stále větší prioritou aplikací
Týden na ScienceMag.cz: Hubbleovo napětí by mohl vyřešit pomalu rotující vesmír
Týden na ITBiz: Halucinace balíčků při programování AI
Týden na ScienceMag.cz: Kvantová elektronika v křemíku a diamantu
Týden na ITBiz: DeepSeek nic nemění, umělá inteligence vyžaduje obrovské investice do cloudové infrastruktury

Diskuse k tomuto článku

6.3.2012 09:43 polymorf | skóre: 14 | blog: tar_zxpf
Rozbalit Rozbalit vše Re: Zpravodaj o Víně – 29. 2. 2012
Odpovědět | Sbalit | Link | Blokovat | Admin
Delphi7 zo silver na platinum, tak na to sa asi pozriem, pouzivat D7 na 64bitovom win7 je za trest
10.3.2012 12:21 Roman
Rozbalit Rozbalit vše Re: Zpravodaj o Víně – 29. 2. 2012
Muzes to trochu vice popsat. Diky
12.3.2012 10:00 polymorf | skóre: 14 | blog: tar_zxpf
Rozbalit Rozbalit vše Re: Zpravodaj o Víně – 29. 2. 2012
Kompilujem obrovsky projekt a na 64bitovom windowse je problem to skompilovat. V cca 20% pripadoch to skonci padom delphi, proste zamrzne pri linkovani, na 32bitovom xp sa to nedeje, skusal som wm ware ale tam to ide zase dost pomaly, ak by to vo wine (na fyzickom HW) bezalo lepsie ako na win7 tak by som mohol robit vyvoj na linuxe vo wine. Mohol by som pouzit XP na fyzickom stroji ale licenciu by som musel kupit za vlastne takze wine sa mi zda ako lepsie riesenie (ak by to islo).
Bedňa avatar 6.3.2012 18:38 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Zpravodaj o Víně – 29. 2. 2012
Odpovědět | Sbalit | Link | Blokovat | Admin
Dík, toto si vždy rád prečítam.
KERNEL ULTRAS video channel >>>
D.A.Tiger avatar 8.3.2012 16:32 D.A.Tiger | skóre: 8 | Brno
Rozbalit Rozbalit vše Re: Zpravodaj o Víně – 29. 2. 2012
+1 Já taktéž.
Radost z toho, že někdo objeví něco nového, je omyl starý 6000 let... (Jean Paul) | anthill inside
13.3.2012 18:44 LuděkS | skóre: 31 | blog: publish | Liberec
Rozbalit Rozbalit vše Re: Zpravodaj o Víně – 29. 2. 2012
Odpovědět | Sbalit | Link | Blokovat | Admin
Skóre -10/-7 mi moc radost nedělá :-/

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.