趣谈编程史第1期-跌宕起伏的java帝国史,剖析谷歌甲骨文长达8年的版权战争

这篇博文是我在B站上发的一个科普java的视频文案整理,本来发过一次了,但是有几种不严谨的地方只能删掉重新发了一下,内容如标题,感兴趣的码农朋友可以观看视频的版本,欢迎提提意见啥的,感谢~https://www.bilibili.com/video/av82152291/

 

在过去短短几十年间,伴随着互联网的兴起和磅礴发展,
编程语言也在同步进行着变革和演化,
从机器语言出现,到1956年真正意义上的编程语言fortran诞生直到今天,
根据我在业余搜索引擎百度上进行搜索的结果来看,
目前世界上一 共有600多种编程语言
坦白讲,当我第一次看到这个数据时,我自闭了
作为一个咸鱼程序员
满打满算我自己了解的语言用手和脚就能数过来,
给你们随便展示几个比较冷门的语言以及他们的"hello world"语法,
 
在互联网这块肥沃的土壤里,各式各样,千奇百怪的编程语言,悉数登场,
在群星璀璨或者说群魔乱舞的编程"语宙"中,
有的语言, 生于乱世,却不断野蛮生长,
有的语言,历经沧桑,但依旧推陈出新,
有的语言,被千夫所指,为世人诟病,
还有的语言,振臂一呼,拥趸无数,
不用猜了,上面说的都是java,也就是今天的主人公,编程语言排行榜常年屠榜的狠角色.
 
本期视频,我将带你回首java的前尘往事,
漫谈java当前的行业现状,
了解谷歌和Oracle长达近十年的java版权战争的始末.
以及窥望一下java的未来将会何去何从,
视频我打算做一个系列,这是第一期,我默认这个视频的观众是编外人员,
我希望用一种比较有趣下饭的方式能让你快速了解一些互联网相关的专业术语和行业趣闻,
有劝退门槛的编程知识我会小心绕过,实在绕不过去我就降维解释,
作为一个咸鱼程序员,我也不敢讲的太硬核,我不是担心你不看,
我真正害怕的是自己正给外行吹牛呢,结果碰到真懂的,误人子弟的事,咱不干.
所以这期视频不会涉及JDK,JRE,JVM以及编程语法之类的硬核知识,
准备面试的朋友可以直接出门右转马士兵
 
java的创始人叫James Gosling,不是这个james,也不是这个gosling,
是他,不修边幅,戴眼镜,聪明,是大神没跑了,后面我们简称为”高司令”,
时间要追溯到上世纪90年代,在SUN公司任职的高司令
领导了一个名为"Green计划"的项目,他们判断嵌入式系统在未来的家电领域很有搞头,
于是决定编写一个通用的控制系统.应用在电视,电话这样的小型家电上.
当时市面上最流行的语言是C++,成员基本都是C++程序员,团队最初也是打算直接拿过来用,
但是在讨论的时候大家觉得C++和一些通用API在某些方面存在很大的问题,
他们做的是嵌入式平台,可以用的系统资源十分有限,因此好刀一定要用在钢刃上,
一方面C++比较复杂,容易被程序员误用
而且缺少垃圾回收系统,在多线程和分布式等方面也有明显缺点,总之,说人话,就是C++不好用,
不好用怎么办,那我就让你好用
最初James Gosling打算直接修改C++的编译器来扩展自己想要的功能,后来发现也行不通.
于是他们决定创造一个新的编程语言
在资金支持下,工作组起早贪黑忙活了一年多,
终于到了1992年,这个新的编程语言就已经能跑在Green操作系统上了,
虽然说是全新的语言,但依旧是参考了C++很多设计,算是取其精华,去其糟粕.
这也得亏没有直接修改和扩展C++,否则你们听到的语言就会被唤作,C++ ++--
 
现在语法,类库,硬件都有了,算是具备了java语言的基本雏形.
语言虽然设计出来了,但是在上个世纪末智能家电的市场蛋糕还非常小,
就像我们今天谈智能家居一样,市场前景广阔,但现实囊中羞涩
Sun公司无奈放弃了这个计划.这门新的语言也暂时被搁置在一边.
1992年底,Green计划项组被拆分成SUN的单独的全资子公司,"FirstPERSON有限公司",
类比红米之于小米,荣耀之于华为.
当时,媒体公司时代华纳,广发英雄帖,征求一个电视机机顶盒交互系统.
SUN公司果断出手,提出了一个机顶盒平台的方案,使用新生儿java作为底层技术实现
,结果在竞标大会,铩羽而归.后来与3DO公司的另外一笔关于机顶盒的交易也没有成功,
一鼓作气,再而衰,三而竭,由于FirstPERSON有限公司在当时机顶盒市场上毫无作为
于是被并回SUN公司,java的第一次出道尝试以失败告终.
 
1994年,万维网的蓬勃发展让浏览器开始登上历史舞台,成为当时风口浪尖的弄潮儿.
当时的网页不像现在这么丰富.,没有什么动态可言,
互动体验非常糟糕,整个市场嗷嗷待哺,急需要一种新的技术打破僵局,
各大公司也纷纷投入人力物力来研发能在浏览器上带来更好体验的技术产品,
高司令团队再次果断出手,对java进行了小规模改造,并且很快做出了一个可以嵌入网页
可以随同网页在网络上传输的Applet,其实就是个小浏览器,
这个产品在交互上给当时的人们带来很大的惊艳.这就是后来的HotJava浏览器.
次年5月,在当时的SUN举办的SUN world 大会上,java语言和HotJava正式出道,一经发布,一夜爆红,
当时很多的大公司,像IBM,微软,Apple,惠普等等,纷纷购买java的使用许可,
很多公司甚至直接停掉自家在相关领域的开发项目,
大公司跟进,众多的软件开发商也不含糊,纷纷响应号召,开发基于java的软件产品.
此时java的未来看上去一马平川,前途无量.
 
这里我们必须要停下来说一下Java命名的故事,java其实他是个艺名,出来混,谁还没有个艺名呢,
java在她还不叫java的时候,也就是出道以前,名字叫Oak,
Oak呢是橡树的意思,相传Green计划研究组的办公楼门前有两个树,
一棵是橡树,他们很喜欢那棵橡树,于是就把新的语言取名叫Oak,
那另一棵树呢,没有另一棵树.
你是不是觉得这名字起的有点太随意了,配这个一个鼎鼎大名的编程语言好像有点不够豪迈,
在开发出基于java的浏览器应用时,得到了公司上下的一致好评,于是赶紧去注册专利,
虽然名字起的已经足够随意,在注册专利的时候,还是弹出了此用户名已存在的警告,
后来他们在咖啡馆讨论起新名字的事情,有个成员一口喝着Java(爪哇)咖啡,一边说
有一个人说就叫Java怎么样,那还能怎么样,你用膝盖骨也能猜到结果是得到了公司领导的一致好评,
于是,Java这个名字在喝着咖啡唱的歌的间隙就这么定下来了.你看Java语言的Logo. 
 
紧接着1996年,SUN公司就马不停蹄地发布了第一个正式的开发工具包,也就是JDK1.0.
这是java史上第一个重要里程碑,标志着java正式跻身为一个独立的编程语言和开发工具,
为什么这么说呢,虽然在1995年Sun就推出了Java,但是这时候java还只是一种语言,
如果要想开发复杂的应用程序,必须要有一个的强大的开发库支持才行.
接下来的几年,SUN又陆续的更新了几次1.X的版本,java也是越来越受到行业的追捧,
1998年,java再次迎来里程碑式的版本,jdk1.2,在这个版本中,SUN将java技术兵分三路,
分别是面向桌面应用的J2SE,面向企业开发的J2EE,以及面向手机移动端的J2ME,这个版本的发布,
充分体现了SUN公司的的野心,标志着java吹响了同时进攻企业,桌面,手机3个领域的号角.
 
在在一篇1998年发表的论文<java的发展动态和前景>中,我们可以看到这样的描述:
今年的JavaOne会议是第三届了,除软件巨头微软外,
几乎所有的计算机公司都参加了此次盛会。会议设有300多个展台,先后举行了90场专题讨论会,
从企业的Java计算、Java在电子商贸中的应用,到Java在教育中的作用,几乎涵盖了所有的信息技术领域.
Java的发展已不仅仅只是一种语言了,而是形成了Java技术,甚至正在成为“Java产业”.
 
雄镪镪气昂昂,时间进入了21世纪.
2001年,诺基亚宣布,未来几年将会生产一亿台手机支持java,
诺基亚的塞班系统开始内置java虚拟机,从网络上下载java小游戏,
拷贝到诺基亚的java文件里,也成了一代人独有的回忆,
现在的小孩对诺基亚的概念,估计就停留在无间道上了.
 
到2002年,全球财富500强企业中超过了95%的企业内部都使用了基于Java应用的企业平台,
与此同时,家大业大的微软也发布了自己的平台语言.NET.
关于java和.net之间孰强孰弱的讨论,一时间也成为那个年代的程序员之间独有的浪漫,
同时也出现了java的第一批黑粉,开启了后世对java过时讨论的先河.
当时人们对于java的最大的诟病就是一点,性能.
有病治病,2002年,SUN公司发布了JDK1.4,针对性能问题做了很多的优化,使java的性能得到质的飞跃.
 
性能这事差不多过去了,java又迎来了新难题,复杂,java当时对一些高级的语言特性并不支持,
自己本身的一些功能也由于比较复杂无人问津,像EJB2.X的版本
2004年,JDK 1.5发布,JDK 1.5在Java语法易用性上做出了非常大的改进。
例如,自动装箱、泛型、动态注解、枚举、可变长参数、等语法特性都是在这个版本加入java大家庭的.
正在看视频的码农朋友们,这一段是我精心为你们准备的优越感.
 
2005年,这一年,java领域没什么大事发生,但是要埋个伏笔,
这一年在另一条故事线上,谷歌收购了一家成立不到两年的高科技公司,这家公司叫android.
2006年,SUN公司发布jdk1.6版本,同年的javaONE会议上,SUN公司宣布将java开源.这里是第二个伏笔.
jdk1.6可以说是影响最为深远的一个版本,深远到直至今天依然有公司还在使用这个版本
如果你的公司还在使用jdk1.6的版本,建议你马上离职.
 
 
2007年,当那个男人从口袋里拿出Iphone的那一刻起,宣布了一个旧时代的结束,
同年11月,谷歌仓促的发布了android1.0手机操作系统,
同时由谷歌主导,联合一众手机制造商,芯片厂商,以及移动运营商成立了开放手机联盟,
给自家的android系0统造势,不过当时市场一片冷淡.
这里之所以讲这个是因为,android系统正是选择了java作为他的官方开发语言,
谷歌选择java,可以从java本身的适用性和普及型等很多方面找到原因,
但不可否认的,ios的横空出世,让谷歌感受了危机,才仓促发布android系统,
虽然助长了java的名声,但也为日后谷歌和Oracle两大巨头对于java的长达数年的版权之争,埋下了隐患.
 
说到甲骨文,时间很快来到了2009年,本来这一年SUN公司要发布JDK1.7
但是公司经营每况愈下,自家最知名的产品java也一直没有找到很好的商业化变现途径,
.这一年,SUN公司相继在技术竞争和商业竞争中都陷入泥潭
公司股价也一落千丈,最落魄股价只有巅峰时期的3%
被收购的命运在所难念,这么说来其实很让人唏嘘
坐拥java这一座巨无霸矿山,却始终没有挖到正经的矿
这java要是在比尔盖茨手里,那画面太美,我不敢看.
此时,Oracle果断出手,在于IBM的竞标中虎口夺食,以74亿美元的价格收购了SUN
同时一并获得了java的商标和所有权
这里特别说一下,java的语言本身并不属于哪一家公司,是开源的
它是由一个开放的国际组织,JCP进行管理.成员都有谁呢,主要是SUN公司的java的开发者.
 
2011年,接管了java的Oracle公司发布了java7,这次版本升级是Oracle发布的第一个版本,
耗费时间最长,经历了长达5年之久.
 
2014年,Oracle发布了JavaSE8,,此次版本升级加入了很多新的特性,让java变得更加强大.
 
接下来的几个版本就不提了,没有引起太大的轰动,目前来看也没有得到很好的推广,不足为外人道也,
截止到今年,java最新版本已经来到java13,更多的新特性被纳入到java语言帝国的版图,
但是互联网公司是滞后的,目前市场的主流版本依然停留在java8.
 
 2018年发了一件互联网圈的大事,
3月,美国联邦巡回上诉法院宣布了谷歌的产品安卓是否违规使用java及相关技术专利和版权的判决结果,
甲骨文胜诉,谷歌将赔偿近90亿美元.
这场从2010年就开始的马拉松官司影响深远,表面上针对谷歌一家公司,
实际上牵扯到整个java产业链和开放手机联盟
接下来我们来梳理一下谷歌和甲骨文关于java的版权之争.
 
你可能会有疑问,java不是开源的吗,为什么还会有版权问题,
在解释这个问题之前,我先解答另一个问题
为什么安卓手机用着用着就卡了,而苹果手机怎么用都不卡,
这个当然原因有很多,这里你只需要记住最重要的一点,
ios系统的的开发语言,可以直接跑在苹果的硬件上
而java是一个跨平台的语言,他必须跑在一个叫JVM的虚拟机之上
也就是说在安卓手机上运行用java编写的程序,你就必须在硬件层次之上先先把JVM虚拟机跑起来
这个虚拟机运行本身就需要占用内存以及耗电
而ios系统,没有中间商赚差价,速度肯定更快一些.
那么问题就来了,安卓手机上是否有JVM这个虚拟机呢,答案是没有.
前面我们说,ios系统的横空出世,震撼了世界
,也震撼了谷歌,在苹果发布了IPhone之后的四个月
谷歌仓促发布了android1.0操作系统.
谷歌没有选择直接在andoid系统上搭载官方的JVM虚拟机
而是谷歌自己做了一个虚拟机,Dalvik,你可以叫他DVM
这个DVM你可以理解为谷歌专门为手机设备开发的一个虚拟机
相当于使用JDK标准库函数实现了自己的一个私有库,
他针对手机做了一些特殊的"作弊"机制,比如预读用户预装的很多APP直接扔到缓存里
这就是为啥android手机总是需要的更大的内存
这个DVM和官方JVM并不能兼容,也就是说无法跑在JVM虚拟机上,
而JVM的授权协议中有规定
任何人都可以自己的JVM.但是必须要兼容官方JVM,
这就有意思了,java是开源的,任何人都可以使用java进行开发
Google以java为基础实现在自己的私有库,违反了java的授权协议,
那为啥谷歌当初不找SUN公司买一个授权呢.
其实早在2005年,谷歌就和SUN公司申请过授权
但是最后没谈成,SUN公司也左右为难
不给你授权吧,java本身是开源的,又不能不让你用,对对java的推广也不利,
如果给了你授权,就等于允许谷歌可以随意的修改java
你要是自己搞一个私有库,取名java++,那还有我什么事,
最后双方达成了一个"君子协定",
虽然不给你授权,但是允许你用
虽然允许你用,但是要有度,找准自己位置,不要越界.界在哪里,大家都懂
SUN公司也真是个老实人,后来的事也就睁一只眼闭一只眼了. 
如果你觉得Oracle告谷歌,是告他违反授权协议,韭苔小看Oracle的律师团了
事实上,Oracle压根就没有在"违反授权协议"上过多的纠缠,
大家心里都清楚,谷歌的行为就是擦边球.
但是怎么告,这里有很多门道
直接告你违反授权协议?不合适,为啥呢,
如果告赢了,就意味着android不能再使用java,那岂不是伤敌一千,自损8百,
感兴趣的朋友可以自行搜索J++,当年鸡贼的微软就是使用java语言和java系统库
另起炉灶做出了一个无法在JVM运行的J++,,结果被SUN公司告的鸡飞蛋打,
这也间接促成了C#的诞生.
 
甲骨文起诉谷歌的理由,是谷歌在开发android时未经授权使用了java的应用编程接口
也就是直接将java应用程序接口直接复制到安卓系统中,
这个要提到java的开源协议GPL,这里不多说了.
总之简单理解,告你不是因为你使用了java,而是你在使用java开发android的方式不当
告你也不是为了让你停止使用java
单纯就是为了让你赔点钱,你侵权了没问题,赔了钱就可以继续侵.
这场持续8年之久的官司不仅在"java"社区爆发了巨大的骚动
这也引起了业界广泛的讨论,Oracle一时成了众人眼中的"孔乙己".
Oracle一到店,所有编程的人便都看着他笑
有的叫道:"你家又裁员了,java啥时候收费啊",他不回答,
对着柜里说:"来几个顶级律师,越贵越好",便排出九文大钱
他们又故意的高声嚷道,"你一定是打官司又输了"
oracle睁大眼睛,"你怎么这样凭空污人清白"
"什么清白?我亲眼见你版权官司败诉了,被谷歌吊着打",oracle便涨红了脸,额上青筋暴起
争辩道"输一场不能算输,陪审团的问题,能算输吗",接着便是难懂的话,
什么"fair use",什么"API版权",什么"源代码"之类,引得众人都哄笑起来,店内外充满了快活的空气.
 
Oracle因为告谷歌这事这么不受待见
为啥还要紧咬着谷歌不放呢
我们可以从两个维度分析一下
第一个,显而易见,就是商业利益, 天下熙熙,皆为利来;天下壤壤,皆为利往
java是非盈利项目,但是你的android是个彻头彻底的的盈利项目
浓眉大眼,富得流油,广告就上百亿收入
你谷歌靠这个android赚了那么多dollar,分我一点怎么了.不分,告你.
另一个维度就要从甲骨文的CEO Larry Ellison说起,
这个人你可能不熟悉,但是你肯定熟悉另一个人
拯救地球的男人,钢铁侠托尼,屎大颗.在钢铁侠2中,埃里森就扮演他自己在屏幕上和托尼打了一个照面
埃里森和钢铁侠在性格上有很多相似之处,亿万富翁,花花公子,个人名声两极分化.
埃里森有一个一生的挚友,名字叫斯蒂夫,乔布斯,没错就是那个男人,
这里又要说道苹果和谷歌的关系了
在很长的一段时间里.他们两家公司不仅是商业合作伙伴,还是精神盟友
苹果制造伟大的设备,谷歌开发伟大的软件
谷歌公司的创立者视乔布斯为精神导师
时任谷歌首席执行官的埃里克,施密特,曾经还是苹果的董事会成员
由于微软这个共同的敌人存在,两家公司曾一度如胶似漆
俗话说,没有永恒的朋友,只有永恒的利益,这一切在2007年都土崩瓦解了
11月,谷歌发布了android操作系统,乔布斯对此深恶痛绝
苹果和谷歌的关系迅速恶化,
 乔布斯在苹果内部会议中曾表示 我们并未涉足搜索业务
但是谷歌却进入了手机产业。谷歌想要扼杀iPhone
我们绝不会让他们得逞。乔布斯甚至公开表示
除了搜索引擎,谷歌的产品,都是狗屎
后来苹果和谷歌就因为android侵权的事情开始杠上了,明里暗里,冲突不断.
 
埃里森,作为乔布斯的灵魂伴侣,在乔布斯被逐出家门,一度想买下苹果,来让给乔布斯的男人,
不用说,他肯定是站在乔布斯这边的,
,在收购SUN以后,Oracle马不停蹄的开始搞事情,仅仅几个月后
2010年9月, Oracle就谷歌侵权一事向法院提起了诉讼
要求谷歌赔偿88亿美元,理由就是谷歌在Android操作系统上使用了Oracle的版权代码
从这一方面来看,Oracle起诉谷歌侵权,实在是蓄谋已久.
 
 2011年,上帝的手机落伍了,那个男人因病去世,只有56岁
全世界都在缅怀这个偏执的完美主义者,
桀骜不羁的埃里森在回顾乔布斯临终情景时曾动情地说
他已经被癌症消耗光了,他实在太累了又太痛了。虽然他绝对是我见过最坚强的人
但他还是最终放弃了和死神的对抗。他最后停药的决定震惊了所有人.
三天后帮主与世长辞,但是Oracle和谷歌的战争却愈演愈烈
在多年的官司中,埃里森始终拒绝和解.
对埃里森这种全球富豪榜名列前茅的人说,这种行为在八卦群众眼里就像是替那个男人的复仇.
当然这是八卦的成分,追本溯源,还是Oracle觉得Android已经威胁到了java本身
android虽然用的是java的语法,但实际上却已经不是java本身,
称之为一个java衍生的编程语言也未尝不可
从某种程度上来说,安卓的不断崛起,会让java越来越尴尬.
在2017年,谷歌IO大会上,谷歌宣布支持android开发支持Kotlin语言
Kotlin是2011年由JetBrains发布的一个新的编程语言,和java一样也是运行在JVM虚拟机之上
和java100%兼容,甚至可以说,java能干的,他都能干,java不能干的,他也能干,
而且身形更曼妙,姿势更优雅.
2019年的谷歌大会上,谷歌直接把Kotlin扶正,
宣布Kotlin正式政委android 应用开发的官方首选语言.
 
被android打入冷宫的java会不会被时代最终淘汰,我觉得不会,
虽然在过去短短十多年里,很多编程语言异军突起,
像含着金钥匙出生的Golang,背靠谷歌,天生富二代,
像java的同门兄弟,scala,kotlin等,这些新语言以更加人性化和现代化的编程理念为基础,轻装上阵,
java能够一直名列前茅,
除了前期拿到优势能够不断滚雪球以外
更重要是推陈出新,与时俱进,跟着时代不断装备自己新的技能点,
人红是非多,java现在几乎成了一个市场准入标准
用来衡量一个编程语言是否能够被大家接收认可以及是否值得推广,
如果你推崇的编程语言,在他擅长的领域连java都超越不了
那他就没有什么存在的意义了.
在tiobe公布的2019年12月编程语言排行榜上
java依然稳坐头把交椅,并且每年都是屠榜的局面.
 
滚滚长江东逝水,浪花淘尽英雄
java的未来将会何去何从,我不得而知
kotlin或许能为java的进化提供一些启示
未来的编程语言会是什么样,谁也不知道,
我们不能预测,倒也无需担心
生于忧患死于安乐,斗转星移,新旧交替,都是亘古不变的真理
编程语言只是工具,使用工具的人才是进化的关键,
在科技爆炸式发展和信息量几何式增长的当下和未来
必然会不断涌现出优秀的编程思想和编程语言
灼烧我们的眼球,拓宽我们的想象
让我们满怀期待
posted @ 2020-01-05 18:38  冬至饮雪  阅读(489)  评论(0编辑  收藏