GNU/Linux下有多少是GNU的?

GNU/Linux下有多少是GNU的?

一个葡萄牙的学生写了一篇文章 《How much GNU is there in GNU/Linux?》 – GNU/Linux下有多少是GNU的。他的这篇文章主要分布了今年4月份的Ubuntu Natty的Linux分发包。其主要是用代码行来做的分析,其给了两个饼图。

第一个饼图如下,其指明了各种主流的开源项目组的分布情况。可见GNU只占了8%,当然,GNome也是GNU的,加起来也只有13%,只占整个分发包很少的比重。

第二个图,作者把GNU的部分拿了出来,再进行了分析:

在下面这个图中,我们可以看到主要是四大块——gcc, gdb, binutils 和 glibc,所以,作者说,这些东西都不是最终用户需要的,不是每一个用户都是需要搞开发的。所以,如果去除这些,再去除Gnome(这个桌面UI也不是很力),那么GNU的东西几乎没有了。

所以,作者以此来挑战Richard Stallman提到的 GNU/Linux的这个说法。好像更为好的说法应该叫——

GNU/KDE/java/xorg/Linux

我对这篇文章有下述一些感觉:

  • 以代码行来衡量重要性,非常的不准确。比尔盖茨说过——“用代码行数来衡量编程的进度,就如同用航空器零件的重量来衡量航空飞机的制造进度一样”(参看《最佳编程语录》),所以,用这个数据来并不一定正确。如果用Linux的各种包的依赖性可能会更好一点。
  • 至少我知道,离开了glibc,可能整个操作系统都会不举。Linux下,绝大多数软件都是gcc/gdb编程和调试出来的(当然,LLVM和Clang正在挑战着gcc编译器),而且大多数软件都在用着GPL的许可证(虽然开源世界的许可证是如此的混乱
  • 辩证地,我们不能否定GNU的历史价值,同时我们似乎也在看到GNU好像有点萎靡。

老实说,其实叫什么不重要,是GNU/Linux也好,是Ubuntu 也好,还是Android也好,无所谓。Linux的各种分发包中都存在着全世界黑客文化的和开源文化的结晶,每当我看到这样的分布图时(例如:是谁写的Linux?),我心中都有一种说不出来的豪情,这难道不真是一种壮举吗?(Unix黑客文化的真正延伸)。

不管这种方式的软件有没有市场,能不能得到“最终用户”的认可,但这已成为了软件开发的一种精神——那种不分彼此,相互协作的精神,不是吗?

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 3.53 )
Loading...

GNU/Linux下有多少是GNU的?》的相关评论

  1. 对于以代码行为指标度量,引用名人名言说一下看法:

    “代码行是度量软件规模的糟糕方法,不过所有其它的规模度量方法都更糟”
    引自《软件估算》by Steven McConnell

    “In God We Trust, All Others Bring Data.” — 我们相信上帝,但其他人请用数据说明。
    “If you can’t measure it, you can neither control nor manage it.” — 如果你不能度量它,你就无法掌控它。
    “The common communication language comes from measurement.” — 度量使我们有了共同的沟通语言。

    所有人在说软件规模的都是第一想到的是代码行数,甚至Linux值多少钱也是按行数算的,国外的人没怎么样,而国内的人把编程看是一种“艺术”,绘画和文学作品是不是艺术呢,小说为什么是按字或者页算钱的呢,同一个人的画,为什么参考价格是按多少钱一尺算钱的呢。在软件规模度量的这个问题上,国内的许多人,尤其是自认为编程很好的人,想法有些偏了。

  2. 我想说的是,“代码行”这个指标是没有问题的,因为没有更好的方法,就像文学作品和画一样。当然不同的人写的东西,不同类型(编程里面应该就是语言),不同质量的东西,不能放在一起比。但是如果“它们”符合一些标准(编码规约),同一种语言,有比较相近,代码行当然是 “无奈”中 最好的 方法。

  3. @bob
    好吧,你说文学作品和画也是一样,按行数、按画中的元素多少来衡量的,不知道衡量的是质量还是规模呢?

    从你引用的一些句子可以看出你指的是衡量规模: “代码行是度量软件规模的糟糕方法,不过所有其它的规模度量方法都更糟”

    但是,软件的卓越、质量、进度跟行数一点关系也搭不上 ! 诗歌的字数那么少,难道没有一首打动过你的诗?

  4. @geek
    > 好吧,你说文学作品和画也是一样,按行数、按画中的元素多少来衡量的,不知道衡量的是质量还是规模呢?

    呵呵,我有点儿哭笑不得,我说了半天,你不知道我说的是规模还是质量吗?

    > 但是,软件的卓越、质量、进度跟行数一点关系也搭不上 ! 诗歌的字数那么少,难道没有一首打动过你的诗?

    我有说过软件的卓越、进度跟行数有关系吗?(倒是酷壳的主人引用了盖茨的一句话,把进度和规模混淆了。首先声明我很喜欢陈皓,要不然我也不到这里来。我只是对大多数人对”代码行”的反感 感到 不舒服。因为,无论谁在哪里提到”代码行”,或者询问统计工具的时候,都会有至少一半的人把”代码行”说的一无是处,但是他们却不能给出一个比”代码行”更能代表软件规模的指标)

    我倒想问问你,一个作品是否打动我,写的是否有艺术成就,跟”规模”有什么关系?
    你如果想度量一个东西的规模,就得有个指标,没人说过”代码行”是”绝对好”的度量软件规模的方法。代码行作为”软件规模”度量的指标,有很多不科学、不合理的地方,就像用”字数”衡量一个文学作品的规模一样。但是不能因为它种种的问题,就一味地否决它,抛弃它,因为你不能找到一个更好的替代它的方法。

  5. @bob
    先生,难道,判断一段代码的质量,用的不是“它所拥有的功能”来衡量么?
    在下只是个学生,我们每个学期都要做项目,然后学期末,老师会让每个团队上去演讲。
    演讲什么?演讲的有:实现的功能,考虑到的方面。还有比如模块独立性什么的。
    至于行数,老师没有看过。

    您无非是说,只有行数是唯一可以衡量的标准?但我遇到的实际情况为什么是——实现的功能(对非专业的人扯的)还有模块耦合性、框架之类(对同行扯的)东西呢?

  6. @bob
    而且,抛开我们自己角度,我们说说非本专业的人看吧。
    请问你玩游戏,你关注的是什么?画质?有趣性?我知道,这些都是要行数来堆的,但是,一个画质粗糙,还把你CPU,内存占的死死的,客户端达到数十G的国产游戏比较吸引您呢,还是一个画面让人舒适,客户端也不怎么大的游戏吸引您?比如说我的同僚都比较喜欢的DOTA?

  7. @bob

    在我看,真正让人感到“好”的,是内心的平和。

    为了达到这种平和,某些人有时候希望做得尽量“靠谱”些,甚至力求按照“靠谱”理论所推崇的标准尺度去衡量各种东西。

    但我为了达到内心平和,却希望既了解靠谱的人在说些什么,也了解不靠谱的人在说些什么。不希望因为别人乍看来不靠谱,就横加批判。

    “虽然这方法不好,你不能找到一个更好的替代它的方法。” 是一个典型的逻辑陷阱。

    我对这句话的理解是:

    表面意思 — 虽然你可以认为数字这把尺不好,但你必须给出一个你所谓好的尺度。
    隐含意思 — *因*为*我*们*靠*谱*的*人*都*认*为*必*须*有*一*个*好*的*尺*度*。

    标星号的话,没有被明确说出来,任何人不明就里的人,如果就着表面意思去争论对错,就完全上当了,因为他/她已经默许了隐含意思。从这个角度来看,我倒是觉得,设置逻辑陷阱能力比较强的人,通常会在言论之争中占取主动。

    一家之言。

  8. 这篇文章的题目是这样的:
    《How much GNU is there in GNU/Linux?》 – GNU/Linux下有多少是GNU的?

    人家作者想表达的是”规模”,我从头到尾说的也是”规模”,用”规模”去表达一个东西总的价值或者贡献,就像卖苹果,多少钱一斤,一共多少斤,乘起来就行了。至于多少钱一斤呢,那是产地、品种、大小、质量、品相等等方面决定的。当然软件里面用代码行数作为规模统计指标更为复杂一些,但是它毕竟让你有了”量”的概念,不再是”虚”了吧唧的功能了。

    有的回复恰恰验证了我的经验和观点,有至少一半的人对代码行数作为软件规模度量的指标非常的不认同。至于Walkerinwin说的一些言论,我想我还是不回复的好,你曲解了我的意思,还表出我根本就没说过的话,如果和你争论这个话题会越来越乱。pim.geek说的,我没有太看懂,不好意思,呵呵~

  9. @Walkerinwind
    我来以我的看法,部分支援一下你的观点。你说的一些标准:比如“实现的功能,考虑到的方面。”,“画质?有趣性?”,都是我比较认同的。

    但我的想法略有不同,我认为软件的设计,应该更多地为我的生活创造福利。在我看来,福利不等于钱。我需要借助一款优秀的软件,拥有更多不被打扰的时间。

    过度追求经济效益的软件开发,难免会因种种原因让软件产品本身的质量变差。这会造成我在使用软件的过程中,不断地被程序故障打扰。另一方面,开发这款软件的作者,也会不断被处理故障的请求打扰。

    如果我描述的这种矛盾很普遍,那就意味着许多软件生产者和消费者都很痛苦,是一种双输的结局。即使对于少数明星级的软件开发者,为了做到经济效益很高的职位,恐怕也要不断拼搏杀出血路,而且为了避免出现大的故障也要提心吊胆,毕竟故障意味着重大的经济损失。

  10. @pim.geek
    我哪里说 我所谓的”好”了,我说的是”量”,也就是规模。东西是好是坏,还要有量,才能决定一个东西的价值,我说过代码行多就是”好”吗?讨论问题可以,但是咱能先别没事曲解人家的意思好不好。

  11. @bob
    我承认在阅读你的观点时,有一点凭感觉了,没有逐字推敲你的说法。你希望讨论严格限制在“软件规模度量”这个语境之下。

    尽管如此,我能大概理解你所谓的量化,也认可你所谓的量化。我赞同:没有量化,源代码之间没法拿来做比较,也无法得到有效的控制和管理。

    因此,在“软件规模”这个语境下,我不能随意评判你的论断。到这里,是表达我对你评论的尊重。

    接下来,我想我也没误解错你所谓的“好”,因为你的如下例证显露了你以数字衡量许多事物的价值观念:
    > 甚至 Linux 值多少钱也是按行数算的,国外的人没怎么样,而国内的人把编程看是一种“艺术”,
    > 绘画和文学作品是不是艺术呢,小说为什么是按字或者页算钱的呢,同一个人的画,为什么参
    > 考价格是按多少钱一尺算钱的呢。在软件规模度量的这个问题上,国内的许多人,尤其是自认
    > 为编程很好的人,想法有些偏了。

    我不但理解你的“软件规模度量”语境,也能在这个语境中欣赏你表达的逻辑。然而,我可不想在这个语境中与你周旋。因为我不欣赏的恰恰是“度量软件规模”这个做法本身。

    我希望考虑的是“如何让软件的生产者和开发者拥有更多不被打扰的时间”?

  12. @pim.geek
    > 因为我不欣赏的恰恰是“度量软件规模”这个做法本身。
    > 我希望考虑的是“如何让软件的生产者和开发者拥有更多不被打扰的时间”?

    你还是明显把软件规模统计 和 开发进程或者进度 关系起来了。我从来没有说过不认同盖茨的话。统计规模不是为了开发进度。一个东西完成了,统计规模有什么不对?你说不想在这个语境跟我周旋,而我要说,我从来就没想过跟你们在其他你所谓的”语境”周旋,我从来就没有想离开过文章的主题,我也没有像你说的设过什么逻辑陷阱。正是由于你本身对”软件规模度量”或者说”代码行”这个指标的反感,根本没有仔细看我的话就开始反驳。

    假设国家要统计全国的水稻的产量,按每个省的产量做个饼图,方便看出百分比。某个省说了,这个不合理,我们的水稻有很多技术含量,无论从种植培育都很精良,我们的一斤相当于某个其他省的一斤半。基于这样的原因,我们就不按重量进行统计了吗。按照重量统计出来的结果肯定是有误差的,但是这个基本上能够产量的问题。

    大家大部分应该就是搞开发的,软件度量(包括软件规模度量)既然能写一本书,说明人们一直在尝试探索如果对软件进行度量,经过长时间的尝试和摸索,代码行不是一个很好的规模度量指标,但是却找不出一个更好的度量指标,虽然它是个糟糕的指标,但是基本上能够表达”开发的量”。当然能够按照不同品种(拿水稻举例),不同技术含量,分开统计更好。我不是搞软件度量的,我也是个开发人员,我也曾对用”代码行”进行规模统计感到反感,我没有尝试过用其他指标度量软件规模,这不是我该研究的东西,我只是相信软件度量方面的人的长时间的经验结果,在我找不到更好的方法之前,我觉得合情合理。到此为止吧,我不希望改变谁的观点,赞不赞同都可以,别误解我的意思就行。

  13. 您好我是在csdn上看到您的博客《c++对象的内存布局》,但是看到您的博客转到这里了就在这给你留言了,希望您能解答一下我的问题。
    在普通继承的时候,虚函数表指针都在最开始。实现动态绑定的时候就简单了。比如B继承了A那么当使用父类A的指针指向子类B时指向的就是起始地址:唯一虚函数表指针。这样就能直接找到对应的虚函数了。不知道我说的对不对?
    不过对于成员变量怎么实现呢,因为基类的成员变量相对于起始地址的位置已经被改变了(多层继承的时候),这时候怎么通过基类指针访问基类的成员变量呢?系统是否是自动添加作用域标识符?(但是对于基类指针而言它的寻址空间应该固定吧,怎么能找到它寻址空间以外的变量)
    另外,当有了虚继承后怎样实现动态绑定呢?虚函数表指针的位置不是唯一的了,这时候出现基类指针指向子类指针时编译器会自动加上一个偏移量跳转到它对应的虚函数表处吗?
    不好意思吧别的博文的问题发在这里,希望您能解答我的问题。谢谢!!

  14. 大家讨论的真激烈,这篇文章中我看到的只是Linus派和Stallman派的个人恩怨,哈哈。

  15. @zephyro
    其实从第一个评论开始已然偏离原题了
    @bob 同学坚定的认为,评价一个项目的规模,除了用代码行来衡量,没有其他方法了。虽然代码行衡量法够糟糕了,但别无他法。
    但是,但是,我强调过N遍了,以”功能来判断“可以否?
    好吧。各种只顾说自己,连别人说什么都没看的,只顾自己狂喷的,没什么好争的。。

    ========================================================
    我IDE有数G之大,jdk,gcc什么的,加起来不过几十兆,哪个重要?
    核心的,未必是代码量各种大的。GUI什么的,各种占行数,各种让人讨厌,各种没内涵
    个人感觉。。。

  16. @bob

    我看到你这段评论后,更加深入地了解了你的想法。

    > “但是它毕竟让你有了”量”的概念,不再是”虚”了吧唧的功能了。”
    > “你还是明显把软件规模统计 和 开发进程或者进度 关系起来了”。
    这两句话都让我受教了。

    的确,因为我没有认真阅读过你的想法,导致我把一些错误的印象和无关的评论强加在你身上,这应该是我的思维倾向导致的。

    > 我也是个开发人员,我也曾对用”代码行”进行规模统计感到反感,
    > 我没有尝试过用其他指标度量软件规模,这不是我该研究的东西,
    > 我只是相信软件度量方面的人的长时间的经验结果,在我找不到
    > 更好的方法之前,我觉得合情合理。到此为止吧,我不希望改变谁
    > 的观点,赞不赞同都可以,别误解我的意思就行。

    我相信没有误会你上面这段话的意思。回到你的语境中:对于规模统计,我们的反感是类似的。而我也的确在“规模”和“进度”两个问题上牵强附会了。必须表示歉意。

    在最后的一句话上,我很欣赏你的互不侵犯原则。事实上,你的坚持已经改变了我的一些想法,为了在你的评论面前坚持我的想法,我在头脑中反复思辨,心中反复体验。在这过程中,我再次发现了自己急于凭感觉下结论,以及对你的思考成果不够开放的毛病。

  17. @Walkerinwind
    感谢你的赞同~ :D

    其实,我的想法也有不合理的地方。我提的问题太大:“如何让软件的生产者和消费者都拥有更多不被打扰的时间”,这不是一个工程问题,而是综合了社会问题,哲学问题和心理学问题。

    我提这个问题,主要是因为受到了楼主文章内容的激发:

    > 我对这篇文章有下述一些感觉:
    >
    > 以代码行来衡量重要性,非常的不准确。
    > 至少我知道,离开了glibc,可能整个操作系统都会不举。
    > 辩证地,我们不能否定GNU的历史价值,同时我们似乎也在看到GNU好像有点萎靡。
    >
    > 老实说,其实叫什么不重要,是GNU/Linux也好,是Ubuntu 也好,还是Android也好,无所谓。
    > Linux的各种分发包中都存在着全世界黑客文化的和开源文化的结晶,每当我看到这样的分布
    > 图时(例如:是谁写的Linux?),我心中都有一种说不出来的豪情,这难道不真是一种壮举吗?
    > (Unix黑客文化的真正延伸)。
    >
    > 不管这种方式的软件有没有市场,能不能得到“最终用户”的认可,但这已成为了软件开发的一种
    > 精神——那种不分彼此,相互协作的精神,不是吗?

    你说的,也很令人振奋:“不在于是否有大楼,而在于是否有大师”。

    我感觉自己所处的工业文化,高调地宣扬经济效益,理论先进,工程过硬。但是,我们所生产的软件产品,却缺乏开源软件那种极客文化和共享精神。造成这个状况的原因,不是工程师的智商不够,不是我们的工程技术不好,不是理论不够先进,而是一种难以突破的社会和文化瓶颈。这个瓶颈给我的感觉是,“落后于别人,也看到了改进的途径,可大家的步子就是迈不动”。

  18. @pim.geek
    谢谢你的认真、大度和求真的精神。我本来一直后悔回复了陈皓的这篇文章,但是看到你说“我的坚持已经改变了你的一些想法”,我感到非常欣慰。

    同时,我也为我的”国外、国内、自认为编程很好的人”等等词汇表示歉意,不应该用一部分人的观点代表一个地区和类型。

  19. @bob
    我很激动。。。

    是我们的讨论让我第一次学会了如何诚实地面对自己的情绪,以往我总是在讨论的中间失去了理智,为了心理上的平衡而辩论。

    我以前也做过版主,但是那时我太重视自己的判断标准,让整个版面缺乏活力。因为你的话,我的一部分心智力量,从那时的挫折中重新释放了出来。

  20. @陈皓

    多谢楼主,我们曾经有一“饭”之缘,呵呵。席间有句话让我印象深刻:

    “。。。,痴迷数码是傻鸟”

    我现在仍然坚定不移地往那个方向发展,说不定哪天就成了“愤怒的傻鸟” :D

    1. 真的吗?我们还吃过饭?你是谁呢?不过,我说的那句——“痴迷数码是傻鸟”的意思是痴迷数码设备产品,而不是IT技术。呵呵。

  21. 从狭义的说,GNU 指的是那个编译套件,然而,即便我们只关注这个问题,也不能忽视另外一个事实:GNU/Linux 下几乎绝大多数软件都是由 gcc 编译出来的。所以他们仍然是 GNU 的一个产品和产物。

    广义的来说,所有 GPL 协议的软件,都是因 GNU 运动而生,而他们的发展也因 GNU 而收益,所以说,如果把基于GNU GPL 协议的所有软件加一起,他们在 GNU/Linux 中一定占有大部分。

  22. @陈皓
    哈哈,了解!那次你们组里吃饭,大概是在老马那边吧,我是唯一一个打酱油的。

    我也偷换概念了,我关注的其实不是数码产品本身,而是这种产品所带来的“个人信息管理”应用。简要介绍我所谓“个人信息管理”的初步想法,看看你是否感兴趣。:P

    在过去信息不发达的时代,个人信息管理工具/框架很可能是多余的。但如今信息技术超级发达,新闻、广告甚至垃圾信息满天飞,人们却因为依赖于信息网络,无处逃遁。长期深受其害之后,我开始考虑借信息技术本身以毒攻毒,合理组织与个人生活目标和平衡感有关的信息,过滤和剔除无关信息,以期控制日常生活与工作中的浮躁,保持身心平衡。

    借助个人信息管理框架,我希望达到的主要目标是:

    > 让一个人在没有私人秘书的情况下,无论工作多忙,事务多繁杂,业余爱好多广泛,都不至于忽视自己的个人生活目标与平衡感。

  23. 敢问 GNU/Linux 里面有多少是 Linux 的?又有多少是 xorg 的?

    整个系统就是这么一小块一小块搭起来的,既然不可能把所有组件全部列举出来,那就要么拿最基本的系统来做名字,要么另起一个新名字。这种命名方式有什么问题么?

    作者竟然还把 Java 拉进来。天呐,我这辈子还没在 GNU/Linux 下面跑过几个 Java 程序……

  24. 吃 饱 -了撑- 着

    我很同意那个说是rms 和linus 的争论的同学

    首先
    不能迷信 权威
    各位已经把这文章的起源当做权威了

    其次
    这个世界有2种东西 一个是理想 一个实用

    linus 坚持的linux 实用稍微大于理想
    rms 坚持的gnu 理想稍微大禹现实

    没有冲突 rms 都说 linux是好东西 但是不是gnu
    很多人自己主观臆断了的认为 linux == gnu
    至少是在潜意识里
    可以说没了 linux 一样有 gnu
    很多 old hacker 不都说了吗
    gnu 之前人们就在分发 unix 只是 那时候没有 人明确的提出这个观点
    同样的linux 之前就有人在写 gnu os 了
    没有linux 一样有gnu 没了gnu的linux 就不是linux 了

    再者
    同样是理想和现实的问题
    现实你去应聘 人家第一件做的事情是不是直接看文聘 然后pass?
    所以bob说的是现实中常用的方法(所以这同学肯定是老人了)
    举个例子
    很多人下某个类型的软件 而且对这类软件不熟悉的时候 你为了安全起见 是不是会下个大的(除非你硬盘不够)?

    而Walkerinwind的观点则是理想的观点
    我建议把持这种理想观点的同学 如果以后找工作 直接找主管 或者 boss
    否则你的才气就会给埋没

  25. 没有GNU的基础性东西,linux当时会是多么的坎坷。
    现在发展起来了,再这么说GNU,简直就是过河拆桥、忘恩负义!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注