看近来**的评论,有一位高人矢志不渝的重复“世界上最差的系统就是linux,双击不能安装软件”,而对于该评论的观点诸多,然而真正正确的确很少。综合来看,广大cber尤其是喜欢评论的cber对Linux理解的还比较少,但是好多都是跟Windows做比较(其实这儿我承认前辈也大有人在),所以我想在这儿有必要说一下为何Linux到如今也不能做到双击安装软件。
首先要说一下,好多Linux的发行版比如Ubuntu或则CentOS、Fedora等,早已早就可以双击安装自己发行版的安装包了,比如deb、rpm等。
这么为何现今大部份软件还是须要下载一个tar.gz之后./configure/make/makeinstall冗长的命令安装呢?
虽然,Linux下跟Windows的软件发布有一个最大的不同就是Linux下大部份软件都是开源的,只提供源码下载,不提供编译好的二补码下载。所以,里面的三个命令实际上是编译一个软件,之后拷贝到系统对应目录,确切来说不是安装。
然而为何非要这三个命令,而不是双击然后手动执行上述三个命令呢?
主要还是跨平台和多样化的考虑。我们晓得Linux发行版诸多,Linux支持的平台也好多,从使用最多的x86到arm,solaris等,所以这个./configure脚本可以支持好多编译参数,进而让软件支持几乎所有的硬件平台。
而Windows下,因为几乎所有软件都是编译好的二补码打包发布,所以软件要么是32位版本,要么是64位版本不能通用的。好在Windows目前只支持x86和x64两个硬件平台,假若以后Windows支持其他平台,这么我们日常软件的版本分辨就要更多了。而Linux下只要发布一个源码包linux内核,你用户是哪些硬件平台自己编译好了。
另外稍为学过软件工程的都晓得deepin linux,软件开发都是模块化的,通过./configure命令加上合理参数,可以不编译不须要的模块,例如最常用的php,自带几十个模块,一般我们须要那个编译那个好了。
有人可能说Windows安装软件也能选择性安装,我可以不安装我不须要的模块。
虽然,Windows即使你不安装你选择的模块,那也只是这个模块不安装。而主程序的模块访问是编译好的,他只不过能手动判定这个模块不存在就不加载罢了。
另外,Linux好多模块是通用的,这就是依赖关系,举例来说要用php的iconv功能,就须要系统安装libiconv库,而不同的笔记本的libiconv库安装路径不同linux安装deb文件,所以须要通过./configure的参数指定你笔记本的libiconv安装路径是多少,php能够顺利编译通过。Windows则是必须在C:WindowsSystem32下,可多样化太差了。
再说一下make命令。make命令就是依照刚刚./configure的配置参数,来把源码编译成二补码文件linux安装deb文件,放在当前目录,而不是复制到系统目录。为何不能把make和makeinstall放到一起呢?
由于有些时侯,我们只须要一个软件包上面的某个动态链接库,而不是整个程序。例如我们常常须要lighttpd中的spawn-fcgi,所以我们何必安装lighttpd,而是直接编译完,得到其中的spawn-fcgi即可。
最后,makeinstall就是把编译好的二补码文件和链接库、配置文件等复制到系统的各个目录即可,安装完成。
说道这儿,可能有些网友根本没看里面文字,就说:普通用户不须要晓得那么多,她们就须要晓得如何用就行了。是的,话说回去了,那些人若果不用Windows,完全可以尝试Ubuntu或则Fedora,这两个发行版都可以双击安装程序。并且缺点就是难以深度订制。
我们畅想一下,假如QQ有tar.gz源码版发布,这么我希望的安装命令是:
cd-beta2/./configure--without-ad--without-qqshow--without-popnews--without-qzone--with-ipaddress--with-showipmake;makeinstall