编写跨平台的C ++代码并不是那么容易
恰恰相反。当您计划跨平台工作并为您使用的特定于平台的API提供抽象时,您的绝大多数代码已经是跨平台的。如果您已经在使用诸如Boost或Qt或NSPR之类的流行库,那么您已经非常接近可以正常工作的跨平台构建了。
在开发周期后期进行移植时,最常遇到的问题是,在程序的某些部分中,有相当一部分代码依赖于平台特定的API,它们不需要直接使用它们,也可能根本不需要使用它们。(一个好的设计将具有高度解耦的模块,并且可以随意替换重写的类替换成组的类。如果对于给定的模块不是这种情况,则这是强烈的代码味道。)
最简单的方法通常是编写一个“实用程序”类,然后将所有特定于平台的内容扔在那里。这并非“轻松而轻松”,但肯定比您想像的要难。
准备大量分发包并为所有广泛的Linux版本维护它们需要时间
这是一个不幸的误解。虽然维护多个平台的构建确实需要付出额外的努力(在设置专用的每日构建服务器并学习如何打包特定发行版的过程中),但并非需要为“大量发行版”维护它们]。” 恰恰相反。您只需要维护少量的软件包(例如,Ubuntu,Fedora和一个与LSB兼容的tarball),各种Linux社区将负责其余的工作。特别是如果您的软件很流行,HOWTO将在每次发行时出现,并提供所需的安装说明。或者,如果您的软件可以自由分发(即使它不是免费产品,也可以这样做)(如果您的许可允许),则更为流行的发行版将具有某种替代版本的存储库,其中包含您的软件副本。
社区通常对此非常好,如果您允许,经验丰富的用户会愿意为您完成很多此类工作。
我们的估计是Linux市场占所有用户的5-15%,而这些用户可能不想为我们的努力付出代价
另一个不幸的是,非常错误的误解。
仅仅因为Linux用户免费获得其操作系统并不意味着他们不愿意为软件付费。如果软件非常好并且有广泛的需求,与Windows用户相比,Linux用户通常会更愿意花钱。只需看一下Humble Indie Bundles,其中Linux用户平均为每个用户支付的费用是Windows用户的两倍。
与其他平台(在您不了解您的产品的情况下我们无法知道)相比,您的产品在Linux用户中的需求可能也更大(这取决于该领域中现有的软件类型)。您可能拥有比您意识到的更大的潜在市场。