Oct
26

Wine 简史

这其实是Wine Weekly Newsletter 第296期里的大部分内容。除了宣布Wine 的 beta 发布以外,还介绍了Wine的简短历史。这期 WWN 的历史介绍主要偏向技术方面,如果关心Wine历史上的商业开发,所有者变更和授权等等故事,要这个内容更全的历史页面

当然,先说一句WWN本事,它是6年前(1999年)由 Eric Pouech 开始编写的。

Wine的开始是,12年前,1993,划时代的Win95正在开发中--那时的Microsoft差不多应该像现在的Google一般,正处在与公众关系的蜜月期中,众多百万富翁也正在酝酿中…--所以Wine只需要支持早期的Windows程序。一个DOS-style的体系结构上笨重的infrastructure 是最早的面目。窗口是由hook进Tk实现的(现在Tcl/Tk这对哥们经常一块出现)。显然,2年之后,Win95问世了, Wine 的开发也相应地作出了重大转移,开始支持新的32位Windows API和应用。在90年代剩下的几年里,Redmond 那帮哥们好像每天都在增加新API -- 最近好些了 ;) --而 Wine 的开发方向也发生了不小的改变。最近,Wine 的缺省配置由Win 98改为了Win 2000,这也标志着他们也从DOS时代进入了NT架构。

回到WWN第一期,有两个有意思的话题,一个是Ulrich Weigand的为应用创建独立地址空间--那时Wine为所有应用使用同样空间。这个模式是基于Win 95的工作方式开发的。在那时的条件下,这不是个太简单的活儿。几个月以后,2000年初,相关工作真正启动了。在同年5月底成型,独立地址空间支持对Wine有重要意义。WNN形容说,“和Wine发展史上的很多经历一样,(支持独立地址空间)在付出了成长的烦恼中最初的痛苦后,迈出了继续前进的必需一步”。“成长的烦恼”哈 ^_^
此外就是Wine的移植,Patrik Stridvall 列举了四个可移植相关的领域:OS,CPU架构,编译器和图形driver的分离。尽管Wine的可移植性比以前好得多了,绝大多数开发者仍然在x86机器的Linux上用gcc开发。尽管有一小组开发者在不断努力使Wine在FreeBSD 和Solaris x86上运行,让Wine在其他机构的机器上跑起来还是得费点劲才行。准确地说,Wine本身可以在SPARC和PowerPC上运行,但是还没法跑x86二进制,所以最终结果--还是不可用。至于图形driver的分离,早已搞定。现在的情况是,从本质上说,只有一个driver在使用 winex11.drv 。有兴趣为其他系统比如Mac OS写自定义的driver也行--现在已经有伙计在干了。

第一期里讨论的这两个问题都涉及重要的基础领域,独立地址空间当然是天经地义需要支持的,Wine也做到了,而相比之下,可移植性却仍然是个问题--直到今天这都是开发者邮件列表里催生众多讨论的话题之一。

与地址空间隔离几乎同时开始的huge项目是DLL隔离。这次,Wine的实现没向Windows看齐,没有做到DLL隔离。Wine的DLL只能call其他DLL exported 的函数,所以也就不能用native的Windows DLL替换Wine的内置DLL。这项工作到2003年初才完成大部分,剩下的最难啃的硬骨头。

WWN 第5期中出现了关于注册表的讨论。那时的“To Be or Not to Be“问题是,是否把注册表直接放到文件系统里,还是考虑到性能因素搞成二进制格式,或者就是ASCII文件。尽管讨论组里出现过“千万次的问”要求转为使用二进制格式,Wine现今仍然用ASCII。Ove Kåven 在WWN #48 中描述了注册表实现--别看时间已经跟现在差了200多期,大部分内容仍然适用,而且有些就成为了Wine User Guide 的一部分。文章里形容Wine关于注册表的实现代码是“ultrastable”,尽管如此,还是有人不满意,2001年还有哥们冒泡提意见 。2003年6月,Wine的regedit工具出现,

Wine beta版里的一个重要特性就是新的配置机制。Wine需要一组缺省配置,能让它上来就跑,另外还需要一个工具能覆盖这些设置。WWN #52 里开始讨论图形化配置工具--经过当时已经有了TkWine。最开始这个想法只是想有个工具能方便地改动基于文本的配置文件。2001年早期,有人想要一脚踢开命令行选项了,这让人们第一次开始考虑Wine管理配置信息的方法。回头看看,现在的Wine已经非常容易使用--不再需要各色的命令行参数。2002年,一个长长的todo列表出现了,其中一项就是关于开发一个图形化配置工具的严肃讨论。正式工作在2003年初开始,仍在继续。基本上可以说,这个工具在2004年中就完成了,不过还有些其他事宜,比如建立完整的缺省参数,还在进行中。今年6月,winecfg 启用,原先的配置文件靠边了。

配置问题的一部分和DLL隔离相关,并且最终引入了大量重写文件系统的工作,这是由Alexandre 和 Eric Pouech完成的。项目在2003年8月启动,2004年4月,一切就位,转换非常顺利。

刚才的配置只是Wine beta里的重要特性之一,另一个是窗口管理。在前面提到的那个todo上,这部分内容有很长一段时间看上去都很神秘又含糊,大家广泛认同的事实是,Alexandre是唯一的有相关背景,能搞定这块儿内容的主儿。大概在去年12月,更新域管理(update region management)部分的代码被放进了server中。后面几个月的主要工作是优化,巩固了这部分代码。2月初大部分工作结束。

在多年的开发中,Wine的基本结构经历过许多变更。2003年9月,Wine把原来的bug跟踪系统换成了BugZilla。大概在同时发生的是关于彻底更新Application Database 的讨论。到2001年5月,Jeremy Newman完成了新的http://www.winehq.org/?issue=97#New%20Application%20Database%20is%20ONLINE。其代码最后也公开了,Wine社区的不断努力给AppDB带来了翻天覆地的变化,让它成为了今天的样子。

2002年早期,创建一组测试集成了热门话题。现在这次测试案例的规模每年都会翻倍。现在已经有12000个在Windows和Wine上运行的单元测试用例。除了刺探Windows的行为外,这些测试也保证了Wine的关键部分不会开倒车。

随着Wine的成熟,出现了越来越多的high level的库。比如TWAIN scanner 的支持,在Linux的native库也就是SANE之上实现



Leave a Reply

如果您没注册 Gravatar 的服务,这里会随机选择一张 Flickr 或者 JPG Magazine 的照片作为您的头像哟~~ 已注册了 Gravatar?那自然,您的头像正常显示。
A random picture from Flickr or JPG Magazine will be used as your avatar if you haven't registered Gravatar or use a fake email.





 

Feeds

Global: RSS for International Readers
China: RSS for Readers from China Mainland
Both feeds deliver exactly same content. The second one is provided for readers from China Mainland where FeedBurner is blocked.
如果您的 RSS 阅读器访问 FeedBurner 有困难,可以使用第二个 feed,内容完全一样。

Latest JPG Magazine

By John TannerAndalucía, Christmas '08CoralZeldaSnowsecrets