【问题标题】:Self-distributing proprietary software on Linux? [duplicate]在 Linux 上自行分发专有软件? [复制]
【发布时间】:2012-12-27 18:55:30
【问题描述】:

可能重复:
What’s the best way to distribute a binary application for Linux?

我们想在 Linux 上发布一款专有游戏。游戏比较简单,有一个用C++编写的自定义引擎。我们一直在 Windows 上使用 MinGW 编译器,有人在 Linux 中使用 g++ 编译器进行编程和测试。

游戏完全使用开源库编写,都是跨平台的。

推荐什么方法可以让一个适用于 Linux 的程序在所有 Linux 发行版上运行而不需要对其中任何一个进行打包?对我来说,理想的方法是将其打包为 .zip 或 tarball 并提供下载,就像 Windows 下与系统库一起使用的良好 ol' .exe 文件一样。

我在 Linux 下玩过的大多数提供此类下载的游戏都提供了一个启动它的 shell 脚本(这本身就是一个兼容性问题!)。我对此没有任何问题,但它散发出 对用户不友好的感觉。此外,许多游戏需要额外的库。例如,流行库的硬件加速新版本 SDL 2.0 尚未在大多数发行版的存储库中可用,但已知有几个游戏使用它,我不得不自己编译它。这更糟。

我想要一个解决方案,客户可以在他们选择的文件管理器中单击二进制文件,它会运行,而不需要'apt-getting'或'yumming'必要的库。我不介意打破标准,如果它必须进入 /opt,它会。

【问题讨论】:

  • 直接二进制没有任何 apt-getting/'yumming' 等?祝你好运。
  • 包管理器的全部意义在于处理您的程序所依赖的库,因此您不必自己检查所有库。这绝对是要走的路。
  • "no 'apt-getting' or 'yumming'" 您最后一次在没有安装程序帮助的情况下安装 Windows 程序是什么时候?

标签: c++ linux


【解决方案1】:

我想要一个解决方案,客户可以在他们选择的文件管理器中单击二进制文件,它会运行,而不是“apt-getting”或“yumming”。我不介意打破标准,如果它必须进入 /opt,它会。

首先,你要明白“yumming”和“apt-getting”并不是真正的应用程序(包)的安装程序,它们只是用于查找/下载/更新/跟踪的前端程序存储库上的包(来自发行版和您手动添加的其他包)。所以,当你说“没有 'apt-getting' 或 'yumming'”时,我们必须假设你的意思是你不想把你的游戏放在存储库上,如果你想让人们付费,这是有道理的获取您的游戏(相对于其他专有但免费的软件,如闪存、图形驱动程序、视频编解码器以及您通常在存储库中找到的其他东西)。

所以,实际上只有两种类型的包管理系统,RPM 和 DEB,它们分别使用命令行程序 rpmdpkg 来实际进行安装。大多数发行版还带有用于这些程序的 GUI 前端(不是 Synaptic 风格的包管理软件(它是 apt-get 或 yum 的 GUI 前端),但更简单一些)。当您双击 .deb.rpm 文件时,在大多数发行版上,您会弹出此 GUI 前端,要求您提供管理员凭据并告诉您所需的依赖项,显然,您即将将此软件包安装到您的系统上。据我所知,这正是你想要的。因此,您需要为您的游戏的 32 位和 64 位版本提供一个 .deb 文件(对于 Debian 发行版)和一个 .rpm(对于 Red Hat 发行版),就像我假设您提供一个 @适用于您的 Windows 版本的 987654327@ 文件。

对于用户可能难以找到的依赖项。您应该做的是在安装程序的某个目录中包含一些用于这些深奥依赖项的附加(“推荐”版本)包,以便如果无法从发行版的存储库中获取较新版本,则可以从这些脱机包中安装它们。就是这样。

您可以让人们付费为您的游戏获取 deb 或 rpm 安装程序,或者包含某种许可证密钥系统来解锁游戏(从而使 deb/rpm 文件可供下载并收费用于解锁它的钥匙/密码)。

对我来说,理想的方法是将其打包为 .zip 或 tarball 并提供下载,就像 Windows 下与系统库一起使用的良好 ol' .exe 文件一样。

理想?真的!?!是的,如果您所做的只是使用系统库,那么它将起作用。但如果还有更多,那将是一场噩梦(几乎和在 Windows 下一样糟糕,你不依赖安装程序)。

游戏完全使用开源库编写,都是跨平台的。

确保这些开源库均未获得 GPL 许可,因为如果是这种情况,您就无法将您的游戏设为专有。您的依赖项必须获得 LGPL 或 BSD 或类似许可的许可,因此请注意这一点。

【讨论】:

  • +1 表示注释。许可。这个问题听起来很可疑。
  • 哇,谢谢。我实际上指的是发行版存储库中可用的不同版本的库的问题,等等我们使用的库。至于库,不,不是 GPL,到底哪个白痴将低级库发布为 GPL?但是,是的,我想它必须被打包。
【解决方案2】:

让 Linux 程序运行的推荐方法是什么? 所有 Linux 发行版都不需要打包?

这是建议开始的。所以你需要不推荐的方式来做到这一点。我想这意味着生成一个静态链接的二进制文件(无论如何你都需要一个 32 位和一个 64 位版本)。

推荐的方法是决定一个分发系统(RPM、DEB、...)并验证对各种目标平台的依赖关系。然后用户可以单击安装程序包 - 就像他/她对 Windows MSI 文件所做的那样 - 并且以后也能够卸载/升级程序。

请注意,在实践中,即使您分发了静态二进制文件,您也必须为目标平台提供测试平台环境,因为您无法避免进行测试。到那时,打包 RPM/DEB/etc 并不会真正显着增加时间消耗;另一方面,它会使包更紧凑,更容易下载和安装。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多