从 Solaris 到Linux应用的移植
移植需要考虑的几个相关的因素:
o 编译器语言
o 代码中与硬件相关的因素(如字长或字节尾附属物)
o 平台运行时服务
o 构建工具附属物
o 可用的数据库、联网条件和消息传递中间件
o 用户界面可移植性
o 测试案例和测试环境移植工作的规模和复杂性将与系统和环境相关的代码直接成正比。如果应用程序只使用标准语言构件和标准库,而且并不一定要在 SPARC 处理器上的 Solaris 下运行,那么移植就相对容易一点。举例来说,Java 应用程序通常就属于这个范畴。另一方面,如果应用程序是不使用 Solaris 上的 POSIX 服务的 C 程序,或者依赖于 Linux 上没有的第三方产品,那么移植工作就困难多了。当您移植应用程序时,很多情况下您都是在将不可移植的方法和附属物替换成可移植性更好的东西。您会将 Solaris 构建工具替换成 GNU 工具,并使用与 POSIX 相容的线程库代替 Solaris 中对应的库。因为这些工具和接口在 Solaris 上也能找到,所以您可以继续自由地使用 Solaris,甚至在将开发平台移植到 Linux 之后继续把握 Solaris 市场。
步骤 1:在 Solaris 上用 GNU 工具(GCC/gmake)构建 C/C++ 应用程序
GCC(GNU Compiler Collection)工具套装包括一个 C 编译器和一个 C++ 编译器。因为 Solaris 和 Linux 中都有 GNU 编译器和 make 实用程序,所以要用这些工具开始构建应用程序相对来说比较容易。首先,请您用上面的链接下载 GNU 工具,并将它们安装在 Solaris 上。然后,请您试着用 GNU gmake 实用程序(而不是 Solaris make 实用程序)来构建应用程序。因为 GNU gmake 实用程序与 Solaris make 实用程序有所不同,所以根据您的 make 文件中使用的构件,您会碰到 GNU gmake 实用程序生成的一些错误消息。请使用上面的 make 工具文档链接来帮您识别 make 文件中的问题区域,并相应地调整 make 文件。 一旦您将 make 文件修改为使用 gmake,请在 make 文件中将被调用的 C 编译器的名称从 cc 改为 gcc ,并将 C++ 编译器的名称从 CC 改为 g++ 。然后重新构建应用程序。您在构建过程中会碰到的错误消息(如果存在的话)可以分为两类:命令行选项问题和代码问题。请辨别出那些由于 GNU 和 Sun 编译器接受的命令行选项中有所区别而产生的消息。除了少数几个基本选项(如“-c”和“-g”)之外,编译器接受的多数选项都不同。 下面,您就可以处理剩下与代码相关的错误消息和警告信息了。处理这些消息的一种简单的方法是将它们捕获在一个文件中,并挨个检查。请使用上面的编译器文档链接来了解和处理编译器之间不同的问题。本文的 迁移工具和外包部分给出了一个公司列表,这些公司可以帮助您在应用程序中解决那些由于编译器不同而产生的问题。 在移植到 Linux 和将应用程序链接到开放源代码库时,请注意与这些库相关的许可证和版权。您新移植的 C/C++ 应用程序至少将被链接到 GNU C/C++ 运行时库。这些库受 GNU“copyleft”许可证的保护。如果您正在移植的软件有专有属性,而且您打算在用 GNU 工具构建该软件之后马上出售它,那么您最好谨慎地全面理解 GNU 通用公共许可证和 GNU 次通用公共许可证(请参阅 参考资料)中规定的条款和条件。一旦您的软件被链接到由这些许可证保护的库上,GNU 许可证中的某些条款和条件就将沿用到您的软件上。
步骤 2:(可选的)在 SPARC 的 Linux 上构建和测试应用程序
有一种不常见的情况,那就是被移植的应用程序有对 SPARC 硬件特定的附属物,这时步骤 2 就变成移植过程中重要的中间阶段了。它使 Solaris 开发者能够在不放弃底层 SPARC 硬件和不修改应用程序中特定于 SPARC 的部分的前提下熟悉 Linux 环境。 请通过上面的链接之一来获取可以在您的 Sun 硬件上运行的 Linux 版本。然后安装操作系统,使用所提供的 GNU 工具重新构建应用程序。因为您在步骤 1 中使用 GCC 构建了应用程序,所以在步骤 2 中将碰到的区别将被限制到 Solaris 和 Linux 之间的运行时应用程序编程接口(application programming interface,API)的区别。
步骤 3:在 Linux 上为其它硬件构建和测试应用程序
在迁移过程的最后一个步骤中,首先请获取并在您选择的目标硬件上安装 Linux。可以直接使用 Linux 的服务器有 IBM 基于 Intel-IA32 的产品系列(包括 NetVista、IntelliStation、Netfinity)和新的 IBM eServer xSeries。IBM pSeries 和 zSeries 也可以使用 Linux(请参阅 参考资料)。您可以低价购得或免费下载流行的用于 Intel/x86 的 Red Hat Linux 分发版,而且它在几乎任何一台基于 Intel 的 PC 机上都很容易安装和设置。SuSE 提供支持 IBM pSeries 和 zSeries 的 Linux 分发版。还有,您一定要安装将使用的编译器和工具。
其它注意事项
* 系统管理
总的来说,管理 Linux 与管理任何其它 UNIX 操作系统都几乎一样。在某些具体的命令和任务上有一些区别,IBM 和 UNIXGuide 已经发布了比较图,总结了这些区别,其中不仅包括 Solaris 和 Linux 之间的区别,还包括 AIX 和其它版本的 UNIX 之间的区别(请参阅 参考资料)。有经验的 Solaris 系统管理员不必花费太大气力就能够完全适应 Linux。
* 源代码管理
对于目前正在使用 Solaris 上的 Sun Forte TeamWare 或者 SCCS(Source Code Control System,源代码控制系统)并希望继续使用 SCCS 这种风格的源代码管理系统的开发者来说,他们可以试着使用 GNU CSSC(Compatibly Stupid Source Control),开放源代码 SCCS 的克隆版本。CVS(Concurrent Versions System,并发版本系统,请参阅 参考资料)是 Linux 上更常用而且倍受推崇的源代码管理系统。
* 其它第三方工具、实用程序和库
Solaris 上有很多常见、流行的第三方工具、实用程序和库,它们都可以在 Linux 上使用。鉴于 Linux 的日益普及,支持 Linux 的第三方供应商的数目每天都在增长。
* 64 位计算
Red Hat 和很多其它发行商为 Compaq/DEC Alpha 提供了一种 64 位版的 Linux。您可以在 AlphaLinux Web 站点上了解关于这种 Linux 的其它信息。64 位的 Solaris 和 64 位的 Linux/Alpha 都使用 LP64 数据模型,它能够带来很好的兼容性。 不久,Intel Itanium(TM) IA-64 处理器也能使用一种 64 位版的 Linux。您可以在 IA-64 Linux Project Web 站点了解关于这种 Linux 的更多信息。一种支持 IBM 64 位 PowerPC 体系结构的 Linux 也在开发之中。 请注意,尽管 SuSE Linux/UltraSPARC 的内核运行在 64 位的模式中,但 SuSE Linux/UltraSPARC 目前并不支持 64 位的用户空间应用程序。
* 端(Endian)格式
Sun SPARC 和 UltraSPARC 处理器以大端(Big Endian)格式存储整数。如果您希望将应用程序移植到小端(Little Endian)版本的 Linux(如 Linux/Intel)上,那么您就必须解决应用程序中任何与端格式有关的问题,应用程序才能够正确运行。您也可以选择让应用程序使用 Linux/PowerPC、Linux/zSeries 或 Linux/SPARC,它们都是 Linux/Intel 之外的大端平台。