V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bjlbeyond
V2EX  ›  程序员

经常说一门编程语言是开源的是什么意思?

  •  
  •   bjlbeyond · 2013-09-15 13:06:35 +08:00 · 17494 次点击
    这是一个创建于 4086 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近正在学PHP,在网上看了不知道有多少遍PHP开源多么多么好。。。开源到底是什么意思?对于我们学习编程语言有什么好处?php源码是什么?

    C语言不是开源的,那么PHP开源和C比起来有什么优点?
    57 条回复    2014-10-31 07:39:57 +08:00
    jiyinyiyong
        1
    jiyinyiyong  
       2013-09-15 13:14:30 +08:00
    比如说 CoffeeScript 是开源的 https://github.com/jashkenas/coffee-script/issues
    然后一群菜鸟混在大牛中文, 一起在 Github 上提各种需求, 能力不同的人争论来争论去,
    社区要的功能, 作者的看法, 在代码完成前完成后都被讨论个 N 遍,
    任何会 Git 和语言开发的 Github 用户都可以 Fork 代码提交自己的修改, 虽然不一定采纳..
    好处解释不来...
    bjlbeyond
        2
    bjlbeyond  
    OP
       2013-09-15 13:24:11 +08:00
    @jiyinyiyong 首先感谢你的回复,你说的这一点我懂。但是比如一门不是开源的语言,编写的软件放到github上这不是也叫开源了吗?这是不是和语言的开不开源没有关系?
    ericls
        3
    ericls  
       2013-09-15 13:26:43 +08:00
    我也不理解 这个是什么意思。。
    难道是编译器是否开源?
    有些编译器c写的 c是不是开源?
    lichao
        4
    lichao  
       2013-09-15 13:31:45 +08:00   ❤️ 1
    @bjlbeyond
    @ericls

    例如 PHP 语言是开源的,你觉得 PHP 某些功能不好,如果你自己能力足够,就去修改源代码,构造成一个你自己的 PHP 语言,如果有可能,也可以反馈给 PHP 官方,他们会考虑是否采纳。

    另外一种形式,例如 MySQL 不是语言,它是数据库,它主要由 C 和 C++ 写成,这些 C、C++ 代码是公开的,你也可以同样从中学习,或者改进
    bjlbeyond
        5
    bjlbeyond  
    OP
       2013-09-15 13:35:06 +08:00
    @lichao 你上面所说的“就去修改源代码”这个源代码指的是什么?未经过编译的文件?能给我源代码的链接地址吗?如果不是开源的语言是不是就没有你说的这个公开的源代码?
    kstsca
        6
    kstsca  
       2013-09-15 13:35:13 +08:00   ❤️ 1
    简单说 c加密不容易破解。 php加密难度大,还有更平台有关,win是封闭的 所以出来的东西一堆shit 而linux都是不加密 代码公开的。
    meta
        7
    meta  
       2013-09-15 13:35:34 +08:00
    c不开源?那gcc怎么办。
    lichao
        8
    lichao  
       2013-09-15 13:35:58 +08:00
    @bjlbeyond
    @ericls
    再者,微软的 MS SQL Server 是闭源的,C# 什么也是闭源的,微软设计出来什么样,它就是什么样,旁人也无法学习其 SQL Server、C# 的内部设计构造,更无法修改 SQL SERVER 或 C#
    bjlbeyond
        9
    bjlbeyond  
    OP
       2013-09-15 13:36:35 +08:00
    @kstsca 是不是不管语言是否是开源的,都能够做成开源项目?
    lichao
        10
    lichao  
       2013-09-15 13:36:53 +08:00   ❤️ 1
    @bjlbeyond 要源代码,就去官方网站上找相关的信息
    likexian
        11
    likexian  
       2013-09-15 13:37:34 +08:00
    开源 == 有社区去维护它,完善它,不受各种商业标准限制,也不会因为某个人或某个公司的行为导致这个东西突然死掉


    更简单的来说,开源是一种精神
    cxe2v
        12
    cxe2v  
       2013-09-15 13:45:22 +08:00   ❤️ 7
    哈哈哈,看上面一群自己都没搞清楚开源意思的人来急着给楼主解释什么叫开源,好玩!
    LokiSharp
        13
    LokiSharp  
       2013-09-15 13:53:15 +08:00
    @bjlbeyond 编程语言其实也是一种软件,和开源软件意义相同,所谓开源编程语言就是你可以自己去修改完善的编程语言
    fwee
        14
    fwee  
       2013-09-15 13:54:49 +08:00
    @cxe2v 多少装逼的人暴露了。。
    bjlbeyond
        15
    bjlbeyond  
    OP
       2013-09-15 14:15:18 +08:00
    @fwee 求解释?是不是不管语言是否是开源的,都能够做成开源项目?
    LokiSharp
        16
    LokiSharp  
       2013-09-15 14:25:09 +08:00
    @bjlbeyond 只要你公开源代码的就是开源项目,和语言是否开源无关。
    fwee
        17
    fwee  
       2013-09-15 14:26:47 +08:00
    @bjlbeyond 语言是规范,一般说‘开源’指的是官方实现是开源的。比如C#(语言),你完全可以去改mono(一种开源实现),或者自己去实现一个
    bjlbeyond
        18
    bjlbeyond  
    OP
       2013-09-15 14:35:17 +08:00
    @LokiSharp 总算有人说到我最想知道的点上了!谢谢

    @fwee C#是开源的吗?
    ericls
        20
    ericls  
       2013-09-15 14:37:11 +08:00
    @lichao 感谢!
    lidashuang
        21
    lidashuang  
       2013-09-15 14:37:34 +08:00
    @bjlbeyond c#不是开源的,不过有开源的实现
    ericls
        22
    ericls  
       2013-09-15 14:37:40 +08:00
    @likexian 一阵见血!
    ericls
        23
    ericls  
       2013-09-15 14:41:01 +08:00   ❤️ 1
    @meta 就是啊!GCC是开源的编译器 那C是开源的么? C应该是汇编写的吧? 汇编是开源的么
    est
        24
    est  
       2013-09-15 14:42:29 +08:00
    这贴太欢乐了。
    lll9p
        25
    lll9p  
       2013-09-15 14:48:43 +08:00   ❤️ 2
    感觉LZ没有语言的实现这个概念。。。
    LokiSharp
        26
    LokiSharp  
       2013-09-15 14:56:26 +08:00   ❤️ 1
    @ericls 说C不是开源语言是因为C的规范是由「ANSI(美国标准委员会)」来指定的。这个规范是闭源的,普通人不能修改。

    而 GCC 这类编译器属于对 C 的实现,需要去实现 ANSI 制定的标准,但是具体实现方式可以自行决定。

    比如说,你对 GCC 的一个功能实现方式不满意,你可以去修改 GCC 来使它符合你的意愿。
    但是如果你对 C 标准不满意(比如你不喜欢花括号,或者它不面向对象),你没有权力去修改标准,但是你可以在其基础上创造新的语言。
    lhx2008
        27
    lhx2008  
       2013-09-15 15:00:38 +08:00   ❤️ 1
    开源就是开放源代码,
    源代码开放是相对的,比如说一个电池盒,闭源就是不给你换里面的电池,只能厂家来换,
    相对的开源就是你可以去换电池,
    但是开源也只是相对的,电池里面的东西你也没有能力去更换
    !但是,你可以去换一节更好的电池。
    我的理解,轻拍
    wtbhk
        28
    wtbhk  
       2013-09-15 15:06:47 +08:00
    语言开源和用语言写出来的东西开源这根本不是一回事吧= =
    好吧我也不知道语言开源是什么意思,语言不就是一套标准吗,还分开源的标准和不开源的标准?
    onemoo
        29
    onemoo  
       2013-09-15 15:09:43 +08:00   ❤️ 1
    @wtbhk
    有的标准由开放的社区制定和维护,有的标准由封闭团体制定和维护。
    wtbhk
        30
    wtbhk  
       2013-09-15 15:12:09 +08:00
    @onemoo 所以语言的开源闭源其实没有软件的开闭源这么严格吧。遵循标准放出源代码就是开源否则就不是,而所谓的开放团体和封闭团体其实不那么好区分。
    9hills
        31
    9hills  
       2013-09-15 15:47:30 +08:00   ❤️ 1
    我的理解是这样的,一门语言是否可以称为是开源的,取决于这门语言的官方实现是不是开源的,比如GCC就不是C的官方实现(C貌似没有官方实现),所以GCC是GPL的,但是不能说C这门语言是开源。而Python的官方实现 CPython是开源的,so我们可以认为Python是门开源语言

    而语言开源与否和用这个语言写出的程序开源与否没有任何关系(有时候标准库什么的会有一些问题,不过不细谈了)
    cxh116
        32
    cxh116  
       2013-09-15 16:13:30 +08:00
    @bjlbeyond
    首先,开源软件(英语:Open source software,英文缩写:OSS,中文也称:开放源代码软件)是一种源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进提高这款软件的质量。
    http://zh.wikipedia.org/wiki/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6

    上文也到了另外一种东西软件协议(License).有了License这个东西,会导致开源也不一定免费.
    比如我可以把源公开,自己写个License,必须给我100元才可以使用我这个项目的代码.

    关于用开源的语言写的东西是可以开源,得看开源语言的License约束你的产品是否允许开源.
    比如你发明一个语言,你可以在License约束,所以以此语言写的代码必须以二进制形式发布,不允许公开源码

    另外31楼说的也很对,语言一般来说是一种标准,可以有多种实现.比如python有cpython,jython等,一般License针对实现的
    alexrezit
        33
    alexrezit  
       2013-09-15 16:16:34 +08:00
    只听说过开源软件, 开源硬件, 从来没听说过开源语言.
    tioover
        34
    tioover  
       2013-09-15 17:32:12 +08:00
    @alexrezit 有官方开源[编译|解释]器实现的编程语言?
    meta
        35
    meta  
       2013-09-15 17:49:37 +08:00
    什么是c的官方,谁拥有c的商标权,我也写个编译器来编译c,会不会有人找我打官司,说我不能使用c这个名称。还有,如果我的c语言的实现的标准库跟ansi的不一样,ansi会不会告我侵权,未经许可修改了标准库。
    air00dd
        36
    air00dd  
       2013-09-15 17:53:30 +08:00
    @fwee 每个人都有局限性,都可能会说错或有偏差,
    但不一定都怀着恶意的傲慢。
    (虽然专制导致的极端的面子文化导致这种现象更普遍)
    lightening
        37
    lightening  
       2013-09-15 17:53:48 +08:00   ❤️ 2
    @bjlbeyond 你自己的项目开不开源和语言没有关系。你用 php 做了一个网站,只要你愿意把你的网站的源代码公开给别人,那就是开源的。

    其实,语言只是一种标准,就像汉语和英语一样。你人类掌握了一种语言,电脑也掌握那种语言,才能沟通。电脑掌握一种语言的方法就是编译器或解释器。这个编译器或解释器也是一个软件,所以也有开源和闭源之分。其实,现在广泛使用的 C 语言编译器 gcc 和 clang 都是开源的。php 解释器是用 C 语言写的,并且作者愿意公开它的源代码,所以说 php 是开源的。有的语言比如 java,有闭源编译器,也有社区维护的开源编译器,你可以根据需要选择使用。

    而你,可以用一个开源的语言做一个闭源的项目,也可以用一个闭源的语言做一个开源的项目。你的项目是否开源完全取决于你是否愿意公开你自己项目的源代码。

    开源的编译器、解释器有什么好处?第一,是开源的解释器、编译器可以利用社区的力量去维护。如果有人发现了一个 bug,就可以去帮忙修补掉。这一点,所有的开源软件都有这样优点。第二,是比较安全。编译器是非常核心的东西,如果你不知道你使用的编译器、解释器在背后偷偷干什么的话,是不是有点危险?开源的编译器、解释器就相对安全一些,毕竟有那么多双眼镜盯着,如果有什么后门,会比较容易被发现。所以现在被广泛使用的语言的编译器、解释器,几乎全都是开源的。
    wodemyworld
        38
    wodemyworld  
       2013-09-15 20:39:44 +08:00
    这尼玛也要讨论么。。。
    语言跟开不开源无关,v2ex已经沦落到如此地步了。。。
    Narcissu5
        39
    Narcissu5  
       2013-09-15 21:06:31 +08:00
    @LokiSharp 规范是闭源的?规范都没有源代码哪来的开源闭源?

    另外,C#的语法标准,元数据格式都已经是EMAC标准了,不用再担心微软。之前一直被担心的是基本库的API,不过从Java的判例来看,至少海洋法系的美国不再是问题了。
    jiyinyiyong
        40
    jiyinyiyong  
       2013-09-15 21:51:29 +08:00
    @bjlbeyond 呃.. 楼主问题没写细, 我也只回答了我知道的部分.
    代码是否开源取决于与源码一起发布的协议, MIT, BSD, GPL 比较常见,
    ...表示作为业余基本上写东西都用 MIT, BSD, 几乎不保留个人对代码的权利,
    像 GPL 协议会规定使用改软件的软件也必需遵守 GPL 否则不成立.

    一般情况下, 写完代码发布出去, 附带一个开源协议, 就算开源了,
    如果那门语言本身表明有限制那另当别论, 具体不是很清楚.

    只是开源社区对开源代码要求, 或者说期待会高一点, 不是写了代码扔过去就好,
    别人看到你开源, 会期待你修 Bug, 期待你维护, 或者讨论增减功能什么的.
    这主要看使用者了. 当然这不算在代码开源必须满足的条件里.
    kdlijian
        41
    kdlijian  
       2013-09-15 22:02:27 +08:00
    楼主问得问题比较微妙,建议先搞清楚什么是*软件*开源与闭源就好了。

    关于**编程语言**是否说版权保护,且看甲骨文和Google去年的官司:

    《甲骨文坚称编程语言受版权保护 Google持异议》
    http://www.leiphone.com/0414-google-oracle-debate.html
    Mutoo
        42
    Mutoo  
       2013-09-15 23:08:02 +08:00
    "最近正在学PHP,在网上看了不知道有多少遍PHP开源多么多么好。"
    我觉得你所听到的正确的说法应该是“有很多用PHP编写的项目是开源的”吧。

    比如说wordpress,你可以从网页获得到wordpress从0.1版到现在最新的版本的源码,可以自行修改以满足自己的项目。

    此外,php解释器本身确实也是开源的,你可以在这里获得它的所有源码 http://lxr.php.net/xref/PHP_5_4/ 但修改PHP通常对你的项目意义不大,
    除非你做到像 facebook 这么大的公司,他们对php有更高的性能要求,可能会去修改PHP来达到他们要的效率,然后将代码提交到php社区,为开源做贡献。

    至于你所谓的语言是否开源这样的说法,语言这种东西,其实只是一个规范,
    比如英语有英语语法,所有讲英语的人只要遵循这个语法,就能相互交流。
    世界上有那么一群人聚在一起,修订某种语言的规则,比如 ANSI C
    http://zh.wikipedia.org/zh-cn/ANSI_C
    然后大家用 ASNI C 标准来写程序,至此程序还只是文本而已,这时候要有一个C编译器来解读这个程序。不同的编译器最后都能产生可执行文件,但是其中的效率并不一样。
    开源领域最有名的就是 GCC 编译器了,它的源码是开放的,你可以自由获取,可以去修改它,有趣的是 GCC 也是用 C 语言编写的,它能够完成自身的编译(鸡生蛋,蛋生鸡)。
    而微软也有自己的编译器 CL.exe 这个编译器并不开源。

    虽然有这么多的编译器,但是只要你的源码遵循ASNI C,那么就能通过同样遵循ASNI C的编译器编译成可执行文件,运行算不同的操作系统上。

    最后,关于开源协议的东西,楼上有很多介绍了,自行了解。
    hpowen
        43
    hpowen  
       2013-09-16 04:27:36 +08:00
    好欢乐+1
    cattyhouse
        44
    cattyhouse  
       2013-09-16 07:28:05 +08:00 via iPhone
    http://en.m.wikipedia.org/wiki/List_of_open-source_programming_languages

    语言是一个定义了如何写代码以及如何将代码转译成计算机能理解的二进制文件的一系列规范。实现这些规范要靠软件,有些开源,有些闭源,以上就是所有开源的编译器。

    语言本身不存在开源不开源,它是个规范,就比如USB,WIFI规范一样。
    zencoding
        45
    zencoding  
       2013-09-16 08:09:40 +08:00
    好欢乐+1
    linuxer
        46
    linuxer  
       2013-09-16 09:12:42 +08:00
    涨知识了。
    julyclyde
        47
    julyclyde  
       2013-09-16 11:41:04 +08:00
    伸手党+troll啊
    lixm
        48
    lixm  
       2013-09-16 11:57:41 +08:00
    其实我觉得更应该说某个编译器或者某个解释器开源,而不是语言开源,语言应该属于规范之类的东西。例如C语言,事实上只是一个标准,有各种编译器实现,gcc, clang以及微软的c编译器等。
    SharkIng
        49
    SharkIng  
       2013-09-16 12:06:50 +08:00
    开源语言就是说这个语言的一些库代码都是公开的,你可以自己添加自己需要的库,或者是自己修改已有的库

    我是这样理解的,不过这种说法真的不多,一般都是说开源软件
    meta
        50
    meta  
       2013-09-16 12:24:39 +08:00
    我觉得楼主的意思可能是说php写出来的东西发布后可以看到源代码(解释执行的那种,不包括编译或者混淆过后的),而c写出来的如果是二进制发布的话则看不到源代码。
    所以请楼主确认一下你想表达的真实意思是不是这个。如果真是这样,那么跟源协议有什么关系,楼上各位还较真个什么劲。
    momo5269
        51
    momo5269  
       2013-09-16 12:56:18 +08:00
    维护、开发和发展都是开源社区和开源的标准组织在运作的,独立于厂商,生态系统自由开放的。
    相反的例子则是由厂商和封闭标准组织进行运作的,有专利权的,生态系统独裁统治的。

    我只是说和语言相关的开放与封闭,其实我也不知道开源语言是啥,语言的开源倒是有点明白。
    66beta
        52
    66beta  
       2013-09-16 14:07:42 +08:00
    简单来说,看它的license就行了
    luikore
        53
    luikore  
       2013-09-16 14:42:24 +08:00   ❤️ 1
    最简单解释: "至少不是微软或者 Oracle 搞的"...
    miaoever
        54
    miaoever  
       2013-09-17 12:27:22 +08:00
    @luikore 微软开源的项目不少。
    luikore
        55
    luikore  
       2013-09-17 18:07:27 +08:00
    @miaoever 都是边缘项目或者做不下去的...
    deyu260
        56
    deyu260  
       2013-09-17 18:16:50 +08:00
    这让我想起了世界上哪个语言最好的笑话,程序员永远在争论
    USCONAN
        57
    USCONAN  
       2014-10-31 07:39:57 +08:00
    英語是開源的嗎?

    這是同一個問題。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2228 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:58 · PVG 08:58 · LAX 16:58 · JFK 19:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.