作者 Sun 中国技术社区的高级经理蒋清野
Java终于开源了,采用GPLv2授权协议。
Java开源的最终方案和时间表,我是在10月初的时候拿到的。从那个时候起我就深深的体会到保守一个自己非常希望公开的秘密真是一件非常难受的事情,哪怕时间只有短短的一个月。Sun 公司的官方消息是11月13日(美国时间)发布的,但是在11月12日(也就是中国的11月13日)的时候,互联网上相关的新闻报道已经可以用铺天盖地来形容了。我在水木社区上看到一些认识的抑或是不认识的ID兴奋地在Java, ITExpress还有LinuxDev等版面发布相关的新闻和评论,心里满是抑制不住的欢喜。
这一篇文章,想要表达的是我个人对于Java开源,以及Sun 公司的开放源代码运动的一些想法,不代表Sun 公司的观点。
Java 为什么要开源?对于这个问题,很大一部分人的观点是Sun 公司终于抵挡不住开源社区和Java社区的种种压力,最终被迫开放Java虚拟机和编译器的源代码。持这种观点的人们可能没有意识到,在2005年6 月14日之前,Sun 公司对开源社区贡献的代码量仅次于加州大学伯克利分校。例如说在我们非常熟悉的Apache, Mozilla, Gnome, OpenOffice等等项目里面,就有大量Sun 公司贡献的代码。2005年6 月14日,Sun 公司在CDDL授权协议下开放了Solaris操作系统的源代码,从此成为对开源社区贡献代码量最大的实体。除了开放软件产品的源代码之外,Sun 公司还大胆地开放其核心硬件SPARC处理器 -- 包括2005年11月刚刚发布的8 核心32线程UltraSPARC T1处理器 --的全部设计文件,使得其他厂商能够生产和销售UltraSPARC T1以及经过改进的SPARC处理器。平心而论,不管是在软件开源还是在硬件开源领域,Sun 公司都不是第一个进行尝试的厂商,例如说IBM 公司早在2004年就有限度的开放Power构架技术,并且成立Power.org来为主要合作伙伴提供基于Power构架的处理器开发支持和应用开发支持。然而,在这场轰轰烈烈的开放源代码运动中,Sun 公司毫无疑问的是开放得最彻底的一个,从处理器(UltraSPARC T1)到操作系统(OpenSolaris),从集成开发工具(NetBeans)到应用软件(OpenOffice),无一例外。因此,公众的压力固然是促使Sun 公司开放Java虚拟机和编译器源代码的原因之一,但是即使这些压力有所减轻甚至是不复存在,Java的开源也早就在Sun 公司的蓝图之中。2005年3 月的时候Sun 公司以JRL授权协议(Java Research License, Java研究授权协议)在java.net上公开 -- 注意是公开,不是开放 -- 了JDK 5.0的全部源代码,可以认为是Sun 公司在Java开源之路上的一个重要环节。
那么,Sun 公司究竟为什么要开放Java虚拟机编译器和的源代码呢?进一步说,Sun 公司为何要彻底地进行自己的开放源代码运动,将自己在软件和硬件领域多年的积累拱手送给公众呢?这到底是“自由、平等、共享、创新、互助、团结”的开源精神,还是在自己走向毁灭之前试图让对手将来也无法立足之垂死挣扎?
我曾经不止一次地在论坛上看到这样的言论:“真是羡慕国外的程序员,他们有优越的收入和充足的时间,丝毫不用担心住房和医疗等等让人头疼的问题,因此能够利用大量的业余时间编写和维护开放源代码软件。国内的程序员连生存下去都是问题,怎么可能给开放源代码运动作贡献呢?”不可否认,这世界上的确存在大量具有崇高精神的利用业余时间编写和维护开放源代码软件的程序员,不过我们只要粗略地阅读一下Linux、Eclipse、Apache、OpenOffice等等软件的源代码开头的注释部分,就知道这些开源软件的作者之中的大多数,仍然在为住房和医疗问题而劳心烦恼,而他们给开放源代码运动所作出来的贡献,大部分是在他们的正常上班时间作出的。很显然,对于这些作者来说,编写和维护开放源代码软件是他们的工作而不是他们个人的崇高爱好,他们所在的公司为他们编写和维护开放源代码的工作支付酬劳 --在这个数不胜数的公司名单上有IBM,有RedHat,有Novell,当然也有Sun 。可以这么说,这些商业公司参与和推进开放源代码运动的动机基本上是一致的,所不同的只是他们参与和推进开放源代码运动的方式,以及开源与不开源之间的尺度把握。
商业公司参与和推进开放源代码运动的方式,大体上可以分为如下几种。
1.将公司已经不再使用并且保密价值不大的源代码捐献给开源社区,不再维护,也不为其他愿意继续维护这些源代码其他公司或者个人提供技术支持,这种方式我们可以称之为“抛弃型开放源代码”。在开源社区中存在大量的抛弃型开放源代码项目,其主要表现形式为项目长期没有更新,没有缺陷报告和补丁发布,没有论坛或者是邮件列表活动,发给项目负责人的电子邮件通常来说有如泥牛入海。著名的开源社区sourceforge.net之所以被称为世界上最大的“恐龙停车场”,其原因之一就是这个社区“寄放”了大量不再活跃的抛弃型开放源代码项目。由于很少有人会注意到某个公司的某个开源项目是否为抛弃型开放源代码项目,因此有相当数量的公司将这种方式作为改变公司形象的一种有效手段,不定期地向开源社区贡献一些侏罗纪的代码。
2.将能够直接地为公司带来盈利的产品和技术开放源代码,但是通过授权许可(最常见的形式是双授权许可)来保护公司的盈利。采取这种方式开放源代码的公司并不鼓励开源社区对该产品和技术本身进行改进,但是鼓励开源社区在该产品和技术的基础上开发可商业化的应用。例如QT,对于开发人员来说是完全开放和免费的,但是基于QT的应用要商业话的话,就必须向TrollTech公司交纳一定数量的授权费用。这种形式能够有效地扩大该产品或者是技术的市场占有率,并且有效地阻止了竞争对手利用开放的代码提高其竞争能力,但是也必须直面未授权商业化应用所带来的利润损失。
3.将能够间接地为公司带来盈利的产品和技术开放源代码,鼓励开源社区对该产品和技术本身进行改进,但是通过研发经费、人工投入、授权许可等多种方式来保护公司对该产品和技术的控制权。由IBM 控制的Eclipse项目和由Sun 公司控制的OpenSolaris项目,可以说是这种开源方式的杰出代表。
4.针对为竞争对手带来盈利和产品和技术另起炉灶开发一个开放源代码项目,通过研发经费和人工投入鼓励开源社区对该产品和技术本身进行改进,并且在自己的商业应用中使用该产品和技术。举个例子,今年11月1 日摩托罗拉宣布要成立一个开放源代码的Java ME社区,这对于Sun 公司的Java ME商业授权来说毫无疑问是个强劲的威胁。
从如上几种方式不难看到商业公司参与和推进开放源代码运动的动机所在,那就是提高企业形象,扩大市场份额,打击竞争对手。
有的人就会问了:既然开放源代码有这么多好处,为啥这些公司没有向Sun 这样把自己的核心技术全都开放源代码了呢?因为开放源代码就向是一把双刃剑,机遇与风险总是同时存在的。下面列出的是几个在开放源代码运动中常见的风险。
1. 法律风险。这个风险至少包括两个方面,一个是被开放的源代码的所有权问题,也就是说源代码的原作者是否同意公司开放其编写和维护的源代码;另外一个源代码所涉及到的专利权问题,也就是说源代码中所使用到的专利技术有可能给没有被授权使用这些专利技术的用户造成法律问题。对于前者来说,大部分公司的做法是花费大量的人力和物力来征得原作者的同意将其代码开源,对于未征得同意的部分源代码需要寻找开放源代码的替代方案或者是重写甚至是将该功能彻底剔除。对于后者来说,有的公司会选择听之任之将法律责任推给使用开源技术的开发商,但是有的公司则会设法为使用开源技术的开发商提供保护伞 --例如说,在CDDL授权协议框架之下,Sun 公司承诺为使用OpenSolaris技术的厂商提供法律保护,使用Sun 公司的资金为厂商解决在使用OpenSolaris当中涉及的法律问题。
2.竞争风险。选择将某个产品和技术开放源代码,也就选择了将自己的优点和缺点全部暴露在竞争者无比挑剔的眼光之下。然而这还不是最可怕的,最可怕的是竞争对手直接使用你的产品和技术去抢占原本属于你的市场。例如说,今年10月30日的时候Oracle宣布推出Unbreakable Linux,正式加入Linux市场抢夺战 -- Unbreakable Linux基于RedHat Linux的源代码,但是去掉了RedHat的Logo,同时加上了Oracle的Logo。还记得Oracle的总裁Larry Ellison在被问及是否会考虑收购RedHat的时候是怎么说的吗?他的回答是Oracle不会收购一家随时都有可能被淘汰的公司。
3. 技术分化。选择了某个产品和技术开放源代码,也就选择了让竞争对手参与到该开源项目的开发与维护当中来,从而出现多个版本互不兼容的实现。一个很实在的问题就是,Java语言开源之后,会不会出现多个互不兼容的Java虚拟机实现,从而导致Java语言的“一次编写,随处运行”特性成为一句空话? Eclipse基金会是不是会将AWT/SWING的竞争技术SWT 集成到Eclipse基金会发布的Java虚拟机里面去?
Java开源还是不开源?在回答这个问题之前,还是让我们来看看Java语言和Sun 公司所面临的挑战吧。
1.Java语言是“前人种树后人乘凉”的一个典型范例 -- Sun 公司发明、发展和维护了Java语言,但是从Java语言当中获利最大的却是IBM 和BEA 。
2. 在Java程序员与C/C++程序员的比例接近1:1的今天,Java语言遭遇到了开放源代码阵营的顽强抵抗。这种抵抗体现在Linux 厂商拒绝在Linux 发行版中集成基于Java语言的应用程序,而抵抗的理由非常的简单,那就是除非获得Sun 公司的授权Linux 厂商不允许在其Linux发行版中捆绑Java运行环境(Java Runtime Environment, JRE) -- 既然连JRE 都没有,当然就没有基于Java的应用程序。前两天在水木社区的ITExpress 版有一些关于为何Gnome 上面有很多软件是基于MONO而不是基于Java的讨论,Suzhe的观点是Java调用外部函数比较困难,不能够很好地利用现有的库资源,然而从更高的层次来说,Java的授权模式才是Java无法在开源阵营得到推广的结症所在。举个例子来说,2005年的时候我跟国内的两家小有名气的Linux厂商商谈将JRE捆绑(OEM)到他们的Linux发行版当中去,这本来是郎有情妹有意两厢情愿的事情,结果却在公司的律师们那里石沉大海。现在Java语言都已经开源了,我一年前递上去的授权申请还连个响都没有听到 -- 这里面的主要原因,是在当时的JRE授权模式下,很难向某个Linux厂商提供OEM 授权。基于类似的原因,在BSD 阵营里Java技术的推广也没有太大的进展,甚至给人一种Sun 公司敌视BSD 阵营的印象。
3.经过多年的发展,市面上已经出现了多种开源和不开源的Java虚拟机和编译器实现,与Sun 公司提供的Java SDK相竞争 --不开源的虚拟机包括IBM 的JDK和BEA 的JRocket,开源的虚拟机包括Kaffe和Apache Harmony。由于这些开源虚拟机在授权许可方面对Linux 厂商相对友好,因此得到了众多Linux 厂商的广泛支持。这也意味着(1)如果听任这些开源的虚拟机项目继续发展,Sun 将在Linux 阵营上失去原本就来之不易的市场份额;(2)竞争厂商必然会将与Sun 公司相竞争的技术集成到开源的虚拟机项目中,从而导致Java技术的分化,使得Sun 公司失去对Java技术的控制权。如果Sun 公司主动将自己的Java虚拟机和编译器开源,就可以利用自身在该领域的强大号召力弱化其他开源项目的吸引力,从而达到保护自身的目的。
4. 作为世界上对开源社区贡献代码量最多的实体,Sun 公司已经从开放源代码运动里面尝到了甜头。例如2005年6 月Sun 公司开放Solaris操作系统源代码之后,开发者对Solaris操作系统的兴趣大为上升,在短短的几个月时间内,从Sun 公司网站上下载Solaris 操作系统的总份数就迅速超过以往所有下载份数的总和(过去Solaris操作系统也是可以免费下载的)。来自开发者的热情直接导致了Solaris操作系统市场占有率的增长,例如在2006财政年度(2005年7 月1 日到2006年6 月30日)间Sun 公司来自Solaris OEM授权的收入达到了预期的124%。2006年第二季度Sun 公司来自服务器销售的营收为16亿美元,比去年同期增长14%。这种财务上的强劲长势验证了Sun 公司高层在各种场合不断重复的一句话:“从长远来看,我们也不知道开源到底会给Sun 公司带来什么样的影响。但是从目前的状况来看,我们每一次开放核心技术的源代码,都给公司带来财务上的强劲增长。”
决策层与众多律师昼夜焚膏推演博弈理论的结果是:采用GPLv2授权协议开放Java虚拟机和编译器的源代码。
经过前面的讨论,我想大部分人都会认可Java开源是一件顺利成章的事情。不过熟悉Sun 公司开源历史的人可能会问了:为什么是GPLv2?为什么不是CDDL?Sun 公司在开放Solaris操作系统源代码的时候费尽心思的设计了CDDL授权协议,为什么在开放Java虚拟机和编译器源代码的时候不再使用?在CDDL 刚刚发布的时候,Sun 公司曾经在多个场合批评GPL 授权协议,认为GPL 授权协议强制要求使用了GPL 代码的项目进行开源是不公平的,甚至认为GPL 是一个“掠夺性的授权协议”。Java开源使用GPLv2授权协议是不是暗示着Solaris开源使用CDDL授权协议是一个错误的选择?对于这些高层次的问题,Sun 公司软件部门执行副总裁Rich Green认为他会敞开心怀倾听任何关于修改Sun 公司开源策略的建议。很显然,作为对开源社区贡献代码量最大的Sun 公司,仍然在不断地学习和调整开源的技巧和策略。不过,Java采用GPLv2授权协议开源对于Sun 公司来说至少有如下好处:(1)禁止非开源的分叉实现,(2)得到F/OSS社区的支持,(3)与GNU/Linux的授权协议相兼容,可以迅速被 Linux社区所接受,(4)通过Sun Contribution Agreement保证了对Java语言的控制权。在Sun 公司公布采用GPLv2授权协议开放Java虚拟机和编译器源代码的同一天,IBM 公司未来互联网技术部门的副总裁Rod Smith认为Sun 公司应该采用Apache授权协议来实现Java开源(因为IBM 公司控制着基于Apache 授权协议的Harmony项目,一个开放源代码的Java虚拟机实现)。对此Sun 公司首席执行官Jonathan Schwartz毫不客气地进行了坚决的回击:“我非常好奇IBM 公司为什么会反对GPL 授权协议。我真心的盼望他们不会站到开源社区的对立面。”如果不是GPLv2,如果没有整个GNU/Linux社区作为后盾,Jonathan Schwartz的反应还能够如此之铿锵有力么?
Java开源,是Sun 公司的选择,也是顺应潮流的选择。我真心的希望开源之后的Java一路走好,也希望坚持彻底开源的Sun 公司一路走好。
作者 Sun 中国技术社区的高级经理蒋清野 http://www.newsmth.net/pc/pccon.php?id=6&nid=272944&s=all
1.Java语言是“前人种树后人乘凉”的一个典型范例 -- Sun 公司发明、发展和维护
Java语言,但是从Java语言当中获利最大的却是IBM 和BEA 。
回顾Java的产生历史,“一次编译,到处执行”是那个年代的特有需求。操作系统繁多,
带来了应用移植的代价问题,这也是为何上面那句话那么有震撼力。但反过来,我们也
知道没有各个系统厂商的支持,也不会有这么个愿景的产生。Sun拥有Java的同时也需要
各个系统和应用厂商来支持Java,这对于当时的Java来说是同等重要的贡献。
说到Sun在Java上的获利失败,不得不提的就是当年Netscape倒掉的时候Sun得到了iPlanet
Application Server,当Sun握有当时市场排名第一和第二的产品时,却逐渐在IBM和BEA
的竞争下到今天到达几乎没有AppServer的市场,这不能不说自身产品市场定位的问题。
而Sun自身除了Solaris和Java两个产品,很多应用产品无法占有足够的市场,有多方面
的原因。一则产品开发无法及时反映市场的变化,二是产品过于集中于基础平台,没有
上层商业应用支撑。对于中间件这块大市场来说,都是很致命的错误。
分享到:
- 2006-12-06 11:37
- 浏览 2398
- 评论(3)
- 论坛回复 / 浏览 (3 / 4136)
- 查看更多
相关推荐
由Java说起:编程语言还需要开源吗
首先,让我们从最基本的Java编译工具JDK(Java Development Kit)说起。JDK包含了Java编译器javac,它将源代码转换为可执行的字节码。此外,JDK还提供了JVM(Java Virtual Machine)用于运行Java程序,以及JRE(Java...
本文从电子商务的概况说起,就开源软件如何帮助中小企业进行信息化建设及开展电子商务进行分析,对当前最热门的动态网站开发工具 JSP、ASP、PHP 从技术应用上进行了分析和比较,阐述 Java 在构建电子商务平台中的...
首先,让我们从Java语言的基础说起。Java是一种广泛应用于各种领域的面向对象的编程语言,以其跨平台性、安全性以及高效性而闻名。在本项目中,Java主要负责游戏的逻辑处理、数据存储以及用户交互等功能。开发者利用...
从创建一个scala项目说起 在D盘新建一个项目目录,比如说叫AkkaDemo。 进入AkkaDemo目录,新建一个build.gradle文件,并在文件中输入一下内容: apply plugin: 'idea' apply plugin: 'scala' task "c
java餐饮管理系统源码加数据库 优秀文章集 KOA2框架原理解析和实现 ...一次内联元素错位引发对line-height的思考...从一道面试题说起—js隐式转换踩坑合集 CSS实现元素居中原理解析 前端骨架屏方案小结 Typescript配合Reac
爬虫为什么要监控 gecco是一个十分简单易用的java开源爬虫框架,同时也一个款拥有很好扩展性的框架,目前已经有: 结合spring的插件gecco-spring 结合htmlunit的插件gecco-htmlunit 结合reids的插件gecco-reids 在...
我自己是从09年底开始接触Android无线应用的功能测试,那么就从那个时间开始说起吧。 09年到11年底属于移动互联网测试在中国的第一个阶段,那个阶段几乎网络上除了Android、iOS的官方文档,不存在其它任何相关的测试...
java8 rt.jar源码 lf-bili-java-sprig-cloud 2020最新版SpringCloud(H版&alibaba)框架开发 2月 0基础:0-4 初级:5-9 中级:10-16 高级:17-21 host文件修改: C:\Windows\System32\...2.从2.2.X和H版开始说起 2.1
首先从一个重要的概念“模板”说起。 广义上来说,web中的模板就是填充数据后可以生成文件的页面。 严格意义上来说,应该是模板引擎利用特定格式的文件和所提供的数据编译生成页面。模板大致分为前端模板(如ejs)和...
说到这里不得不说起另外一款web压力测试工具loadrunner,loadrunner是一款商业性质的压力测试工具自定义测试方面相比Jmeter差了很多,Jmeter是一款轻量型的,对日常的压力测试工作Jmeter完全可以胜任。jmeter功能它...
从APK的文件结构说起 相关介绍请参见《关于APKApp.svelte值得分享的一些经验.pdf》 APK在安装和更新之前都需要经过网络将其下载到手机,APK越大消耗的流量就会越多,特别是对于使用移动网络的用户来讲,消耗流量越多...
首先,让我们从Web服务器说起。Apache HTTP Server是一款广泛使用的开源Web服务器,它支持多种操作系统,包括Windows和Linux。Apache的灵活性和可扩展性使得它成为许多网站的首选,可以通过安装不同的模块来支持不同...
【Redis在万亿级日访问量下的中断优化】从网络丢包开始说起,长文回顾优化全过程。,地址: chameleon 滴滴开源的跨端整体解决方案。教程地址: GitHub 地址: 《500 Lines or Less》: 成为专业程序员路上用到的...
- **1.2.1 从Twitter说起** - Storm 最初是由 Nathan Marz 在 BackType 公司开发的,后来随着 Twitter 收购 BackType 而被引入 Twitter。 - **1.2.2 Twitter需要处理大批实时性要求高的大数据业务** - Twitter ...
首先,让我们从单块系统开始说起。在传统的软件公司中,系统可能都是单块系统,即所有代码都在一个工程中,部署在一个Tomcat中,通过负载均衡服务器来处理流量。这种系统在中小型公司中很常见,但是随着团队的扩大和...
ImageJ是一款广泛应用于生物医学、图像...总的来说,"ImageJ-master.zip"为开发者提供了一个深入了解和定制ImageJ的机会,无论是对图像处理有兴趣,还是想要学习Java编程和开源项目开发,这个源代码都是宝贵的资源。
4.1.1从BigTable说起 BigTable是谷歌设计的一个分布式存储系统,它基于MapReduce进行分布式并行计算,使用GFS(谷歌分布式文件系统)存储数据,并借助Chubby提供协同服务管理。BigTable广泛应用于谷歌的各项服务,...