linux让人难受的原来在这里
Tofloor
poster avatar
jd808
deepin
2013-03-26 08:39
Author
为了玩玩,我想装一个ksysguard
接下来,你会碉堡的~~~~~~,而且会咬牙切齿,然后大骂一句XXXXXX。

$ sudo apt-get install ksysguard
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
下列软件包是自动安装的并且现在不需要了:
  libgmp10:i386 libmpfr4:i386 linux-headers-3.2.0-37 gir1.2-json-1.0
  dh-apparmor po-debconf linux-headers-3.2.0-37-generic intltool-debian
  gir1.2-soup-2.4 libquadmath0:i386 libc6-dev:i386 html2text gir1.2-webkit-3.0
  linux-libc-dev:i386 libmail-sendmail-perl libsys-hostname-long-perl
  gir1.2-xkl-1.0 gir1.2*coregtk-3.0 libmpc2:i386
使用'apt-get autoremove'来卸载它们
将会安装下列额外的软件包:
  docbook-xml docbook-xsl gstreamer0.10-alsa icoutils kate-data katepart
  kde-runtime kde-runtime-data kdelibs-bin kdelibs5-data kdelibs5-plugins
  kdoctools ksysguardd kubuntu-debug-installer libattica0.3 libclucene0ldbl
  libdbusmenu-qt2 libdlrestrictions1 libencode-locale-perl
  libfile-listing-perl libfont-afm-perl libhtml-form-perl libhtml-format-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl
  libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl
  libhttp-message-perl libhttp-negotiate-perl libilmbase6
  libio-socket-inet6-perl libio-socket-ssl-perl libkatepartinterfaces4
  libkcmutils4 libkde3support4 libkdeclarative5 libkdecore5 libkdesu5
  libkdeui5 libkdewebkit5 libkdnssd4 libkemoticons4 libkfile4 libkhtml5
  libkidletime4 libkio5 libkjsapi4 libkjsembed4 libkmediaplayer4
  libknewstuff3-4 libknotifyconfig4 libkntlm4 libkparts4 libkpty4
  libkrosscore4 libksgrd4 libksignalplotter4 libktexteditor4
  liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmng1
  libnepomuk4 libnepomukdatamanagement4 libnepomukquery4a libnepomuksync4
  libnepomukutils4 libnet-http-perl libnet-ssleay-perl libntrack-qt4-1
  libntrack0 libopenexr6 libphonon4 libplasma3 libpolkit-qt-1-1
  libprocesscore4abi1 libprocessui4a libqapt-runtime libqapt1 libqca2
  libqt4-declarative libqt4-designer libqt4-network libqt4-opengl
  libqt4-qt3support libqt4-script libqt4-sql libqt4-sql-mysql libqt4-svg
  libqt4-xmlpatterns libqtgui4 libqtwebkit4 libsocket6-perl libsolid4
  libsoprano4 libstreamanalyzer0 libstreams0 libthreadweaver4 liburi-perl
  libvirtodbc0 libwww-perl libwww-robotrules-perl ntrack-module-libnl-0
  oxygen-icon-theme phonon phonon-backend-gstreamer
  plasma-scriptengin* qapt-batch sgml-data
  shared-desktop-ontologies soprano-daemon virtuoso-minimal
  virtuoso-opensource-6.1-bin virtuoso-opensource-6.1-common
建议安装的软件包:
  docbook docbook-dsssl docbook-defguide docbook-xsl-doc-html
  docbook-xsl-doc-pdf docbook-xsl-doc-text docbook-xsl-doc libsaxon-java
  libxalan2-java libxslthl-java docbook-xsl-saxon fop xalan dbtoepub
  libterm-readline-gnu-perl libterm-readline-perl-perl djvulibre-bin finger
  libdata-dump-perl hspell libcrypt-ssleay-perl libqca2-plugin-cyrus-sasl
  libqca2-plugin-gnupg libqca2-plugin-ossl libqt4-declarative-folderlistmodel
  libqt4-declarative-gestures libqt4-declarative-particles
  libqt4-declarative-shaders qt4-qmlviewer libqt4-dev qt4-qtconfig
  libauthen-ntlm-perl phonon-backend-vlc phonon-backend-xine
  phonon-backend-mplayer perlsgml doc-html-w3 opensp
下列【新】软件包将被安装:
  docbook-xml docbook-xsl gstreamer0.10-alsa icoutils kate-data katepart
  kde-runtime kde-runtime-data kdelibs-bin kdelibs5-data kdelibs5-plugins
  kdoctools ksysguard ksysguardd kubuntu-debug-installer libattica0.3
  libclucene0ldbl libdbusmenu-qt2 libdlrestrictions1 libencode-locale-perl
  libfile-listing-perl libfont-afm-perl libhtml-form-perl libhtml-format-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl
  libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl
  libhttp-message-perl libhttp-negotiate-perl libilmbase6
  libio-socket-inet6-perl libio-socket-ssl-perl libkatepartinterfaces4
  libkcmutils4 libkde3support4 libkdeclarative5 libkdecore5 libkdesu5
  libkdeui5 libkdewebkit5 libkdnssd4 libkemoticons4 libkfile4 libkhtml5
  libkidletime4 libkio5 libkjsapi4 libkjsembed4 libkmediaplayer4
  libknewstuff3-4 libknotifyconfig4 libkntlm4 libkparts4 libkpty4
  libkrosscore4 libksgrd4 libksignalplotter4 libktexteditor4
  liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmng1
  libnepomuk4 libnepomukdatamanagement4 libnepomukquery4a libnepomuksync4
  libnepomukutils4 libnet-http-perl libnet-ssleay-perl libntrack-qt4-1
  libntrack0 libopenexr6 libphonon4 libplasma3 libpolkit-qt-1-1
  libprocesscore4abi1 libprocessui4a libqapt-runtime libqapt1 libqca2
  libqt4-declarative libqt4-designer libqt4-network libqt4-opengl
  libqt4-qt3support libqt4-script libqt4-sql libqt4-sql-mysql libqt4-svg
  libqt4-xmlpatterns libqtgui4 libqtwebkit4 libsocket6-perl libsolid4
  libsoprano4 libstreamanalyzer0 libstreams0 libthreadweaver4 liburi-perl
  libvirtodbc0 libwww-perl libwww-robotrules-perl ntrack-module-libnl-0
  oxygen-icon-theme phonon phonon-backend-gstreamer
  plasma-scriptengin* qapt-batch sgml-data
  shared-desktop-ontologies soprano-daemon virtuoso-minimal
  virtuoso-opensource-6.1-bin virtuoso-opensource-6.1-common
Reply Favorite View the author
All Replies
jd808
deepin
2013-03-26 08:40
#1
这种依赖,简直就让分发疯,真怀疑是乱写的依赖
Reply View the author
cxbii
deepin
2013-03-26 18:48
#2
你该了解为什么有依赖,还有,你这依赖都帮你分析全了,有什么惹恼你了么?
Reply View the author
stardust
deepin
2013-03-26 19:52
#3
还好吧,只要不用自己去找依赖的包,任他刷出多少个包都木有关系~
Reply View the author
musmuhe
deepin
2013-03-26 19:53
#4
这种依赖,简直就让分发疯,真怀疑是乱写的依赖

也不能这么说。
ubuntu系列的依赖都是“大而全”,软件也是各种功能都给编译好。
相比起来,arch的依赖很少,而且软件的功能也都少了(阉割或者缩水)好多。
Reply View the author
4***[email protected]
deepin
2013-03-26 20:10
#5
这种依赖,简直就让分发疯,真怀疑是乱写的依赖
看样子是很多KDE的依赖啊,不过对于像我这样的小白实在是弄不明白linux的这种思想,下面是我看到的几篇关于软件包依赖问题的讨论吧,百度知乎上看到的:

Unix 的包依赖是如何形成的?
OS X 安装软件需要解决包依赖关系吗?为什么 Linux 总是在安装软件时才解决包依赖关系?

1:首先,「包依赖」是某些 Linux 发行版上比较严重的现象,与一般意义上的 Unix (包括 OS X) 无关。
其次,「包依赖」是惧怕 redundancy 的想法发展为恶趣味之后的产物。
第三,在 OS X,商业 Unix,和 Windows 中也多多少少有「惧怕 redundancy」的思维,为什么没有形成严重的包依赖局面呢?这是因为在多方提供安装包的情况下,象 dependency management 这样复杂的机制是根本无法运转的。到了某些 Linux 发行版上,它们的所有 installation package 其实都是这个发行版的开发者自己进行二次封装的。有了这个基础,他们才开始乐此不疲的玩起「包依赖」艺术来。

2:任何程序员写程序都有可能会依赖一些别人已经写成的库,所以几乎一定规模的程序必然有依赖。

不同体系用不同的方法解决依赖问题。

GNU/Linux:通常这个系统大多数软件是自由软件,换句话说,他们通常依赖的库也是自由的,所以软件开发者认为你可以自由的获取这些依赖库,自然就不需要自己再提供了。由系统“发行版”负责维护属于这个系统的所有依赖库,并且安装软件时确定依赖。
这个体系的特点是:

    系统依赖通常是统一的,如果有多个程序依赖同一个库,在这个系统中通常是同一份。
    具有庞大的资源。例如 Debian 系现成的可依赖软件多达 30G,所以通常不可能预先把所有依赖都安装全,但庞大的依赖库给编程人员提供了很多方便。
    你安装的软件越多,共同依赖所体现出的价值越高,解决依赖问题就越简单(因为当你安装足够多软件时,主流的依赖已经全部在你系统了)。
    由于巨大的共同依赖库存在,软件本身可以很小。

Windows:通常而言,这个系统的软件是商业软件,因此,他们依赖的库也很有可能是商业软件,所以,不可能要求用户自行获取这些依赖,这些依赖通常在发布软件的时候提供。如果你安装的软件少,这个体系很方便。
不过这造成了一些缺点:
  没有一个庞大的公共库,很多功能以及基础库都是每个公司自己实现一套,浪费很多劳动力,编程人员到每个公司得学习一套不同的库,给编程人员带来不便。
    所有应用程序都自己带依赖,因此很可能有许多程序同时附带了相同的依赖,并且这些相同依赖还有可能是不同的版本,这会造成许多混乱。
    由于所有应用程序都自己提供所有依赖,每个软件体积都很庞大。系统中安装的软件越多,越容易出问题。OSX 理论上是两者的结合,具体我没有认真研究过,请懂的人说说。

3:OS X的情况不清楚。我个人的理解是这样的:
在Unix-like的软件包管理器下,一个软件包只是提供软件本身的功能,不包含其它需要的包,通过软件包管理器处理安装。
而在Unix-like下的不通过软件包使用的程序,有的已经带了依赖,有的是需要编译的源代码。
一般在Windows下的exe等安装包大部分都自己带了依赖,但是可能会有实现重复功能的dll,有的时候dll版本号不同,由于安装程序处理的原因,会造成DLL地狱(https://zh.wikipedia.org/wiki/DLL%E5%9C%B0%E7%8D%84)
(理解可能有错误)

4:OS X 软件安装会依赖各种 "Framework"。系统自带了大量的 Framework,通常第三方应用都直接依赖这些系统已有的功能了。其它零碎的东西可能直接打包在应用里。各个系统在技术上本质都是接近的,策略性解决方法不同而已。

5:Unix的全局包依赖是最糟糕的idea之一。User程序自顾自就好了嘛,井水不犯河水,就像DOS时代一样。


看来大家的理解各种各样啊!下面是一篇是关于介绍unix的设计思想的,linux应该借鉴了很多unix的思想吧。

无论是Unix设计,还是面向对象设计,还是别的什么如SOA,ECB,消息,事件,MVC,网络七层模型,数据库设计,等等,他们都在干三件事——解耦,解耦,还是解耦!所谓解耦,就是让软件的模块和模块间尽量少地依赖起来。


Unix设计的例子

下面是几个Unix下的例子:

1、Unix下,所有的硬件都可以通过文件的方式存取。其统统在/dev下。于是,软件 和硬件的耦合被解开了,操作系统只需要把硬件统统变成文件,而程序只需要使用三个东西,一个是fd,一个是read(),一个是write(),就可以来 操作任意的硬件了,这就是抽象,简单到不行。

2、Unix下,所有的命令都可以用管道串起来(管道绝对是个伟大的发明),这样,所有 的命令间的交互全部解耦到只依赖于STD_IN, STD_OUT设备上。最酷的是,用户可以使用管道任意地拼装那些命令,以完成各式各样的功能。管道这个设计思想可以映射为今天的Web Service,你可以任意地拼装各种Web Service。

  看到这里,你会发现,这还是解耦,本质上来说,也是一种依赖倒置——OOD的精髓。但是,Unix还不仅仅是这些。我们再来看几个例子:

1、Unix下,软件都是绿色地安装。在iOS上更明显——各个程序间基本上互不干扰,这个程序产生的垃圾文件不会影响到另一个程序。你删到一个程序不会让另一个程序不举,各是各的空间。你可以删除这些程序,只要把内核心留着,系统照样可以启动。

2、Unix下,你可以通过设置一些环境变量,让多种环境同时存在,比如:某个LAMP 用的是Apache 2.0, Mysql 4.0, PHP 4.0,某个LAMP用的是Apache 2.2, Mysql 5.0,PHP5.3,你不但可以方便地在系统中切换这两个环境,你甚至还可以同时启动他们。

3、Unix下,你可以随意地替换你想要的程序。比如,你不喜欢bash,你可以替换成ksh/csh等,你不喜欢awk,你可以替换成gawk,所有的东西都像零件一样,你不喜欢什么,你就可以替换什么。

  这三个例子告诉了我们——当你把你的软件设计地耦合度非常地低时,你可以随意地组合,随意地安排你的系统。想当的灵活,灵活到Windows到今天都学不会。



当你真正了解了Unix的设计思想后,你会觉得今天的这些东西都是对Unix设计思想的一种传承或是变种。这种东西就是:

1)解耦,解耦,解耦。尽量地让你的模块不要在实现上耦合,而是耦合某个规范,某个标准。

2)KISS,KISS,KISS。要做到高度解耦,你的模块就一定要很简单,当然不是说简单到只有几行代码,而是简单到只干一件事,并把这件事干到极致。然后通过某个标准拼装起来。

3)拼装,拼装,拼装。我想不起来是谁说的了,这句 话是这样的,当我想用一个模块的时候,我直接调用就好了,没有必要像C或Java一样,还要编译。是的,拼装需要一个框架,需要一种标准协议,然后让所有 的系统都耦合在这种规范上,各自独立运行,就像一个机器上的各个部件一样,当我觉得这个部件不爽,换了就是了。(例如,当我们在尝试不同的算法的时候)

请大家讨论一下了!我的想法就是linux的依赖库太大了,我们不可能安装很多,所以就造成依赖缺失,所以造成有时安装一个很小的软件,却需要大量的依赖库,还有可能有冲突,所以又需要包管理器。我想应该是将目前的库优化合并功能,(目前linux的库太大太杂)。然后提供一个基本依赖库框架,再在这个基本库上设计出开发工具,以后开发的软件都调用这些基础库,扩展功能的库软件应自身携带,!

这是我这样的小白的瞎掰啊,哈!
Reply View the author
jd808
deepin
2013-03-26 21:01
#6
一句话,linux的库,不是用户用的,一个软件你可以用不同的库不同的模块去组装,完全符合linux精神,但如果要让用户去用这些库组装一个软件,那程序员可以下岗拉,当专业的人员不干专业的活,试图让用户自己去干,那就是太高看用户,也违背linux精神,linux崇尚的高度专业化,用户本身是图像处理专业的,网站专业的,等等,系统专业的人员就得为这些人员提供高度专业的系统,而不是让他们去自己拼装一个符合自己的系统去用.
上面发的一个这么简单的软件,竟然依赖啦500M的依赖,几百个文件,天方夜谭,这何止是杀鸡用牛刀啊,这是杀蚂蚁用牛刀,任何事情物极必反,我能接受的是3个依赖以内,超过这个根本没耐心解决,如果碰上循环依赖,基本撤退,如果用户都以我这种心态,这个软件的普及度就成很大问题,如果没人用,这个软件的作者很会很失望的.不考虑人性化,人就不用你,又不是没的选择
唉~~~~~ 但疼的linux~~~~~~~~~~
Reply View the author
a287740928
deepin
2013-03-26 22:02
#7
我是小白,我不禁会问,为什么不能像windows那样,下载了直接安装啥事没有多方便,顶多需要一个什么.net framework,但是解决一次,后患无忧啊!而且mac的软件安装更简单!这个头疼的依赖问题能不能被改变呢?
Reply View the author
4***[email protected]
deepin
2013-03-27 00:21
#8
给大家推荐一篇文章讲述的是关于mac os以及苹果背后的历史故事,对unix,linux,freebsd与mac 的关系里面说的很详细啊!值得一看.
http://blog.jobbole.com/32586/
Reply View the author
proudzhu
deepin
2013-03-27 00:40
#9
一句话,linux的库,不是用户用的,一个软件你可以用不同的库不同的模块去组装,完全符合linux精神,但如果要让用户去用这些库组装一个软件,那程序员可以下岗拉,当专业的人员不干专业的活,试图让用户自己去干,那就是太高看用户,也违背linux精神,linux崇尚的高度专业化,用户本身是图像处理专业的,网站专业的,等等,系统专业的人员就得为这些人员提供高度专业的系统,而不是让他们去自己拼装一个符合自己的系统去用.
上面发的一个这么简单的软件,竟然依赖啦500M的依赖,几百个文件,天方夜谭,这何止是杀鸡用牛刀啊,这是杀蚂蚁用牛刀,任何事情物极必反,我能接受的是3个依赖以内,超过这个根本没耐心解决,如果碰上循环依赖,基本撤退,如果用户都以我这种心态,这个软件的普及度就成很大问题,如果没人用,这个软件的作者很会很失望的.不考虑人性化,人就不用你,又不是没的选择
唉~~~~~ 但疼的linux~~~~~~~~~~
因为你不是用的KDE, 但是你要安装KDE的系统监测器. http://userbase.kde.org/KSysGuard/zh-cn
当然要把KDE装上了, 你可以看看KDE有多大.
Reply View the author