?
首先我們描述 Linux 的特征和它在開(kāi)發(fā)和管理應(yīng)用程序中的具體價(jià)值。接著,我們將回顧重要問(wèn)題,給出包含移植的主要步驟的移植指南。最后,我們以 IBM ~ zSeries? 為例,為您演示從一個(gè) Linux 平臺(tái)移植到另一個(gè)平臺(tái)是多么的容易。(zSeries 這個(gè)詞指 S/390? 和 zSeries。)
Linux 的特征和價(jià)值
開(kāi)放性意味著應(yīng)用程序靈活性:Linux 是真正的開(kāi)放系統(tǒng),這使應(yīng)用程序的可移植性成為現(xiàn)實(shí)。在很多情況下,一次簡(jiǎn)單的重編譯就能把應(yīng)用程序帶入 Linux。在優(yōu)化您的開(kāi)發(fā)和部署平臺(tái)時(shí),這種快速移植給您真正的靈活性。
多種硬件支持意味著平臺(tái)靈活性:Linux 幾乎可在所有已知的處理器上運(yùn)行,無(wú)論是 RISC 還是 CISC,32 位還是 64 位。它涵蓋全部類(lèi)型的計(jì)算機(jī),從大型機(jī)服務(wù)器(IBM ~ zSeries)到 PowerPC?、Sun? UltraSPARC、Alpha、PA-RISC 和 Intel 處理器,往下還有個(gè)人數(shù)字助理和嵌入式系統(tǒng)。特別是所有的 IBM ~ 品牌服務(wù)器都支持 Linux。
源代碼的可用性意味著自己動(dòng)手的靈活性:與多數(shù)以二進(jìn)制形式發(fā)行的商業(yè)軟件不同,Linux 內(nèi)核的源代碼是可以獲得的。您可以拿到源代碼,然后修改和重編譯它,以滿(mǎn)足您的特定要求。調(diào)試和解決問(wèn)題或增加新的特性不再依賴(lài)任何供應(yīng)商。您可以自己作出需要的更改,只要它們符合 GNU General Public License 的規(guī)定。
嚴(yán)肅的設(shè)計(jì)意味著安全性:Linux 安全性是從內(nèi)核上構(gòu)建的,由于實(shí)現(xiàn)它的代碼要接受成千上萬(wàn)的開(kāi)發(fā)者的檢驗(yàn),所以弱點(diǎn)會(huì)被及早地發(fā)現(xiàn)。Linux 中建有許多路由和防火墻功能。
流行意味著存在技能:因?yàn)?Linux 在大學(xué)和學(xué)院中流行,所以多數(shù)新的畢業(yè)生有 Linux 經(jīng)驗(yàn)。您幾乎可以在任何城市的 Linux 用戶(hù)組中找到該地區(qū)能夠熟練應(yīng)用 Linux 的人,而 Web 站點(diǎn)和因特網(wǎng)新聞組仍然是 Linux 使用指南信息和非正式技術(shù)咨詢(xún)的一種寶貴而有效的來(lái)源。
開(kāi)始前需考慮的重要問(wèn)題
移植到 Linux 可能是容易的、簡(jiǎn)單的和直接的,特別是當(dāng)您的 UNIX? 應(yīng)用程序的編寫(xiě)遵循公共的開(kāi)放的標(biāo)準(zhǔn)。如果您認(rèn)為移植到 Linux 是有吸引力的,那么您需要分析移植中涉及的潛在花費(fèi)和風(fēng)險(xiǎn)及減小它們的方法。
遷移會(huì)涉及巨額初始投資嗎?
成本 ― 移植將涉及巨大的時(shí)間、人員和金錢(qián)的初期投入嗎?該項(xiàng)目會(huì)凍結(jié)所有的其它新工作并消耗整個(gè)團(tuán)隊(duì)的資源嗎?需要提前支付大量資金費(fèi)用和再培訓(xùn)費(fèi)用嗎?這是不是冒著極大風(fēng)險(xiǎn)的提議:一旦開(kāi)始,要么完成,要么完全失敗?
移植到 Linux 是可管理的 ― 本文的移植指南部分講述怎樣一步一步地移植而每個(gè)中間步驟本身是穩(wěn)定的。這使您能根據(jù)您的優(yōu)先級(jí)管理成本、人員和項(xiàng)目。這意味著您可以獨(dú)立完成每一步,在完成每步后重新估計(jì)您的優(yōu)先級(jí)和目標(biāo)。這樣的結(jié)果是風(fēng)險(xiǎn)更容易被控制而給您的公司帶來(lái)的影響更小。
成本有多大?需要花多少時(shí)間?
花費(fèi)的時(shí)間和金錢(qián) ― 根據(jù)和移植有關(guān)的因素,全面估計(jì)您的應(yīng)用程序:
編譯器的差異;
您的代碼中與硬件相關(guān)的構(gòu)造(例如字的長(zhǎng)度或字節(jié)順序的相關(guān)性);
平臺(tái)運(yùn)行時(shí)服務(wù);
構(gòu)建工具的相關(guān)性;
數(shù)據(jù)庫(kù)、聯(lián)網(wǎng)和消息傳遞中間件的可用性;
用戶(hù)界面的可移植性;
測(cè)試案例和測(cè)試環(huán)境。
移植的工作量和復(fù)雜程度直接和依賴(lài)系統(tǒng)和環(huán)境的代碼的多少成正比。如果您的應(yīng)用程序只用標(biāo)準(zhǔn)的語(yǔ)言構(gòu)造和標(biāo)準(zhǔn)的庫(kù),那么移植起來(lái)相對(duì)容易些。例如,Java? 應(yīng)用程序常常屬于這一類(lèi)。反之,如果您的應(yīng)用程序是一個(gè) C 程序,其中用到 Solaris 上不符合 POSIX 的服務(wù)或依賴(lài)在 Linux 上沒(méi)有的第三方產(chǎn)品,那么移植難度將大大增加。通常,系統(tǒng)測(cè)試、配置的測(cè)試和軟件的安裝是重要步驟并且是移植的主要部分。
我的應(yīng)用程序還能在原來(lái)的 UNIX 平臺(tái)上運(yùn)行嗎?
緩解 ― 即使把開(kāi)發(fā)轉(zhuǎn)移到 Linux 后,您仍可以保持原來(lái)的平臺(tái)選擇,以滿(mǎn)足您的其它市場(chǎng)。移植到 Linux 通常意味著構(gòu)建工具被 GNU 工具替代,平臺(tái)相關(guān)的線(xiàn)程庫(kù)被符合 POSIX 的替代。在其它 UNIX 平臺(tái)上,GNU 工具和庫(kù)都能用,使您能同時(shí)兼顧您原來(lái)的平臺(tái)和 Linux。
C 和 C++ 應(yīng)用程序的移植指南
以下技術(shù)討論來(lái)自 Solaris to Linux porting guide(1)(ibm.com/developerworks/linux/library/l-solar/),這些討論也可被用于其它主流 UNIX 系統(tǒng)。
Linux 操作系統(tǒng)、構(gòu)建工具和多數(shù)語(yǔ)言的編譯器可免費(fèi)獲得并可從因特網(wǎng)上下載。為了開(kāi)始移植,您將需要提供硬件和開(kāi)發(fā)人員:
第 1 步 ― 下載所需的開(kāi)發(fā)工具和 Linux 分發(fā)版。
第 2 步 ― 改用 Linux 開(kāi)發(fā)工具但仍然運(yùn)行 Solaris。這種方法使得轉(zhuǎn)變更平緩。
第 3 步 ― 熟悉 Linux 操作系統(tǒng)但仍舊在 Sun 硬件上運(yùn)行。
第 4 步 ― 把應(yīng)用程序移到目標(biāo) Linux 平臺(tái)。
第 1 步:下載
以下列出的是所需的編譯器、構(gòu)建工具和相關(guān)的在線(xiàn)文檔鏈接:
GCC(GNU Compiler Collection)工具套件包含一個(gè) C 編譯器和一個(gè) C++ 編譯器
gcc.gnu.org/releases.html
在線(xiàn)文檔
gcc.gnu.org/onlinedocs/gcc-2.95.2/gcc_toc.html
Solaris GNU 編譯器和 make(gmake)實(shí)用程序
www.sunfreeware.com/
在線(xiàn)文檔
docs.sun.com/
gnu.org/manual/make-3.79.1/html_mono/make.html
Linux 可從以下 Linux 發(fā)行商那里獲得。
Caldera www.caldera.com/
Red Hat www.redhat.com/
SuSE www.suse.com/
Turbolinux www.turbolinux.com/
― Linux 的 UltraSPARC 版本
Sun www.sun.com
第 2 步:為 Solaris 上的 Linux 構(gòu)建您的 C/C++ 應(yīng)用程序
安裝工具 ― 先在 Solaris 上安裝 GNU 工具。由于 GNU 編譯器和 make 實(shí)用程序在 Solaris 和 Linux 上都能用,所以使用這些工具來(lái)嘗試初次構(gòu)建您的 Linux 應(yīng)用程序相對(duì)較容易。
轉(zhuǎn)換 makefile ― 構(gòu)建您的應(yīng)用程序時(shí)請(qǐng)用 GNU gmake 實(shí)用程序,別用 Solaris make 實(shí)用程序。根據(jù)您的 makefile 中用到的構(gòu)造,您可能遇到 GNU gmake 實(shí)用程序產(chǎn)生的錯(cuò)誤消息,因?yàn)?GNU gmake 實(shí)用程序和 Solaris make 實(shí)用程序是有區(qū)別的。請(qǐng)用 make 工具文檔來(lái)幫助找出 makefile 中有問(wèn)題的地方,然后對(duì) makefile 作出所需的調(diào)整。
編譯和調(diào)試 ― 當(dāng)您通過(guò)修改您的 makefile、使之能被 gmake 使用后,把 makefile 中調(diào)用 C 編譯器的名字 cc 改為 gcc,C++ 編譯器的名字 CC 改為 g++。然后編譯該應(yīng)用程序。您在構(gòu)建中所遇到的錯(cuò)誤消息,如果有的話(huà),可被分成兩類(lèi):命令行選項(xiàng)問(wèn)題和代碼問(wèn)題。
找出由于 GNU 和 Sun 編譯器所接受的命令行選項(xiàng)有所不同而產(chǎn)生的消息。除了幾個(gè)基本選項(xiàng)(例如“-c”和“-g”),兩個(gè)編譯器能接受的多數(shù)選項(xiàng)是不同的。請(qǐng)參閱編譯器文檔,修改您的 makefile,以適應(yīng)編譯器選項(xiàng)間的區(qū)別。
下一步,您可以處理剩下的與代碼有關(guān)的錯(cuò)誤消息和警告。請(qǐng)參閱編譯器文檔,理解并解決由于編譯器之間的差別而產(chǎn)生的問(wèn)題。
第 3 步:在 Linux 的 Sun UltraSPARC 版本上構(gòu)建和測(cè)試您的應(yīng)用程序。
如果所移植的應(yīng)用程序依賴(lài)特定的 UltraSPARC 硬件,那么這是移植過(guò)程中的重要階段。Solaris 開(kāi)發(fā)者有機(jī)會(huì)熟悉 Linux 環(huán)境而不必放棄下層的 UltraSPARC 硬件,也不必修改應(yīng)用程序中特定于硬件的部分。
安裝 Linux 環(huán)境 ― 在 Sun UltraSPARC 上,安裝 Linux 和 GNU 實(shí)用程序。
編譯并調(diào)試運(yùn)行時(shí) API ― 因?yàn)槟跇?gòu)建您的應(yīng)用程序時(shí)用的是 GNU 實(shí)用程序,所以您在這步看到的區(qū)別限于 Solaris 和 Linux 之間的運(yùn)行時(shí)應(yīng)用程序編程接口(application programming interfaces,API)的區(qū)別。如果您想了解這些區(qū)別的更多信息,請(qǐng)參閱運(yùn)行時(shí)接口部分(第 7 頁(yè))。對(duì)應(yīng)用程序作出所需的調(diào)整。測(cè)試― 當(dāng)應(yīng)用程序被完全地重新構(gòu)建后,進(jìn)行徹底的驗(yàn)證測(cè)試。
第 4 步:在目標(biāo) Linux 平臺(tái)上構(gòu)建和測(cè)試您的應(yīng)用程序。
安裝 Linux 環(huán)境 ― 在目標(biāo)硬件上安裝 Linux 和 GNU 工具。
復(fù)制并重新構(gòu)建應(yīng)用程序 ― 把您的源代碼樹(shù)和 makefile 復(fù)制到新的 Linux 機(jī)器上并重新構(gòu)建應(yīng)用程序。如果您沒(méi)完成第 3 步,那么您可能需要修改應(yīng)用程序,以適應(yīng) Solaris 和 Linux 之間運(yùn)行時(shí) API 的區(qū)別。最后,如果您的應(yīng)用程序包含任何特定于 UltraSPARC 的代碼,那么,請(qǐng)作出所需的修改,以解決那部分代碼的問(wèn)題。
修改安裝例程,以適應(yīng)目標(biāo) Linux 平臺(tái)。各種 Linux 平臺(tái)(分發(fā)版)的配置和啟動(dòng)文件的位置稍有不同。
測(cè)試 ― 在結(jié)束移植前,對(duì)移植的應(yīng)用程序運(yùn)行徹底的驗(yàn)證測(cè)試套件。另外,在目標(biāo) Linux 平臺(tái)上測(cè)試配置和安裝。
評(píng)論
查看更多