Wine的使用中的一些常见误区

Wine、Cedega、CrossOver 等配置
fracting
帖子: 278
注册时间: 2009-02-26 1:30

Wine的使用中的一些常见误区

#1

帖子 fracting » 2012-02-10 2:32

大家好, 分享一点点心得, 跟大家一起交流学习, 请大家补充指正.

有一些Linux老手不屑于wine, 有一些人很需要wine, 本文不争论wine好还是不好的问题, 只是从技术和社区两个出发点来讨论问题.

从技术的视角来看. 有一些朋友可能对wine有这样一些误解:

- 认为从windows上copy过来的native dll比wine的builtin dll好, 有事没事就装一大堆native dll, 有事没事就用winetricks
评: 这是不对的.
- 首先, wine设计的目标是完全脱离Windows, wine的开发中并没有刻意去和Windows的native dll做到二进制兼容, Wine的目标用户是没有Windows的用户.
- 如果一个软件在纯builtin dll的情况下有问题, 那就必须给Wine报一个bug. 只要Wine没有做到out of box (开箱即用), 就可以给Wine报bug.
- 如果装了native 的dll, 哪怕你出问题了去报bug, wine开发者也不会接受. 这里有技术上的原因, 也有法律上的原因. 技术上, 使用native dll, 调试的时候跟踪到native dll里就没有调试符号信息了, 因此调试的难度加大了. 可能有的朋友会说可以反汇编, 但是这又有法律上的限制, 对Windows的dll进行反汇编是有法律风险的, wine的开发者都会尽量避免这么做.

- 认为Wine很难用,需要各种复杂的配置.
评: 这是不对的, wine设计的目标就是work out of box, 任何额外的配置都可能是bug. 不管是改动一个dll, 还是修改一下注册表, 都属于额外的配置, 都可以搜索一下有没有已知的bug, 没有的话可以去报bug

- 认为有些Windows程序只能在某个特定的老版本中运行, 不能在新版本中运行, 从而不敢升级.
评: 这是不对的. 确实有很多程序在旧的wine中正常而在新的wine中出问题, 但这是暂时的, 出现这种情况千万要报一个bug, 这种情况叫做 regression, 只要报了bug, 开发者一定会优先处理. 软件开发最应该避免的就是regression, 但是regression是难以避免的, 而开发者又不一定是用户, 所以有些regression需要用户去发现, 去报bug.

- 认为Wine终端输出的fixme是bug
评: 这是不对的, 大部分的fixme都是无害的,不用担心. 但是如果真的有bug要报, 记得提供完整的终端输出, 又开发者来诊断. 如果想自己排查解决问题, 那很好, 去看源代码.

- 认为Wine效率低, 占用内存大, 占用cpu高.
评: 不完全对. Wine的效率一直在改进中, 从原理上看, Wine中运行的Win32程序的效率是接近原生linux程序的效率的. 但是, 有时候一些进程间通信的地方效率可能会低, 涉及到DirectX的地方效率也可能会变低,这就很难说了. Wine的DirectX效率不高, 有时候原因在于Linux显卡驱动的bug, 有时候是Wine本身实现不够完美. 幸运的是, 效率问题也是bug, 如果你发现某个程序在Wine中的效率和Windows中的效率差别极大, 那就应该去给Wine报一个bug. 至于Wine占用的内存, 理论上也是很小的, 远远比虚拟机小, 如果你发现Wine运行某个程序占用内存极大, 可能是有内存泄露的bug, 也应该去报一个bug. 同理, 如果某个程序在Wine中占用CPU很高,远超过在Windows下,也应该报一个bug.

- 认为Windows程序在Wine上无法运行是程序的错, 不是Wine的错
评: 掩饰自由软件的缺点, 并不会给自由软件带来改进, 也不会给自由软件带来更多用户. Wine有很多bug等着我们去报, 认认真真报一个bug并耐心跟进, 才是推动开源软件进步的务实的手段. 只要是用户空间的程序, 如果可以在Windows下正常运行却在Wine下出错, 那就一定是bug. 大部分时候是Wine的bug, 但也有可能是Linux内核的bug, 显卡驱动的bug, 声卡驱动的bug, opengl的bug等等. 如果是后者, 报一个wine的bug还能改进其他自由软件, 何乐而不为呢?

从社区的角度来看, 我认为下面这些做法也是有一定的误导的:

- 辛辛苦苦研究出怎么在Wine上运行某个程序, 在论坛上分享, 却没有去报bug
评: 钻研精神可嘉, 分享精神可嘉.
- 但是, 这种分享经常带来误导
- 如上所说, Wine应该是out of box的, 而这类 "技术分享", 恰恰给人带来wine很难用的错觉
- 使用开源软件,就应该用开源的方式思考问题. 辛辛苦苦研究出workaround的步骤, 正好是报告bug的第一手的好材料. 只有把自己遇到的问题报告给上游, 把自己找到的workaround方法报告给上游, 才能改进开源软件本身, 才能真正一劳永逸地解决问题, 真正免除新手的痛苦.
- 最佳的做法, 就是去给Wine报一个bug, 然后在做这类"技术分享"的时候, 强调"这是wine的一个bug, 我给上游报告了, 感兴趣的朋友可以一起跟踪这个bug. 目前可以用下面的方法来暂时避开这个bug, 以后如果新版本的Wine修复了这个bug, 就不需要这一步workaround了."
- 这种做法, 不仅帮助新手暂时解决问题, 还树立了一个榜样, 告诉新手发现问题应该及时给开源软件报bug.

- 指责Wine如何如何, 甚至指责使用Wine的人如何如何
评: 使用自由软件是每个人的自由, 选择什么样的自由软件, 并没有高低之分.
一个例子是:
A: "求助, wine office不成功, 怎么办?"
B: "用Libreoffice不行么? 何必用M$ Office呢?"
C: "要用M$ office, 回去用你的Windows吧"

实际上, 可能连B也不知道, 如果Libreoffice打开MS Office文档格式出问题, 也 *可以* 并且 *应该* 给Libreoffice报一个bug.
如果B这样回答, 也许会更好: 有没有试过Libreoffice? 如果想尝试Libreoffice, 就要注意可能会有些文档格式不兼容的问题, 但是如果你发现了这样的问题, 可以去给Libreoffice报一个bug, 将 *样本文档* , *正常截图* 和 *错误截图* 三者一起提供给开发者. 如果你不知道怎么报bug, 可以发到论坛上, 让大家协助你报bug.
至于C, 我们就不去评论他了. 如果有人告诉A, 使用开源软件遇到问题是正常的, 但是我们可以去改进开源软件, 最直接有效的方法就是去报一个bug, 这就好多了.

最后吐嘈一下, 有一些所谓开源爱好者,只是伪开源爱好者, 不懂开源, 还打击和误导新手. 跟大家共勉, 希望能和大家一起进步 :)

更新一下: 有心报bug的朋友, 千万不要报了之后就不管, 要及时跟进, 答复开发者的测试要求. 如果报bug跟盖烂尾楼一样, 那么得到修复的机会就很小了, 一定要对自己报的bug负责任.
上次由 fracting 在 2012-04-06 14:06,总共编辑 4 次。
Wine的使用中的一些常见误区:
viewtopic.php?f=121&t=363147

分享Wine调试经验 -- 第二季: Wine Dr.com 中文乱码
viewtopic.php?f=121&t=385111

做一名开源社区的扫地僧(上)
viewtopic.php?f=80&t=389615
fracting
帖子: 278
注册时间: 2009-02-26 1:30

Re: Wine的使用中的一些常见误区

#2

帖子 fracting » 2012-02-10 2:35

转载我的另一段文字,关于Wine的报bug. 跟大家一起交流, 也请大家指正:

=============
http://groups.google.com/group/shlug/br ... c62c63e5c9
=============

> 正好借機會問一下Qian Hong,給Wine報bug,一般會得到怎麼樣的響應?

分各种情况,我罗列一些我了解的情况,不是很全面,请其他朋友指正和补充:

1.
- 某个程序不能正常运行,是因为Wine缺了某个dll,而这个dll恰好不是那么重要,解决问题只需要一个stub的dll,这种情况很快就能解决。
例子: 工行网银安装包,安装过程需要scaddlg.dll,没有这个dll会出错,但是在登陆工行网银的时候不需要这个dll,只有在使用u盾的时候才需要。
Bug 26026 - Installation of ICBC online bank Active Control needs
scarddlg.dll [1]

这个bug在wine-1.3.13发布后报告,在wine-1.3.18中修复,也就是12个星期后修复。事实上修复这个bug需要的时间很短,但是开发者都 很忙
- 如果Wine缺少的dll很重要,但是比较难实现,实现这个dll会有比较大的专利风险,那么可能会很多年都没修复,比如mfc42.dll,还有比如
Bug 19816 - Add implementation of MSVBVM60

2. 程序崩溃
- 程序崩溃分为因Wine缺少某个函数引起的崩溃,和因wine的api实现有bug引起的崩溃。
- 如果Wine缺少的某函数不是很重要,只需一个stub就能解决问题

例子:招商银行客户端依赖ntoskrnl.exe.IoGetCurrentProcess这个函数,这个函数可能只有在使用u盾的时候才需要,Wine实现 了一个stub函数。
Bug 27754 - PbSetup60.exe need unimplemented function
ntoskrnl.exe.IoGetCurrentProcess [2] ( 这是一个重复的bug,已经有人报了 Bug 13289 -
Multiple apps/games need ntoskrnl.exe IoGetCurrentProcess (Zeus
maplestory, BASCOM AVR Demo) )

同类的还有 Bug 27270 - Unimplemented function
ntoskrnl.exe.ObReferenceObjectByName called by Activex control of
cebchina online bank 和 Bug 27280 - BHDCInstall_per can not install
(unimplemented function cfgmgr32.dll.CM_Get_Device_ID_List_SizeA ) 等等。

这些bug的修复都不难,关键是开发者要有时间和兴趣去修复,以及有用户去报告。对于这类不重要的函数,通常依赖的程序不多,因此如果没有用户去报告bug,开 发者可能不会去实现。


- 如果Wine缺少的函数是msvc运行库函数,那肯定是很重要的函数,会有很多程序依赖,开发者肯定会开发,但是人手不足是个问题。
例子:工行安全控件安装程序缺少某个msvc运行库函数: Bug 27281 - crash while install
ICBC_FT_UShield2_Install.exe ( unimplemented function
msvcp60.dll.??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@ 2@@std@@QAE@H@Z
) [3]

除了msvc库函数以外,还有其他一些重要的函数,就算我们不去报告bug,开发者也会去实现,因为依赖的程序比较多。但是,并不是说这类重要的函数我们就反而 不必关心了,想反,重要的函数更需要有多人去在不同的程序上测试,保证不出问题。

- 如果程序崩溃是因为Wine的实现有bug,那么开发者也会很重视,但是修复的难度就难以预测了。
例子:CSF播放器在Wine中崩溃,因为msvc库的某个函数实现有错。Bug 28294 - XPR108258.exe (csf
player installer) crash [4]

总的来说,崩溃问题一定是wine开发者重视的问题,至于有没有时间精力修复又是令一回事了。

3. wine程序的界面显示问题。

- 如果是Wine的问题,那么Wine会修复,例如Aliwangwang在Wine下显示错乱严重: Bug 27251 -
Aliwangwang display ugly [5] .

- 有时候可能是窗口管理器的问题,那么wine开发者会把bug关掉,建议给窗口管理器报bug, 例如 Bug 29401 -
thunder installer in unity doesn't draw itself on start up
。这其实是unity的bug: unity doesn't refresh the opacity : affects wine
thunder installer [7] .至于unity的开发者修不修,那又是令一回事了。

- 有些显示问题比较难调试,有影响不大,优先级就不高,不过仍然应该给Wine报bug。

4. 音频驱动的问题。Linux下的音频驱动问题比较多,导致Wine的音频驱动问题也比较多,不过wine计划在今年wine-1.4发布前比较完美地解决音频驱 动的问题,因此报告关于声音的问题都会得到比较及时的处理

5. directx的问题。很多游戏需要directx,wine的directx一直在活跃开发中,这方面的bug也会得到比较及时的处理。

6. iexplore的问题。Wine去年对内置iexplore做了很多改进,凡是跟iexplore相关的问题,尤其是跟网银相关的问题,wine都会积极处理 。目前主要是Jacek
Caban一个人在做,严重缺乏人手。注意,这里说的iexplore不是MS IE6,IE7,IE8等,而是Wine内置的iexplore。
例如: Bug 26000 - Builtin IE cannot display ActiveX Controls from ICBC
online bank (fixed in gecko)

7. 设计到底层驱动的问题,wine开发者很可能会告诉你wine不支持kernel driver并且关闭bug。
更一般的,可以看看 http://wiki.winehq.org/WineReleaseCriteria
只要是在wine开发者计划中的,就会得到比较快的响应。

开发者的计划,则依赖于开发者个人的兴趣,用户需求是否广泛,以及是否有人愿意付费等因素。


除了上面所列举的,还有一种情况会得到比较快的处理,就是regression:http://source.winehq.org/regressions
( Wine regression shame hall )
有时候一个程序在老版本的wine中运行正常,在新的wine中反而不能用了,这时候就该报一个bug。论坛上可能会有朋友分享wine的经验时说某某软件要在 老版本的wine中用,不能在新版本的wine中使用,其实这样的分享是会带来误导的,更好的做法是去报一个bug,然后在文章中告诉读者这是一个已知的bug ,应该会在将来修复。

报bug的时候,尽量多搜索,不要重复报bug. 如果是程序崩溃,要先安装debug
info再报bug。不要在bug正文中贴log,要以文本附件形式上传到bugzilla中。开发者如何响应,很大程度还取决于用户怎么报bug以及怎么回应 开发者。报bug不专业没关系,只要积极回应开发者的要求,尽量提供详细的信息给开发者,就能让bug的信息越来越充足,这是一个交互的过程。

如果报bug之前认真阅读过http://wiki.winehq.org/Bugs
,并且完全照做了,那么一定会得到响应的。如果暂时得不到响应,不是开发者不想里你,而是实在太忙了。可以考虑做一些力所能及的事情帮助开发者从忙碌中解救出来 。

最后,可能有的朋友比较关心的问题是:我报一个bug,要多久能得到回复,多久完全修复?

这个问题是最不好回答的,太多不确定性因素了,只能给一个大概的统计性的答案:
类比“半衰期”这个概念,我们可以提出一个“半数bug修复期”概念:假设你报了100个bug,那么一年之后,平均大约有50个会被修复。
也就是说,“半衰期”大概是一年。这个数据是根据我自己报的bug统计的,没有统计过所有的bug。不过,bugzilla中的bug只会越来越多,因为开发一 直不停止,开发者人数不算多,但是Linux用户越来越多,有报bug意识的人也越来越多。

对于其他开源软件,报bug也有很多共通的地方,可以搜一下“bug 生命周期”,“如何有效地报bug”等文章,可以看一下Ubuntu
中文wiki上Aron写的报bug的教程,可以把“提问的智慧”一文中指出的要点当作报bug的要点。


总之,你愿意付出的越多,你的bug得到解决的几率就越大,速度就越快。


[1] http://bugs.winehq.org/show_bug.cgi?id=26026
[2] http://bugs.winehq.org/show_bug.cgi?id=27754
[3] http://bugs.winehq.org/show_bug.cgi?id=27281
[4] http://bugs.winehq.org/show_bug.cgi?id=28294
[5] http://bugs.winehq.org/show_bug.cgi?id=27251
[6] http://bugs.winehq.org/show_bug.cgi?id=29401
[7] https://bugs.launchpad.net/ubuntu/+sour ... bug/907449
[8] http://bugs.winehq.org/show_bug.cgi?id=26000
--
Regards,
Qian Hong
-
Sent from Ubuntu
上次由 fracting 在 2012-03-04 3:29,总共编辑 1 次。
Wine的使用中的一些常见误区:
viewtopic.php?f=121&t=363147

分享Wine调试经验 -- 第二季: Wine Dr.com 中文乱码
viewtopic.php?f=121&t=385111

做一名开源社区的扫地僧(上)
viewtopic.php?f=80&t=389615
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

Re: Wine的使用中的一些常见误区

#3

帖子 ljj_jjl2008 » 2012-02-10 8:05

只看见一大堆“报bug”。
:em06
头像
peteryeh64
论坛版主
帖子: 9379
注册时间: 2008-12-20 15:43
系统: 家kubuntu20.04
来自: 心靈深處

Re: Wine的使用中的一些常见误区

#4

帖子 peteryeh64 » 2012-02-10 8:16

:em11 ...學習了...
[论坛版主行为规定]+[PITIVI簡易教程]+[ubuntu裝迅雷]
[releases.ubuntu.com]+[cdimage.ubuntu.com]+[old-releases.ubuntu.com]
[學ubuntu必須拜讀懶蝸牛"笨兔兔的故事"=viewtopic.php?f=112&t=162040][Linux明日的希望在中國]
头像
ooinzaghi
帖子: 1767
注册时间: 2010-11-18 15:55
系统: ubuntu16.04+win10
来自: Auir

Re: Wine的使用中的一些常见误区

#5

帖子 ooinzaghi » 2012-02-10 13:23

极少量稳定,不崩溃的wine,不涉及显卡的虚拟机。最后双系统。
势不可去尽,话不可说尽,凡事太尽,缘分势必早尽。

生命不息,折腾不止!在折腾中进步!

dropbox邀请链接: https://db.tt/OMGJP72tMW
头像
ooinzaghi
帖子: 1767
注册时间: 2010-11-18 15:55
系统: ubuntu16.04+win10
来自: Auir

Re: Wine的使用中的一些常见误区

#6

帖子 ooinzaghi » 2012-02-10 13:27

关键那些经常崩溃,不稳定,甚至流氓的软件,懒得报bug了,直接在流氓系统中运行得了 :em20
势不可去尽,话不可说尽,凡事太尽,缘分势必早尽。

生命不息,折腾不止!在折腾中进步!

dropbox邀请链接: https://db.tt/OMGJP72tMW
gang_gang_007
帖子: 31
注册时间: 2011-05-15 11:48

Re: Wine的使用中的一些常见误区

#7

帖子 gang_gang_007 » 2012-02-23 17:18

教一教怎么用wine啊
fracting
帖子: 278
注册时间: 2009-02-26 1:30

Re: Wine的使用中的一些常见误区

#8

帖子 fracting » 2012-03-04 3:20

Wine的设计目标,就是work out of box.
所以,不存在 "学习如何使用wine" 这一说法.
网上所谓的wine教程, wine技巧, 通通都是误导,让新手以为wine很难用,让新手以为wine本来就该这么难用.
其实,所谓的难用,通通都是bug.
然而,中文linux社区的报bug意识普遍不强.

真正应该掌握的, 是如何给wine上游报一个有效的bug, 并且在报bug的时候告诉开发者你所知道的workaround的方式;
如果你不知道有什么workaround的方法,也可以问开发者是否存在什么workaround的方法.

只要你去报bug了,一年的时间里每100个有效的bug会有超过50个被修复.
如果报bug的人多了,wine就会变得越来越好.

如果你的软件很小众却不愿自己去报bug,那出了问题除了自己看wine的源代码,没有什么太好的方法了.
Wine的使用中的一些常见误区:
viewtopic.php?f=121&t=363147

分享Wine调试经验 -- 第二季: Wine Dr.com 中文乱码
viewtopic.php?f=121&t=385111

做一名开源社区的扫地僧(上)
viewtopic.php?f=80&t=389615
fracting
帖子: 278
注册时间: 2009-02-26 1:30

Re: Wine的使用中的一些常见误区

#9

帖子 fracting » 2012-03-04 3:32

ooinzaghi 写了:长期求解: wine浩方和VS正常,玩CS也正常,但魔兽只能进入房间看到主机,却进不去,也建不了
非常简单, 去给wine报bug.
Wine的使用中的一些常见误区:
viewtopic.php?f=121&t=363147

分享Wine调试经验 -- 第二季: Wine Dr.com 中文乱码
viewtopic.php?f=121&t=385111

做一名开源社区的扫地僧(上)
viewtopic.php?f=80&t=389615
fracting
帖子: 278
注册时间: 2009-02-26 1:30

Re: Wine的使用中的一些常见误区

#10

帖子 fracting » 2012-03-04 3:37

ooinzaghi 写了:关键那些经常崩溃,不稳定,甚至流氓的软件,懒得报bug了,直接在流氓系统中运行得了 :em20
崩溃问题属于优先级高的bug,聪明的做法是去给wine报bug.
流氓软件,在windows下运行,无法监控;而在wine下运行,由于linux的权限保护,反而无法流氓,例如raw socket在win下是不需要特权的,
而在linux下则需要特权,除非你手动setcap,不然流氓软件再流氓也无法运行用到raw socket的网络操作.

如果你把wineprefix中到根目录的链接去掉,那么wineprefix就成为一个相对安全的沙盒,这样流氓软件就无法偷偷获取你的其他目录的信息了.
Wine的使用中的一些常见误区:
viewtopic.php?f=121&t=363147

分享Wine调试经验 -- 第二季: Wine Dr.com 中文乱码
viewtopic.php?f=121&t=385111

做一名开源社区的扫地僧(上)
viewtopic.php?f=80&t=389615
谢宝良
帖子: 1983
注册时间: 2010-05-01 21:23

Re: Wine的使用中的一些常见误区

#11

帖子 谢宝良 » 2012-03-04 9:06

反正我是受不了wine。
一提到wine就恶心。
头像
ooinzaghi
帖子: 1767
注册时间: 2010-11-18 15:55
系统: ubuntu16.04+win10
来自: Auir

Re: Wine的使用中的一些常见误区

#12

帖子 ooinzaghi » 2012-03-04 12:59

fracting 写了:
ooinzaghi 写了:长期求解: wine浩方和VS正常,玩CS也正常,但魔兽只能进入房间看到主机,却进不去,也建不了
非常简单, 去给wine报bug.
早有人报过,解决不了
http://forum.ubuntu.org.cn/viewtopic.php?f=121&t=346825
势不可去尽,话不可说尽,凡事太尽,缘分势必早尽。

生命不息,折腾不止!在折腾中进步!

dropbox邀请链接: https://db.tt/OMGJP72tMW
fracting
帖子: 278
注册时间: 2009-02-26 1:30

Re: Wine的使用中的一些常见误区

#13

帖子 fracting » 2012-03-04 14:13

ooinzaghi 写了:
fracting 写了:
ooinzaghi 写了:长期求解: wine浩方和VS正常,玩CS也正常,但魔兽只能进入房间看到主机,却进不去,也建不了
非常简单, 去给wine报bug.
早有人报过,解决不了
http://forum.ubuntu.org.cn/viewtopic.php?f=121&t=346825
如果你十分确信这个bug已经有人报bug, 那么我建议:
- 把bug的链接和你的签名放在一起
- 这样, 可以让有兴趣解决问题的人节省很多时间
- 同时, 也可以避免重复劳动, 避免有人报相同的bug
- 如果你愿意给个bug链接, 我也希望我可以帮上忙.

如果你只是随口说说, 我建议你再次确认一下这个bug是不是已经有人报给上游了, 如果没有, 建议你去报一下.
懂得向上游反馈问题, 是开源软件用户应该掌握的基本素质.
对于开源社区的老用户, 在提出问题的时候同时给一个上游的bug链接, 也可以给新用户树立一个好榜样, 告诉新用户注意向上游反馈.
Wine的使用中的一些常见误区:
viewtopic.php?f=121&t=363147

分享Wine调试经验 -- 第二季: Wine Dr.com 中文乱码
viewtopic.php?f=121&t=385111

做一名开源社区的扫地僧(上)
viewtopic.php?f=80&t=389615
zhwps
帖子: 77
注册时间: 2007-03-21 14:33

Re: Wine的使用中的一些常见误区

#14

帖子 zhwps » 2012-03-05 8:06

呵呵,好文章
kyosp
帖子: 6
注册时间: 2009-04-30 0:52

Re: Wine的使用中的一些常见误区

#15

帖子 kyosp » 2012-03-05 16:08

非常好的文章!虽然我不是太了解开源是怎么回事(尽管我一直在用xubuntu),但我觉得楼主真是一位热心的专家,帮助菜鸟入门,希望楼主多发表一些此类文章,短的长的都期待。
回复