Linux与Windows在桌面领域的互操作性①
王亚军
【摘 要】Linux和Windows都是计算机操作系统领域中的技术热点,两者实现互操作有利于在竞争中共同推动操作系统技术向纵深发展。针对Linux和Windows在桌面领域中的互操作问题,文中作了系统的阐述。在桌面领域,Linux和Windows可以采用API仿真等虚拟化技术或修改操作系统源代码的方法来互运行对方程序,可以采用开放、通用与统一的数据文件格式标准来互处理数据文件,可以采用内核空间文件系统机制或用户空间文件系统机制来互访问文件系统等。
【期刊名称】计算机系统应用 【年(卷),期】2012(021)001 【总页数】6
【关键词】操作系统;互操作性;兼容内核;虚拟化;XML;文件系统 而今,作为最成功的开源软件和最成功的商业软件,Linux和Windows在操作系统应用领域中的二元主流格局基本形成[1]。为了在两者之间架起桥梁,两者之间的互操作问题逐渐成为人们关注的热点。桌面领域作为现代操作系统的主流应用领域,虽然仍是Windows居于霸主地位,但各种桌面Linux版本也相继推出,在很大程度上改善了用户体验,丰富了应用软件,扩大了驱动支持,与Windows的差距正在逐步缩小。研究这两种操作系统在桌面领域的互操作问题,一方面有利于扩展Linux的桌面应用空间,另一方面也为两者在网络领域、嵌入式领域的互操作技术打下坚实的基础,从而推动操作系统互操作技术的全面发展[2,3]。
从本质上说,Linux和Windows是异构的操作系统。Linux采用了高效而又模块化的宏内核结构,而Windows则采用了高度模块化的扩大的微内核结构。Linux内核由进程管理、存储管理、文件管理、网络管理和进程间通信等组件构成,由一大段内核代码实现内核各个组件的功能,而具体的文件系统或设备驱动等也能以可加载模块的方式动态地载入内核,内核运行效率较高。Windows核心态组件包括:核心、执行体、设备驱动、硬件抽象层和图形引擎。与纯粹的微内核系统不同,Windows将许多微内核外的系统函数置于核心态运行,以减少系统开销。Linux和Window都实现了核心态与用户态两个特权级别,操作系统中至关重要的代码运行在核心态,而用户程序运行在用户态,用户程序可以通过系统调用机制来使用特定的内核服务[4,5]。由于Linux和Windows在体系结构上存在差异,所以在Linux和Windows之间实现互操作面临许多技术难题。下面从 Linux与Windows互运行对方程序、互处理数据文件、互访问文件系统三个主要方面阐述两个操作系统在桌面领域的互操作问题。
1 Linux与Windows互运行对方程序
这两个操作系统互运行程序主要包括互运行设备驱动程序和应用程序两个方面。由于设备驱动程序是在操作系统内核态运行的软件模块,而异构操作系统所提供的设备驱动框架是不同的,所以要想互运行设备驱动程序,就需要对操作系统内核代码进行修改,以提供兼容环境[6,7]。只有微软公司才能修改Windows内核源代码来兼容Linux设备驱动程序,但由于运行在Windows系统上的设备驱动程序十分丰富,所以微软公司也并不热衷于修改Windows内核来兼容Linux设备驱动程序。
而 Linux环境下的设备驱动程序相对不足,修改Linux内核兼容Windows设备驱动程序对Linux的拓展应用领域意义重大。Windows设备驱动框架的主体是Windows内核中的I/O子系统,作为这个框架的扩充,Windows对具有特殊性的网络设备驱动定义了一个子框架,即网络驱动程序接口规格 NDIS(Network Driver Interface Specification)。NDIS的功能是由Windows的一个内核动态安装模块ndis.sys实现的。符合NDIS接口标准的微端口驱动和中间层模块都可以在 ndis.sys的支持下运行[7,8]。开源软件 NDIS Wrapper就是 ndis.sys从Windows内核到Linux内核的移植,实现了Windows网络接口设备驱动程序在Linux系统上的运行[9]。如果要让Linux系统广泛支持各种Windows设备驱动程序,就需要修改Linux内核,在内核中实现Windows设备驱动的完整框架和Windows的设备驱动支撑界面,目前这项工作还处于研究阶段[10]。
与设备驱动程序不同,应用程序是在操作系统用户空间运行的软件,一般使用应用程序编程接口API(Application Programming Interface)来完成其任务。Linux与Windows是异构的操作系统,两者所提供的API是不同的,这就导致两者不能直接运行对方的应用程序。在不修改本地操作系统与异地应用程序源代码的前提下,为了给跨操作系统运行的二进制可执行程序提供其正确运行所必需的API调用,可以采用API仿真技术(即程序库级虚拟化技术)在本地操作系统内核与异地应用程序的进程之间(在本地操作系统的用户空间)创建一个API仿真服务进程,该进程通过进程间通信机制负责将异地应用程序的进程所需的异地API调用转化为本地API调用,其实质就是跨进程的系统调用[10]。开源软件Wine是目前最成功的在Linux系统上运行Windows应用程序的