很多人认为厂商只提供源代码的软件是复杂而难用的,其实恰恰相反,如果一个软件能提供源代码,在 Linux 下使用会简单方便很多。编译软件并不痛苦,只要厂商提供了源代码,很多人就会义务为该软件制作各个发行版下的安装包,而且如果软件在授权许可上没有太大问题的话,进入各个发行版的官方源是很容易的。即使授权许可有问题无法进入官方源,也可以在很多非官方源里找到安装包。即使是最坏的情况,由于各种限制,连非官方源也无法收录一个编译好的软件,用户自己编译其实也不是非常困难的事情——复制粘贴几条现成的命令,即使对于一个完全没有电脑基础的用户来说,稍微努力一下也是可以做到的。
 
然而,如果厂商因为种种原因不愿意提供源代码,事实上绝大部分软件公司都有各种理由不发布源代码,事情会复杂很多。由于 Linux 下绝大部分软件都提供源代码,因此 Linux 一直没有一个好的解决闭源软件与各个库之间的兼容性问题的好的机制,或者说 Linux 下的开发者不愿意去开发一个这样的机制,或者说即使开发了这样的机制后也没办法强制所有的库遵守这个机制。不管是哪一种情况,反正最后的结果都是在 Linux 下想要发布一个闭源软件的话,处理各个库之间的兼容性问题非常非常困难。
 
即使在固定的一发行版下,我们忽略所有库的兼容性带来的各种问题之后,为 Linux 写软件仍然有很多困难。由于 Linux 太过于自由,导致运行环境千奇百怪,系统的每个部分都可能有很多种不同的实现,声音系统,窗口管理器,任务栏通知,文件管理……每个组件会碰到不同用户的系统下表现行为不一致的问题。开发一个软件的时候要照顾到所有不同运行环境下的各种差异,实在是非常非常困难的一件事。
 

由于上面所说的种种限制,对于厂商来说,开发 Linux 下的闭源软件往往要消耗比开发其它平台下软件多得多的精力。而且由于种种兼容性的问题,软件发布出去之后还会碰到很多在内部测试过程中无法全面考虑到的千奇百怪的错误,要面对极其挑剔和刻薄的用户非常严厉的指责和非难。付出巨大的劳动之后,目标用户却比其它平台的用户要少两个数量级。因此,厂商不愿意为 Linux 开发软件的原因也就非常显然了。