移植需要考慮的幾個相關(guān)的因素:
o 編譯器語言 o 代碼中與硬件相關(guān)的因素(如字長或字節(jié)尾附屬物) o 平臺運(yùn)行時服務(wù) o 構(gòu)建工具附屬物 o 可用的數(shù)據(jù)庫、聯(lián)網(wǎng)條件和消息傳遞中間件 o 用戶界面可移植性 o 測試案例和測試環(huán)境移植工作的規(guī)模和復(fù)雜性將與系統(tǒng)和環(huán)境相關(guān)的代碼直接成正比。如果應(yīng)用程序只使用標(biāo)準(zhǔn)語言構(gòu)件和標(biāo)準(zhǔn)庫,而且并不一定要在 SPARC 處理器上的 Solaris 下運(yùn)行,那么移植就相對容易一點(diǎn)。舉例來說,Java 應(yīng)用程序通常就屬于這個范疇。另一方面,如果應(yīng)用程序是不使用 Solaris 上的 POSIX 服務(wù)的 C 程序,或者依賴于 Linux 上沒有的第三方產(chǎn)品,那么移植工作就困難多了。當(dāng)您移植應(yīng)用程序時,很多情況下您都是在將不可移植的方法和附屬物替換成可移植性更好的東西。您會將 Solaris 構(gòu)建工具替換成 GNU 工具,并使用與 POSIX 相容的線程庫代替 Solaris 中對應(yīng)的庫。因?yàn)檫@些工具和接口在 Solaris 上也能找到,所以您可以繼續(xù)自由地使用 Solaris,甚至在將開發(fā)平臺移植到 Linux 之后繼續(xù)把握 Solaris 市場。
步驟 1:在 Solaris 上用 GNU 工具(GCC/gmake)構(gòu)建 C/C++ 應(yīng)用程序
GCC(GNU Compiler Collection)工具套裝包括一個 C 編譯器和一個 C++ 編譯器。因?yàn)?Solaris 和 Linux 中都有 GNU 編譯器和 make 實(shí)用程序,所以要用這些工具開始構(gòu)建應(yīng)用程序相對來說比較容易。首先,請您用上面的鏈接下載 GNU 工具,并將它們安裝在 Solaris 上。然后,請您試著用 GNU gmake 實(shí)用程序(而不是 Solaris make 實(shí)用程序)來構(gòu)建應(yīng)用程序。因?yàn)?GNU gmake 實(shí)用程序與 Solaris make 實(shí)用程序有所不同,所以根據(jù)您的 make 文件中使用的構(gòu)件,您會碰到 GNU gmake 實(shí)用程序生成的一些錯誤消息。請使用上面的 make 工具文檔鏈接來幫您識別 make 文件中的問題區(qū)域,并相應(yīng)地調(diào)整 make 文件。 一旦您將 make 文件修改為使用 gmake,請?jiān)?make 文件中將被調(diào)用的 C 編譯器的名稱從 cc 改為 gcc ,并將 C++ 編譯器的名稱從 CC 改為 g++ 。然后重新構(gòu)建應(yīng)用程序。您在構(gòu)建過程中會碰到的錯誤消息(如果存在的話)可以分為兩類:命令行選項(xiàng)問題和代碼問題。請辨別出那些由于 GNU 和 Sun 編譯器接受的命令行選項(xiàng)中有所區(qū)別而產(chǎn)生的消息。除了少數(shù)幾個基本選項(xiàng)(如“-c”和“-g”)之外,編譯器接受的多數(shù)選項(xiàng)都不同。 下面,您就可以處理剩下與代碼相關(guān)的錯誤消息和警告信息了。處理這些消息的一種簡單的方法是將它們捕獲在一個文件中,并挨個檢查。請使用上面的編譯器文檔鏈接來了解和處理編譯器之間不同的問題。本文的 遷移工具和外包部分給出了一個公司列表,這些公司可以幫助您在應(yīng)用程序中解決那些由于編譯器不同而產(chǎn)生的問題。 在移植到 Linux 和將應(yīng)用程序鏈接到開放源代碼庫時,請注意與這些庫相關(guān)的許可證和版權(quán)。您新移植的 C/C++ 應(yīng)用程序至少將被鏈接到 GNU C/C++ 運(yùn)行時庫。這些庫受 GNU“copyleft”許可證的保護(hù)。如果您正在移植的軟件有專有屬性,而且您打算在用 GNU 工具構(gòu)建該軟件之后馬上出售它,那么您最好謹(jǐn)慎地全面理解 GNU 通用公共許可證和 GNU 次通用公共許可證(請參閱 參考資料)中規(guī)定的條款和條件。一旦您的軟件被鏈接到由這些許可證保護(hù)的庫上,GNU 許可證中的某些條款和條件就將沿用到您的軟件上。
步驟 2:(可選的)在 SPARC 的 Linux 上構(gòu)建和測試應(yīng)用程序
有一種不常見的情況,那就是被移植的應(yīng)用程序有對 SPARC 硬件特定的附屬物,這時步驟 2 就變成移植過程中重要的中間階段了。它使 Solaris 開發(fā)者能夠在不放棄底層 SPARC 硬件和不修改應(yīng)用程序中特定于 SPARC 的部分的前提下熟悉 Linux 環(huán)境。 請通過上面的鏈接之一來獲取可以在您的 Sun 硬件上運(yùn)行的 Linux 版本。然后安裝操作系統(tǒng),使用所提供的 GNU 工具重新構(gòu)建應(yīng)用程序。因?yàn)槟诓襟E 1 中使用 GCC 構(gòu)建了應(yīng)用程序,所以在步驟 2 中將碰到的區(qū)別將被限制到 Solaris 和 Linux 之間的運(yùn)行時應(yīng)用程序編程接口(application programming interface,API)的區(qū)別。
步驟 3:在 Linux 上為其它硬件構(gòu)建和測試應(yīng)用程序
在遷移過程的最后一個步驟中,首先請獲取并在您選擇的目標(biāo)硬件上安裝 Linux。可以直接使用 Linux 的服務(wù)器有 IBM 基于 Intel-IA32 的產(chǎn)品系列(包括 NetVista、IntelliStation、Netfinity)和新的 IBM eServer xSeries。IBM pSeries 和 zSeries 也可以使用 Linux(請參閱 參考資料)。您可以低價(jià)購得或免費(fèi)下載流行的用于 Intel/x86 的 Red Hat Linux 分發(fā)版,而且它在幾乎任何一臺基于 Intel 的 PC 機(jī)上都很容易安裝和設(shè)置。SuSE 提供支持 IBM pSeries 和 zSeries 的 Linux 分發(fā)版。還有,您一定要安裝將使用的編譯器和工具。
其它注意事項(xiàng)
* 系統(tǒng)管理
總的來說,管理 Linux 與管理任何其它 UNIX 操作系統(tǒng)都幾乎一樣。在某些具體的命令和任務(wù)上有一些區(qū)別,IBM 和 UNIXGuide 已經(jīng)發(fā)布了比較圖,總結(jié)了這些區(qū)別,其中不僅包括 Solaris 和 Linux 之間的區(qū)別,還包括 AIX 和其它版本的 UNIX 之間的區(qū)別(請參閱 參考資料)。有經(jīng)驗(yàn)的 Solaris 系統(tǒng)管理員不必花費(fèi)太大氣力就能夠完全適應(yīng) Linux。
* 源代碼管理
對于目前正在使用 Solaris 上的 Sun Forte TeamWare 或者 SCCS(Source Code Control System,源代碼控制系統(tǒng))并希望繼續(xù)使用 SCCS 這種風(fēng)格的源代碼管理系統(tǒng)的開發(fā)者來說,他們可以試著使用 GNU CSSC(Compatibly Stupid Source Control),開放源代碼 SCCS 的克隆版本。CVS(Concurrent Versions System,并發(fā)版本系統(tǒng),請參閱 參考資料)是 Linux 上更常用而且倍受推崇的源代碼管理系統(tǒng)。
* 其它第三方工具、實(shí)用程序和庫
Solaris 上有很多常見、流行的第三方工具、實(shí)用程序和庫,它們都可以在 Linux 上使用。鑒于 Linux 的日益普及,支持 Linux 的第三方供應(yīng)商的數(shù)目每天都在增長。
* 64 位計(jì)算
Red Hat 和很多其它發(fā)行商為 Compaq/DEC Alpha 提供了一種 64 位版的 Linux。您可以在 AlphaLinux Web 站點(diǎn)上了解關(guān)于這種 Linux 的其它信息。64 位的 Solaris 和 64 位的 Linux/Alpha 都使用 LP64 數(shù)據(jù)模型,它能夠帶來很好的兼容性。 不久,Intel Itanium(TM) IA-64 處理器也能使用一種 64 位版的 Linux。您可以在 IA-64 Linux Project Web 站點(diǎn)了解關(guān)于這種 Linux 的更多信息。一種支持 IBM 64 位 PowerPC 體系結(jié)構(gòu)的 Linux 也在開發(fā)之中。 請注意,盡管 SuSE Linux/UltraSPARC 的內(nèi)核運(yùn)行在 64 位的模式中,但 SuSE Linux/UltraSPARC 目前并不支持 64 位的用戶空間應(yīng)用程序。
* 端(Endian)格式
Sun SPARC 和 UltraSPARC 處理器以大端(Big Endian)格式存儲整數(shù)。如果您希望將應(yīng)用程序移植到小端(Little Endian)版本的 Linux(如 Linux/Intel)上,那么您就必須解決應(yīng)用程序中任何與端格式有關(guān)的問題,應(yīng)用程序才能夠正確運(yùn)行。您也可以選擇讓應(yīng)用程序使用 Linux/PowerPC、Linux/zSeries 或 Linux/SPARC,它們都是 Linux/Intel 之外的大端平臺。