|
楼主 |
发表于 2007-8-20 08:07:00
|
显示全部楼层
谢谢, 再次感谢"remote fish"的耐心解答.
Post by remote fish
而且多个程序可能会提供相同的甚至冲突的库,这很麻烦的;
Post by remote fish
另一方面,通用的安装包的可行性也是由于某非开源操作系统的版本系列相对贫乏,软件供应者可以针对一个有限的预期支持对象集合来实现其安装包,但对于其预期支持对象之外的系统版本,软件甚至会完全无法安装或使用。
呵呵, 我来针对你说的这两点, 谈谈我的想法吧, 本人才疏学浅, 说错的地方还请指来.
1. 相同的静态库, 多个版本会有冲突吗? 这应该很少或不会吧, 我觉得linux解决版本冲突问题有些方面较好, 也有些不好, 如: 相同的库可以安装上多个版本的库, libfoo-1.xx.a libfoo-2.xx.a, libfoo.so.1.x.x libfoo.so.2.x.x等等. 在链接时指定某版本的库, 在程序运行时, 它只会去查找这个文件是否存在, 如果不存在, 就会报错了吧!
商业程序, 如果好点的公司, 遵守OpenLicense, LGPL, BSD的话就把它们链接进来, 做成一个他们自己的静态库, 这样就不与会原来的库名冲突了吧, 我猜想它们也会这样做.
2. 你说商业程序的版本升级不会很频繁是吧, 也的确, 商业程序追求的是稳定性. 但如果我们系统的库更新较快, 而商业程序又使用了较老的库, 它们就冲突了, 我们就又得为它装上低版本的库了. 常规发布, 如果不是使用的linux自带的包管理器安装, 依赖的库升级了, 这时程序又会出问题了.
如我的几个真实例子: 1. 我的系统更新很频繁, 在debian下时, 我使用的是dist源, 也基本上是每天更新. 如我用过的navigator, 它就依赖比我低一版本的libstdc++库, 你就不得不为它又重新装上一次了. 2. 在更新Archlinux的朋友们, 在今年初的时候肯定遇到过Opera不能启动的问题, 就是因为它依赖的一个库(xorg的哪个库)版本更新了, 导致它不能正常启动了.在么你换上Opera依赖的旧库, 要么等官方解决它. 还好, Opera动作比较迅速, 很快推出了新版本. 但你很难保证所有的商业公司都这样.
Post by remote fish
对于 Linux 这样的开源系统来说,最合适的软件安装方式是源码编译,当然,这较适合专业用户,如程序员,这类用户也是 Linux 这样的操作系统最初面向的用户群;对于普通的用户来说,软件供应者即使要提供预编译包最好也不是把依赖库打包,而是提供其依赖关系,再由系统去处理依赖关系,这种做法的好处是可以最大程度的避免冲突。个人认为 Debian 是这方面做得很好的,只要理解了 Debian 的包管理方式,Debian 可以提供最为简单有效的软件维护方法。
对普通用户, 商业程序一般提供的是针对不同平台提供预编译版本, 如果是基于某些发行版, 可以交由系统去维护它. 但是一个不太有名气的linux发行版, 使用不同的包管理器, 那他也很难提供全吧, 这不得不靠用户把其它平台下的版本转来了, 这时依赖包又改变了(如debian对包分的较细, 而archlinux没有debian分的那样细).
我看了skype的发布方法:
Skype 1.4 Beta 版提供有下列 Linux 发行版的安装包:
Ubuntu Feisty Fawn (7.04)
Fedora Core 6/7
Debian Etch
OpenSUSE 10+
Mepis
Mandriva
Xandros
如果你所用的 Linux 发行版不属于以上任何一种,那么也可以使用 Skype 的通用安装包。
skype也是有依赖其它库的. 但它有两种版本, 一种是没有包含把Qt静态库包含和其中, 一种是把静态库包含在其中了. 至于其它库嘛,我看过它的协议了, Qt采用的是双协议, 如果购买了商业许可, 当然可以静态包含在项目中了; libsigc++ 和libasound(alsa)都是使用的LGPL协议, 也可以动态和静态包含, 估计是为了减少skype的大小.
Software requirements
Qt 4.2.1+
D-Bus 1.0.0
libsigc++ 2.0.2
libasound2 1.0.12
看来在linux下, 开源软件都采用了几种发式发行, 1. 使用各大常用的发行版, 让包管理器来解决依赖问题 2.常规的tar包发布.
我也思考一下, 能否很好的解决linux软件包发行的问题呢? 也希望大家共同讨论一下!
我吧, 喜欢开源, 也不排斥商业环境. 开源, 保证了资源的共享, 促进了软件行业的交流和进步. 商业软件保持了软件行业的创新, 为程序员提供了生存的环境. |
|