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.