2024年12月29日 星期日

在 Linux 上運行 Windows 應用程式 --- WINE

什麼是WINE?

Wine 是一個相容層,能夠在多種 作業系統(例如 Linux、macOS 和 BSD)上運行 Windows 應用程式。 Wine 不是像虛擬機器或模擬器那樣模擬內部 Windows 邏輯,而是將 Windows API 呼叫即時轉換為 POSIX 調用,消除了其他方法的效能和記憶體損失,並允許您將 Windows 應用程式乾淨地整合到桌面中。


WINE 是如何工作的?

WINE 就是一個“兼容層”,它位於 Windows 軟件和 Linux 之間,將每個軟件的 “語言” 翻譯成另一個。它不是模擬器,因爲它沒有試圖模擬整個系統。根本沒有 Windows 仿真,只是在需要的地方進行了聰明而有效的翻譯。基本過程是這樣的: 

  • Windows 應用程序發出請求,如打開文件或顯示窗口。
  • WINE 攔截了這個請求,並將請求轉換爲本地 Linux 應用程序可能發出的等效請求。
  • Linux 執行請求,而 WINE 執行相同的操作,但是方向相反。


當然,在現實中,這種情況每秒鐘發生數百萬次,所以這個應用程序運行起來很像 Windows 系統。

 

爲什麼要用 WINE

如果你是一個 Linux 或者 macOS 用戶,使用 WINE 有很多好的理由,最明顯的就是你可以訪問那些沒有 Linux 等價物的 Windows 應用程序,或者沒有 Linux 端口。

WINE 也一直是讓 Windows 遊戲在 Linux 上運行的流行方式。現代的 Linux 遊戲,比如在 Stream Deck 上,使用了一種叫做 Proton 的特殊兼容層,它至少包含了一部分主要 wINE 程序的修改版本。


因爲它是一個兼容層,而不是一個模擬器或虛擬機,所以 wINE 不會增加太多的計算開銷。因此,這通常是獲得有用體驗的唯一途徑,例如,運行 Linux 的低端筆記本電腦。


WINE 也是一個偉大的 (和合法的) 方式來避免支付 Windows 時,你想做的只是運行一些特定的應用程序,只有微軟的流行操作系統可用。

WINE 的侷限性 (limitations)

雖然
WINE 現在的狀態很好,但它並不完美。並非所有的應用程序都能100% 使用 WINE,它的 API 轉換也並不完整。雖然這比其他方法的開銷要小,但是 WINE 仍然會增加開銷,而且在一些應用程序中,特別是那些圖形化程度較高的應用程序中,這可能是一個重要的問題。

WINE 的另一個限制是,讓一個特定的程序工作可,能需要大量的調整、測試和配置。畢竟,時間就是金錢,有時候只是購買並運行 Windows 來讓某些軟件工作會更便宜。您可以使用 WINEHQ 應用程序數據庫來檢查特定應用程序的工作情況,例如 AppB 主頁上的“ Platinum”應用程序列表。

應用程序是根據它們運行的好壞來排序的,你還可以得到關於你需要採用的任何特定問題或變通方法的信息。

WINE 的替代品

Proton,這是大多數人在 Linux 上應該,使用的遊戲,但是它被集成到了 Stream 中,這使得它對於那些不在 Valve 店面上的遊戲來說並不理想。

虛擬機也是 WINE 的一個很好的替代品,因爲現在甚至主流的 CPU 都有優秀的虛擬化支持,而這在 WINE 的大部分時間裏都是不正確的。如果需要在 VM 和本地 Linux 主機上的軟件之間移動文件或信息,虛擬機確實會使應用程序的集成度降低一些,但這是可以忍受的。

CrossOver 是一個基於 WINE 的付費商業兼容層,但是更加用戶友好,並且提供支持。


最後,你可以簡單地雙重啓動 Windows 和 Linux,如果你想喫你的蛋糕。

WINE 的未來

WINE 不會去任何地方,甚至它的替代品在某種程度上依賴於這個開源項目。有成千上萬的人以這樣或那樣的方式爲 WINE 做出貢獻,他們將不斷添加功能,提高性能,並使其與新舊軟件兼容。除非 Linux 以某種方式變得足夠流行,以說服大多數軟件開發人員爲其開發一個本地版本的應用程序,否則對 WINE 或類似的東西的需求將與 Linux 本身一樣長久。


Platinum List 

在這里你可以查找一些能夠完美安裝和運行的應用程式,例如 Adobe Photoshop CS6 (13.0) 、Guild Wars、Microsoft Word 2010 (32 bit) 等。









2024年12月27日 星期五

Linux 通用的應用程序管理 : Snap and Flatpak

曾几何时,在 Linux 操作系统上,要安装一個应用程序是一项挑战。

当我第一次开始使用 Linux 时,所有的应用程序都必须通过源代码d來安装。要安装 A,你必须安装 B,但是要安装 B,你必须安装 C,而要安装 C,你必须安装 D。等等,等等。这些所謂 dependencies,使得安裝應用程序變得非常之複雜。

之后,當 dpkg 和 rpm 出現後,我們可以通过二进制文件,安装应用程序,程序变得稍微容易了一些。然後,真正的变化還是来自 apt 和 yum (最终被 dnf 取代) 的创造。这些程序管理器,能够轻松地处理 dependencies。

但是还有一个兼容性的问题。

问题是: 当开发人员开創一个 Linux 軟件项目时,他们必须决定,是否要为所有 Linux 发行版、所有桌面环境、和所有窗口管理器,开創该软件。


这样的考慮,可能会变得无穷无尽,这就是为什么一个软件可能只适用于一个发行版,而不是所有发行版的原因。試想象一下,如果要为 Linux 世界中的每一个组合,开发一个应用程序,需要花费多少时间。


这就成為了创建通用包管理器的重大原因。

通用软件包 (Snaps or Flatpaks) 是一个包含所有必要依赖项 (dependencies) 的应用程序,并且不与托管平台的库交互。在某些情况下,通用软件包还会自动更新,比通过标准方式安装的应用程序更安全。

There are two main universal package managers, Snap and Flatpak.

是什么让 Snap 和 Flatpak 软件包如此特别?

开发 Snap 和 Flatpak 的原因之一就是为了消除传统包管理器的依赖性问题。Snap 和 Flatpak 的软件包,是包含软件包所需的所有软件,及所有依赖项。

因此,当你通过 Snap 或 Flatpak 來安装某个软件时,你不必担心安装其依赖项,因为 Snap 或 Flatpak 包已经为你解决了这个问题。


Snap 和 Flatpak 的区别:

 

Snap

Flatpak

Canonical 创建/维护

Red Hat 创造

提供予 desktops and/or servers.

提供予 desktops.

启动时间较慢

启动时间较快

有些应用程序作为 Snap 软件包执行得更好

有些作为 Flatpaks 软件包执行得更好

可以安装在许多 Linux 发行版上

可以安装在许多 Linux 发行版上

Snap 的核心是开源的,但是后端是私有的

Flatpak 完全是开源的

Snap 仅限于 Canonical Snap Store

Flatpak 是去中心化的

Snap packages 会自动更新

Flatpak packages 须手动更新


为什么 Snap 比 Flatpak 好?

Snaps 比 Flatpaks 更容易安装、维护和删除,而且它们可以自动更新到最新版本,每天最多可以更新四次。


所有 Snap 软件包 (snaps) 可以在 Canonical Snapcraft上查找得到。


所有 Flatpak 软件包 (flatpaks) 可以在  Flathub Store 上查找得到。