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