C++ 杂谈(17)

有人的地方就会有江湖,即便是编译器的世界,江湖也是存在的。

偶尔看到一篇讲述 Apple 和 Google 如何从好基友变成宿敌的 wired 文章,大致就是说从 Google 力推 Android 一来 Apple 就致力于将 Google 在 iOS 上的产品替换为自己的,最后连两家浏览器 Safari 和 Chrome 的基础 WebKit 都分道扬镳了(在 2013 年 Google 把 WebKit 中 WebCore 那一部分 fork 成为了独立的 blink),其实 WebKit 本身和 KDE 项目有密切的关联,双方互有得失。那么两者现在唯一共用的一个是什么呢?那就是 llvm 和其上建立的 clang 编译器。llvm 本身很早就出来了,后来作者被 Apple 收归门下,但是 Apple 故伎重施依然让项目开源,但是其目的很明确,它就是希望获得一个能够不受约束集成到 XCode 里的 toolchain,gcc 本身是开源世界立山之本,其性能和可用性久经考验,为什么苹果拒绝了 gcc 呢?

这大概要从 gcc 采用 GPL 说起。RMS 创立 FSF 有个根本性的导向,在 GPL v2 中以一种程序员特有的递归性描述,表明如果程序使用了 GPL 授权的程序,它自己也必须作为 GPL 发布。但是这一描述存在一个漏洞,这导致很多硬件生产商得以通过所谓的 DRM 要求购买者在该硬件上使用 free software 建立的软件时不允许更改软件,这使得 RMS 感到非常的不安,促使他提出 GPL v3 弥补了这一漏洞(即如果硬件上使用 GPL v3 的 free software,用户有权利修改这些 software)。不少硬件生产商认为这个 license 过于苛刻。

其实对于用户而言,有这样的权利是非常的重要的,然而对经商的人来说,这无疑是断了他们的财路。想想无良销售商可以把 crippled 的软件放在硬件里卖得便宜,而把完整的贵上很多。那用户要是能修改这些软件,那还有谁会去买贵的呢?Apple 很明显出于这个原因希望获得一个可以不受 GPL 限制的编译器,这样自己的 XCode 就可以光明正大的收费或者免费,自己为自己的体系增加的“新功能、新特性”就可以自己独享了,不怕出来个什么公司又弄了一套 iOS 开发神器。Google 也正是看中了这一点,在看似很有“道理”的和 gcc 谈崩之后立即转向了 clang,这绝对不是偶然。从 WebKit 的分道扬镳我们也可以看到也许在不远的将来,llvm 和 clang 也可能在两个寡头博弈下分裂:历史上苏联和美帝的博弈导致韩国和朝鲜的分裂,也导致了东德和西德的分裂。这就是 politics。

那么两个编译器,自然就会有人比较,但是有钱能使鬼推磨!

好奇的我搜了搜两者的对比,居然发现了这封邮件。邮件的作者是 Open Source 的发起人 Eric Raymond,传说中 RMS 非常不鸟此人,因为他提出的 Open Source 一词扼杀了 free software 最为核心的精神:freedom,这是给予用户修改代码的自由,而不是肤浅公开代码获得人关注来提高自己影响力这种“自私自利”的行为。现在不少大公司打着 open source 的旗号,本质上无外于是两个目的:扩大在业界的影响力,一旦成为了事实标准,以后别人都会照着这个来;排挤别的类似项目,以免成为竞争对手。至于是不是真的对“开源社区”有所贡献,还是最后其实是开源社区贡献回来的更多,其实对准备 Open Source 的公司而言都只是为了让外人觉得中听的言语,商业公司这套冠冕堂皇的太多了,看过其内部文档就知道,RMS 对这些问题的看法真的是一针见血,你不得不佩服他一直坚持的这些原则以及他所反对的事情。回到他的回信上来,你能很明显的感受到他针对这种言论的不屑和犀利。在此也鄙视一下 Raymond 同学这么无耻的发信到 gcc 的 mail list 上,这算是踢馆嘛…

但是人家大公司还是很会造势的。有消息传来 FreeBSD 将抛弃 gcc 转投 clang。顿时跟风的马上说到,哇塞,连 FreeBSD 这么牛叉的类 Unix 系统都换 clang 了,肯定是他们觉得 gcc 不行了,这一下眼球也博到了,绝对的小三上位经典啊。这不发现了这个讨论,8g 的心理看来不是只有女人才有,程序员也 8g 的,原来 FreeBSD 也受到 Apple 的资助,作为回报 FreeBSD 贡献的自然是很多 OS kernel code,Apple 自己的操作系统本身就是 BSD 系的。很明显,作为 Apple 的“傀儡”,FreeBSD 的倒戈并不奇怪,它声明中所说 gcc 使用 GPL v3 与其自身的 BSD license 定位不符只是作为一个借口罢了(gcc 并不要求通过 gcc 编译产生的 binary 或者 source 必须是 GPL 的),更重要的目的怕就是误导观众,让大家相信 gcc 已经落后 clang 很多很多了。

你也许会问 gcc 和 clang 到底哪家挖掘机技术更强,我真的说不出来,网上不少评测的结论你根本没有办法检验他们是不是站在某个立场上发出来的,因此客观与否无法甄别,另外还有不少菜鸟试图给出他们自己都说不清道不明的评测,所以看了等于白看。但是我很明白,clang 上这几年突飞猛进跟商业公司的投入有关系,也许周边的工具也会比较齐全,但是它使的很多小伎俩,比如之前的 llvm-gcc 还是现在的 dragonegg 试图从 gcc 身上卸一些宝贝来为自己赚眼球和吆喝,不客气的说真的太肮脏了,有本事自己重头来啊,又想做婊子还要立牌坊,打着做技术的幌子,就想着坑死 gcc 嘛?

衷心祝愿 gcc 继续蓬勃发展,一定不能倒下!

————————
And Pharaoh was wroth against two of his officers, against the chief of the butlers, and against the chief of the bakers

Advertisements
C++ 杂谈(17)

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s