Wine(“Wine Is Not an Emulator” 的縮寫)是一個兼容層,可以在多種 POSIX-compliant 操作系統(tǒng)(如 Linux、Mac OS 和 BSD 等)上運行 Windows 應(yīng)用程序。它不是一個仿真器,而是實現(xiàn)了 Windows API,使得 Windows 程序可以在非 Windows 環(huán)境下運行。值得注意的是,英語單詞“wine”意為葡萄酒。Wine使用 API 轉(zhuǎn)換技術(shù),將 Linux 對應(yīng)到 Windows 的函數(shù)來調(diào)用 DLL 以運行 Windows 程序。它可以在多種 unix 版本下運行,包括 Linux、FreeBSD 和 Solaris,也有適用于 Mac OS X 的版本。
Wine不需要 Microsoft Windows,因為它是完全開源和免費的軟件。它的發(fā)布基于 LGPL 許可證,完全公開源代碼,并且是免費分發(fā)的。Wine可以使用本地系統(tǒng)的 DLLs,也可以在沒有 Windows 副本的情況下運行。
關(guān)于Wine的真正含義,有人認(rèn)為“Wine Is Not an Emulator”只是一種娛樂性的說法,而真正的意思可能是 Windows Environment 的縮寫,即 WinE。無論如何,Wine 是一款免費、開源的兼容層,使得在 Linux、FreeBSD 或其他操作系統(tǒng)上運行一些 Windows 應(yīng)用程序成為可能。它也是 維爾福集團(tuán) 用來讓 Steam Deck 用戶在 Linux 驅(qū)動的手持設(shè)備上玩 Windows 游戲的 Proton 軟件的基礎(chǔ)。
版本
可提供下載的一共有三個版本:
其他版本
雖然可運行大部份視窗程序,但只能有限度地運行以DirectX所編寫的游戲,亦即是很多游戲不能在其運行
Wine的延伸計劃主要有兩大產(chǎn)品,一個是CodeWeavers開發(fā)的CrossOver,另一個是TransGaming Technologies的Cedega。
CrossOver Office以提供應(yīng)用軟件支持為主,Cedega則鎖定在游戲娛樂方面。CodeWeavers和Wine計劃一直保有密切的合作關(guān)系。CodeWeavers亦雇用了Alexandre Juillard以將CrossOver Office的源代碼回饋給Wine。在2005年6月22日,CodeWeavers 宣布支持基于英特爾處理器的iMac。
Transgaming的Cedega則是商業(yè)軟件,以Wine為基礎(chǔ),在Wine更換授權(quán)后停止使用Wine的源代碼,雖然有Cedega提供源代碼下載(經(jīng)由CVS),但在不包含專利技術(shù)的情形下,功能與可用性都不高。
早期發(fā)展
Wine計劃是在1993年由Bob Amstadt及Eric Youngdale發(fā)起的,最初的目的是為了使16位的Windows 3.1的程序可以在Linux上運行,但現(xiàn)在已將目的變?yōu)槭?2位的視窗程序在Linux上運行。
Wine雖然是為Linux而制,但亦能支持FreeBSD、Mac OS X(英特爾版)與Solaris-x86。
因為Windows的DLLs是封閉源代碼的,所以程序員只能由最底層的設(shè)計開始,耗費大量的時間來編寫和測試,最后達(dá)至兼容。但這個過程往往會有很多困難,而且亦可能會出現(xiàn)很多錯誤。
當(dāng)Corel參加這個計劃后,Wine很快便能兼容WordPerfect Office,但Corel后來停止了支持這個計劃。
編譯安裝
確保你的Linux上已經(jīng)安裝了gcc編譯器。
如果你安裝了編譯所需要的軟件(如 GCC flex bison fontforge ),就可以進(jìn)行編譯了。
首先,訪問官方網(wǎng)站下載最新版本的 Wine,解壓到一個目錄
打開終端("Terminal"),輸入以下命令:
cd <你解壓的目錄> #進(jìn)入目錄
即可完成 Wine 的編譯。
▲注意:
1.編譯Wine一般需要一個小時(視機(jī)器性能而定),若你是剛剛接觸Linux 不久的人,最好不要進(jìn)行編譯。
2.編譯安裝出現(xiàn)問題,多半是軟件依賴沒有安裝,請留意輸出的錯誤信息。
3.建議能用軟件包(如.deb)安裝的就盡量別用源碼編譯安裝了,用軟件包安裝的可以通過包管理器進(jìn)行版本管理,便于及時更新WIne,編譯安裝的就得靠你自己了(尤其是你裝了開發(fā)版本(Development branch)的Wine,不及時更新可能會有很多bug)
下載安裝
若你使用 Debian 或者 Ubuntu 之類的發(fā)行版,只需要一個命令即可完成安裝:
sudo?APT?install wine
請注意:由這種方法安裝的Wine通常不是最新版本。要獲取最新版,請使用由官方網(wǎng)站上下載安裝包、添加ppa源(針對Ubuntu用戶)等方法或直接編譯安裝。
若你使用的為其他發(fā)行版,請訪問官方網(wǎng)站下載區(qū)查詢安裝方法
這里介紹Wine官方給出的在Ubuntu環(huán)境下的安裝方法:
配置
安裝后在終端運行命令(不需要root權(quán)限)
運行后會讓你安裝一些必要插件,確認(rèn)即可。
之后彈出的窗口里面有詳盡的配置。
注意:Wine 1.1.27以上版本的 winecfg 已經(jīng)是中文界面了。
最新版本的Wine已經(jīng)可以模擬Windows 10的環(huán)境了
中文亂碼
Wine 1.1.4 以上版本的中文支持得到了極大改善。如果您在使用較低版本的WINE或者對WINE的中文支持不滿意,可以把下面文字保存為 zh.reg 文件,運行 wine regedit 導(dǎo)入它即可
簡單方法
Wine可以在絕大多數(shù)的Unix/Linux版本下工作,但其仍不能完全運行所有的Windows程序。不過由于幾乎每個月都有新版本,越來越多的Windows程序已經(jīng)能在Wine的幫助下在Linux中運行。
1、直接運行程序
使用命令 wine
2、使用程序管理器
啟動管理器窗口,從菜單中選擇 文件(F)-執(zhí)行(X),就會彈出一個目錄瀏覽器,選擇程序即可。
3、直接雙擊 EXE 程序
一些發(fā)行版安裝WINE時會自動關(guān)聯(lián)EXE程序,這樣直接雙擊可以運行。
某些簡單程序可直接運行,而不需要安裝。大部分Windows軟件的安裝,請由Wine打開安裝包(exe文件)然后和Windows下以同樣的方法安裝程序即可。這樣安裝的程序應(yīng)當(dāng)會在桌面環(huán)境的程序列表中自動添加快捷方式(和Windows下的快捷方式類似),選擇即可運行程序。
單擊右鍵,選擇打開方式也可以選擇Wine打開。
▲注意:Wine運行某些程序,如MS Office、迅雷、QQ、某些游戲等的兼容性仍不完善。要正常使用此類軟件,可以以完全的虛擬機(jī)代替(如VirtualBox、威睿),或者在網(wǎng)上搜索查找已知的解決方法或針對特定軟件的安裝包。
可用性
可以做什么
本文中,我們討論的是 Wine 在純 Linux 上的安裝,沒有任何 Windows 分區(qū)。
1. Windows可執(zhí)行文件:
Wine 完全支持 Windows可執(zhí)行文件( .exe 和 DLL)的二進(jìn)制加載。
2. DLL:
Wine 有幾百個 Windows DLL 的內(nèi)部實現(xiàn) -- 不過,其中沒有多少是完全的實現(xiàn)。例如,包含有用戶界面相關(guān)函數(shù)的 userd32.dll 在開放源代碼的 Wine 中實現(xiàn)了 92%。
3. COM:
這是一種幾乎被所有的大型 Windows應(yīng)用程序所使用的 Windows 技術(shù),它支持諸如將一個 Excel 電子數(shù)據(jù)表嵌入到 Word 文檔中等功能。這一技術(shù)得到了 Wine 的很好的支持。
4.注冊表:
這是另一個幾乎任何一個 Windows應(yīng)用程序都會使用的關(guān)鍵技術(shù),Wine 實現(xiàn)了大約 90% 的 Windows 注冊表管理 API。
5. 核心功能:
核心系統(tǒng)功能也得到了特別好的支持。如前面提到的,盡管 Linux 和 Windows 之間存在區(qū)別,但是基本的層次上還有很多類似之處,因此與進(jìn)程、線程、文件和消息隊列相關(guān)的核心系統(tǒng) API 得到了近乎完美的支持。
6. 音頻和視頻:
Wine 支持 Windows 音頻和視頻文件的運行(還可以使用 Windows媒體播放器)。
7. 打印:
也得到了支持,可以從一個在 Wine 中運行的 Windows應(yīng)用程序進(jìn)行打印。
8.ODBC:
Wine 支持那些需要通過 ODBC 訪問數(shù)據(jù)庫的 Windows 應(yīng)用程序。
9. 調(diào)試:
Wine 有一個非常健壯和強(qiáng)大的內(nèi)置調(diào)試器,除了支持標(biāo)準(zhǔn)的調(diào)試功能外,它還為調(diào)試運行于 Linux 上的 Windows 二進(jìn)制程序進(jìn)行了定制。它是 Wine 為其開發(fā)者提供的最重要工具之一。Wine 還有一個設(shè)計完備的追蹤和記錄日志的模塊,可以幫助調(diào)試。我們之所以強(qiáng)調(diào)這一點,原因在于,盡管框架是健壯的,但是,當(dāng)在 Wine 中安裝和運行 Windows應(yīng)用程序時有很多不確定因素,在使用開放源代碼的 Wine 時遲早會停下來進(jìn)行調(diào)試。
不能做什么
不幸的是,很多用戶發(fā)現(xiàn) Wine 難于使用。誠然,在 Linux 上使用類似于 MS Office 這樣的應(yīng)用程序可能是困難的;在這里我們來看一些原因,為什么確實是這樣。在開始之前,我們應(yīng)該指出,CodeWeavers 提供的商用 Wine (CrossOver)已經(jīng)解決了大部分此類問題(參閱參考資料以獲得鏈接)。假以時日,這些問題將可能在開放源代碼的 Wine 中同樣得到解決。
1. 使用命令行(早期版本)
與大部分 Linux 中的應(yīng)用程序一樣,在開發(fā)早期 Wine 必須在命令行中安裝。用戶必須回到命令行中來在 Wine 下運行應(yīng)用程序。例如,要運行Internet Explorer,用戶通常需要在 shell 中輸入 wine IEXPLORE.EXE。盡管經(jīng)驗豐富的用戶喜歡這樣做,但初學(xué)者會發(fā)現(xiàn)這比較困難,而且不太可能懂得起別名等快捷方式。不過,在較新的版本中用戶也可以直接雙擊EXE文件運行(如果進(jìn)行了關(guān)聯(lián))。盡管這樣會給查看錯誤信息帶來困難,但這無疑極大地方便了用戶的使用。
2. 配置
Wine 的配置較為復(fù)雜。除了命令行,較新的版本已經(jīng)有了簡體中文的界面,對于初學(xué)者來說,配置簡單了不少。
3. 取消對隱藏文件的隱藏
如果掛載 CDROM 時沒有使用專門的 unhide 選項,那么安裝 CD 上的隱藏文件可能會無法找到,從而導(dǎo)致安裝失敗。
4. 額外的調(diào)整過程
Wine 安裝很少能直接使用(對它來說也就是從 tarfile 解開)。通常需要進(jìn)行全面的調(diào)整;例如,一個程序的安裝可能與您在配置文件中設(shè)置的 Windows 版本不相容;而修改那個版本又可能會影響一些已安裝的應(yīng)用程序。對很多 DLL 來說也是如此。為此,Wine 提供了一個巧妙的修復(fù),讓您可以設(shè)置特定于應(yīng)用程序的屬性,不過,一般的用戶可能不會像我們一樣滿意。
5. 額外的安裝步驟
大部分應(yīng)用程序的安裝過程都不是標(biāo)準(zhǔn)的。例如當(dāng)我們安裝 Internet Explorer 6 時,必須跳過一些步驟,比如 DCOM98 的定位與安裝。對用戶來說,這類事情可能是最大的障礙。
注意,這些并不是病癥,而是舉例說明了是哪些種類的事情導(dǎo)致對一般用戶來說 Wine 看起來復(fù)雜而且困難。
更多 Wine 所不能做的
看完 Wine 的可用性問題后,讓我們來總結(jié)在嘗試使用 Wine 時一些常見的技術(shù)問題。
1. 缺少DLL
這可能是最常見的問題:很多安裝由于缺少 DLL 而失敗,這時需要熟練使用調(diào)試器來決定下一步(稍后將深入討論調(diào)試器)。解決問題的最佳方法是由錯誤信息尋找到所需的DLL,并進(jìn)行安裝。這些都可能難倒初學(xué)者。
2. DLL 版本問題
一些安裝程序在開始之前會檢查現(xiàn)有的系統(tǒng) DLL。Wine 解決這一問題的方法是,創(chuàng)建假 DLL 以滿足安裝程序的需要。不過,有一些安裝程序會更進(jìn)一步并深入檢查 DLL 以獲得它們的版本。這對假的 DLL 來說要求太高了,會導(dǎo)致安裝失敗。
3. DLL 加載次序
Wine 有對很多 Windows DLL 的實現(xiàn),而且如果可用,它還可以使用原始的 Windows DLL。如果兩種 DLL 都可用,在初學(xué)者看來應(yīng)該選擇總是使用 Windows 自己的 DLL,但實際上 Windows DLL 有時會包含不能被滿足的依賴。要確定是更應(yīng)該使用 Wine 的 DLL 還是應(yīng)該使用本機(jī) DLL,惟一的方法是,基于各個應(yīng)用程序反復(fù)進(jìn)行試驗。
4. DLL 中的函數(shù)
當(dāng)一個 Wine DLL 沒有實現(xiàn) Windows 中相應(yīng)的 DLL 的全部功能時,應(yīng)用程序可能會遭遇函數(shù)調(diào)用失敗。由于 DLL 是動態(tài)加載的,可能沒有辦法事先知道會發(fā)生這樣的事情。這是一個復(fù)雜的問題,有一些可做的工作,但最終實際來說它只是取決于應(yīng)用程序的代碼如何編寫。
有一些因素會減輕這些問題。一方面,您可能會一個一個地遇到這些問題,而不是一次遇到全部問題,這樣處理起來要容易些。另外,您遇到的那些問題可能其他人曾遇到過并已經(jīng)解決(而且解決方案已經(jīng)公布出來)。Wine 用戶組非?;钴S,會提供許多幫助,每周一次的 Wine 時事通訊(參閱 參考資料)是極好的信息資源。
Wine 中還沒有實現(xiàn)的Win32 API
在 Wine 中,很多 Win32 API 的函數(shù)是殘缺不全的。最常見的原因是,相當(dāng)多的 Win32 API 并沒有被文檔化。這就意味著一個特別的應(yīng)用程序可能會調(diào)用某個函數(shù),而完全沒有關(guān)于此函數(shù)的可用資料。例如,我們在運行一個簡單的 RPC 程序時發(fā)現(xiàn)了 RtlAnsiCharToUnicodeChar 這個函數(shù)。在 MSDN 上的搜索結(jié)果顯示沒有關(guān)于這個函數(shù)的資料,而且沒有關(guān)于所有 RtlXXXX 類別函數(shù)的資料。因此,如果它們在 Wine 中的實現(xiàn)對一些應(yīng)用程序來說至關(guān)重要,那么人們可能只有去猜測它們的行為了。
參考資料 >
Wine 5.4 發(fā)布:微軟 Windows 應(yīng)用的兼容層.搜狐.2024-04-08
Wine 2.11開發(fā)版本更新日志:.快科技.2024-04-08
Wine 8.0 正式版發(fā)布:更好支持在 Linux 等系統(tǒng)上運行 Windows 應(yīng)用程序.IT之家.2024-04-08
Wine 8.5 發(fā)布:整合 VKD3D 1.7、修復(fù) 21 處 BUG.IT之家.2024-04-08