毛德操:写于龙井1.0发布之际

2014-01-09 12:43


几经考虑,我们决定赶在进入2014年之前发布龙井—即Linux兼容内核的1.0版,要不然就要跟2.0版的发布挤在一起了,因为我们在龙井2.0的研发方面也已经取得了不错的进展。 

这里所说的龙井1.0,是指把Wineserver移到Linux内核中,以提高Wine的运行效率。这几年来,Wine已经有了长足的进步,对于在Linux内核上支持Windows应用的兼容性和稳定性都有了不少提高。但是,Wine通过一个用户空间的服务进程、即Wineserver、来提供虚拟的Windows系统调用界面,将其嫁接到Linux系统调用,终究是一个瓶颈。所以将Wineserver移入Linux内核,跟内核密切结合,是可以提高运行效率的。不过,如果只是简单地把Wineserver从用户空间进程变成一个内核线程,那么效率的提高是很有限的,因为那样Windows应用在运行过程中仍需频繁进行线程调度。所以,把Wineserver移入内核,实际上意味着去掉Wineserver,把它所进行的处理拆散到各个用户进程的上下文中。在这一方面,我们现在已经到了可以发布1.0版的时候。我们现在也许还不能说凡是在Wine上可以跑的Windows应用都能在龙井1.0上跑得一样稳定,但是就我们所测试的许多软件来看确实都跑得很好。另外,龙井1.0不要求对内核打补丁,而可以单纯作为一个可安装模块装载,这使龙井的部署安装得到简化,朋友们想要试试龙井就很简单了。

不过龙井1.0与以前发布的几个版本有个显著的不同。以前我们把对Windows设备驱动的兼容看得很重,所以竭力要在Linux内核中打造一个让Windows设备驱动看着很像Windows内核的环境。这在几年前是很有道理的。比方说,那时候Intel曾有口号“决战在客厅”,似乎Wintel阵营将在智慧家居方面大有作为,而这很可能意味着Windows设备驱动的多样化,因为要与各种各样的设备相接。但是,几年来的实际情况却是,“决战在客厅”大概不会发生了,因为AA (ARM + Android)架构早已成为主流,而Android是运行在Linux内核上的。在这样的情况下,考虑对Windows设备驱动的兼容就成为多余了。所以,龙井1.0已经抛弃了力图在内核中兼容Windows设备驱动的做法,那已经不再是我们的目标。就这一方面而言,龙井1.0在某种程度上可以说是在向Wine回归。

但是,能不能在AA架构的机器上既跨CPU架构又跨操作系统地直接运行Windows应用?进一步,能不能在其它非x86架构的机器上、并且在Linux上、也直接运行Windows应用?这比在x86架构的Linux内核中兼容Windows设备驱动有意思得多。试想,如果能在AA架构的平板电脑上装上包括办公软件在内的各种Windows应用,那不是很好吗?诚然现在Android上也已有了许多很好的软件,但是对于一些“重量级”的应用人们还是习惯于Windows的那些软件。这,就是龙井2.0要达到的目标。

要在ARM架构上直接运行Windows应用的x86架构二进制映像,显然得要仿真(Emulation)。有趣的是,Wine是“Wine is not an Emulator(Wine不是仿真器)”的缩写,而以Wine为基础的龙井2.0,却就是要仿真。不过这仿真也并非简单的仿真。大家知道QEMU是Linux上的一个开源的仿真器,在QEMU上是可以运行Wine的,但是试一下就可以知道慢得不能接受。事实上,QEMU解释执行(即仿真)用户空间的x86指令(包括Wine中的指令),只是一遇系统调用就转入Linux内核,在那里是以“原生态”全速运行的。一般的应用软件都是在用户空间运行的时间多,进入内核运行的时间少,所以就很慢。但是,如果我们能把这分界线往上推到Win API,要是能让Windows应用的运行一进入Win API、即由Wine提供的那些DLL、就以“原生态”全速运行,那么运行的速度应该可以显著提高,因为大多数应用在运行时其实老是在DLL中打转,而Wine那些DLL是可以编译成ARM模式的。这样,我们可以把Wine和QEMU结合起来,并把Wineserver移入内核,这样应该就可以实现我们的目标,这就是我们龙井2.0的思路。为此我们在2012年起就做了大量的实验。实验表明,至少在时钟频率可达1GHz的现代ARM处理器上,这是可行的。现在,龙井2.0的研发已经取得了很不错的进展,像Excel、PPT这样的软件已经可以在ARM开发板上转起来,速度当然要慢一些,但是可以接受。这个成果,我们以为,无论对于平板电脑和手机上的实际应用,还是对于CPU和操作系统的国产化,都是很有意义的。

以后我们将暂时维持龙井的两个分支。一个是1.0分支,这是针对x86架构上的跨操作系统兼容。另一个是2.0分支,这是针对既跨操作系统又跨CPU架构的兼容。不过这只是一种过渡,一段时期之后还是都要整合在2.0分支中。这是因为,就我们的目标而言,都是在Linux上(不管是x86架构还是非x86架构)兼容x86架构的Windows,支持Windows应用的直接运行,所以本质上是一致的。就所用的技术而言,则前者只是后者的一个子集,以后1.0分支的进展(例如来自Wine的进展)理应也体现在2.0分支中。

所以,请朋友们先玩玩龙井1.0,同时期待龙井2.0的发布。当然,我们更希望朋友们能参与进来,和我们一起努力。

via : http://www.longene.org/techdoc/0644167001388447880.html