linux 下安装程序为什么需要重新编译?

linux 下安装程序为什么需要重新编译,直接使用可执行文件不行么?
这个疑问一直以来存在我的脑海中。于是今天搜索了一下。
http://www.jb51.net/article/47457.htm
这篇文章告诉我“编译主要是为了能让软件运行更快”的经验竟然不是真的。

软件需要编译安装的真实理由有如下3点:
1.软件在编译期间需要配置
2.软件需要统一安装路径
3.需要最新的版本

但我认为这些理由都不是理由啊。
1.配置模块我可以在使用过程中配置,扩展,调整
2.统一安装路径,在windows下的傻瓜安装向导里主要就是配置路径,但我没看到统一安装路径需要从头编译的道理,实际上安装完了软件我移动到另外的目录里,调整下配置文件,就希望它能继续运行
3.需要新的版本,大家一边宣称开源可以依靠社区的力量,一边却各自为政,全球linuxer重复编译的时间够造好几次人造卫星了。

于是我看到了这样的解释
http://bbs.csdn.net/topics/330116718

这是由于Linux系统的程序相互信赖造成的。比如某个程序依赖于其它一些库,而且版本也有要求,要想直接用,需要在编译时对信赖关系进行调整。./configure就是起这个作用的。

RPM包,DEB包是二进制了,也有依赖,一般情况下,二进制包只对应着特定的发行版。因为,在特定的发行版中,库之间的信赖关系是固定的。比如想把redhat5.2的rpm包安装到fedora上,就不一定成功。

初学者可以使用某个发行版,就不需要自己编译程序了。直接从官网上下载二进制的发行包就行了。有的发行版有在线安装软件的功能,比如redhat和fedora用的yum,unbuntu用的apt-get等

我深深感受到了开源界的恶意,因为商业应用的windows操作系统上开发的软件,虽然老版本的软件在新版本操作系统下不一定兼容,但是通过新出的编译工具打包编译后可以向下兼容,至少看起来是虽然windows有众多版本,但是在任一版本操作系统下的指定版本编译工具打包后的程序是可以在N个版本操作系统中兼容运行的。

当网上的开源卫士宣称全球大部分web服务器跑着linux,而我看到的是周围小公司仍然在使用略贵一些的windows虚拟主机、VPS托管网站时,我更是深有感触。

我们需要行动起来,建立起一个对社会有用的云服务网站,大V们通过网站可以节省重复在本机编译的时间,运维狗通过网站可以快速获取自己需要的可用二进制包,把工作交给云端,我们喝茶去。

一个小网站的开发上线过程是这样的:
开发 -> 更新网站
一个大型线上网站的开发上线过程是这样的:
开发 -> 提交版本库 -> 生成tag -> 线上自动化测试程序 -> 打包生成增量更新 -> 部署

不论大小网站,一个windows服务器上apache新增模块的过程是这样的:
下载指定版本php_mysql.dll -> 放到指定目录 -> 修改apache配置文件 -> 重启服务
不论大小网站,一个linux服务器上apache新增模块的过程是这样的:
下载指定版本php源码 -> phpize编译生成php_mysql.so -> 放到指定目录 -> 修改apache配置文件 -> 重启服务

那么对于不论用多久windows的人,换台机器,重复操作也是很轻松的一件事;
那么对于不论用多久linux的人,换台机器,重复操作也是很花时间的一件事。