在Linux上发布软件时支持的Linux发行版/版本

3
我们即将发布几款支持Linux的软件。
至于Mac和Windows,我们要支持的版本数量相当有限(WinXP、Win2000、WinVista、Win7,以及Mac 10.4-6)。但对于Linux来说,情况就不同了。
我们希望尽可能地支持多种Linux发行版,但选择很多。
问题是:
  • 为了支持尽可能多的Linux,应该使用哪种分发格式(二进制文件)?
  • 在测试时,我们可以基于哪个“基础Linux”进行测试,并将结果扩展到其他Linux。
  • 如果我们提供具有所有依赖项的静态链接二进制文件,需要检查什么?我想知道的是内核版本和libc版本。
我们的软件使用符合ANSI标准的C语言编写,还包含一些BSD和POSIX功能(如gettimeofday、pthreads)。
5个回答

3
所以你认为Mac和Windows各需要三个版本是正常的,但你却对Linux望而却步?嗯。只需确保使用标准工具链——传统的configuremakemake install构建即可。其余的应该会自动处理。
否则,选择你熟悉的内容。对我来说,那将是Debian/Ubuntu,其他人可能更喜欢Fedora。查看Linux标准基础和类似FreeDesktop.org的其他标准。除非你正在进行非常专门的硬件或驱动程序相关工作,否则内核和libc不应该有影响。

我们在Linux上使用SCons进行构建,这样做有问题吗? - Nicolas Goy
SCons可以工作,还有许多其他跨平台构建系统也可以。这不应该成为一个问题,并且大多数这些系统都有充足的文档在网上(和SO上)可供参考。 - Dirk Eddelbuettel

0
内核力求维护向后兼容的二进制API。对于静态链接的1.0系列内核的二进制文件来说,它们应该仍然可以在最新的2.6系列内核上正常运行至今。
如果您使用静态链接包括libc在内的所有内容,那么您可能会面临的主要问题是不同的文件系统安排,但这对您来说甚至可能不是一个大问题。(测试是唯一的方法,不过)。

这意味着较低的内核版本将是最低要求吗?关于文件系统,我们只使用C89文件访问函数。 - Nicolas Goy
我只是指文件/目录的位置,这可能会因发行版而略有不同(但对于您的应用程序可能不是问题)。 - caf

0
一个想法是调查你的潜在客户群,看看他们运行哪个Linux版本,并根据他们的反馈制定一个简短的列表。然而,从我所知道的(这是主观的!)...
我建议运行两种不同的发行版类型——rpm和.tar.gz。使用rpm可以满足最新的Fedora/openSUSE/RHEL/SLES(以及衍生的发行版,这是企业市场的相当大一部分)。通过静态链接,您已经解决了很多依赖问题,因此内核版本应该足够。
使用.tar.gz发行版可以满足“所有其他”用户,但要注意支持和配置问题,因为它们很快就会成为时间的浪费。
为了测试,拥有每个您选择支持的版本的虚拟机。这些也可以用于产品支持(我假设您需要提供产品支持??)我不会尝试在Linux版本之间推断结果,因为有太多隐藏的“陷阱”。

0

你可以针对内核和glibc版本发布静态编译的Linux二进制文件。你真正需要担心的只是兼容性破坏的修订版。如果你有时间,你可以在同一主机上设置交叉编译的所有内容。内核向后兼容。glibc则更加难以处理。

如果你想使用安装程序打包,可以假定文件路径为Linux标准基础路径。你在这里越灵活,就越好。我从来没有听说过客户抱怨收到二进制tarball,我建议提供这种方式。我曾经有过客户抱怨错误的假设。

最好的正式软件包格式可能是DEB(Debian Linux及其衍生品,如Ubuntu)和RPM(Red-Hat及其衍生品,如Cent-OS)之间。软件包很好用,但如果你不打算使用本地更新管理器,它们只会带来麻烦。

对于测试和构建,我个人推荐Gentoo。它相当原始,所以你可能要考虑Ubuntu作为第二选择。


0

这是你的产品管理团队需要解决的问题。一旦他们确定推出Linux版本是一个可行的想法(即在成本效益基础上),那么你就需要了解你的客户使用或希望支持哪些发行版。

原则上,你可以支持任何发行版,但你支持的越多,头痛的事情就越多,所以你希望尽可能地少支持。

  • 支持尽可能少的操作系统/架构组合,根据你的产品经理的判断
  • 尽快淘汰操作系统/架构
  • 只有在高级支持客户要求或为了获得大单时,才根据你的产品经理的决定接受新的操作系统/架构。

支持它们的难度主要取决于你的产品有多复杂(特别是依赖关系)以及其自动测试套件的完整性。增加支持的操作系统会限制你在库使用、内核功能使用等方面的手脚,并增加测试工作量,因此长期来看,这不是你想要的。

简而言之,这不是一个软件工程问题,而是一个产品管理问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接