作为Apache软件基金会的成员之一,我对开源软件的立场倾向于支持更加自由的许可协议,例如Apache许可证 (v2.0), BSD, 或 MIT许可协议。我坚信应该鼓励企业都能够采用开源软件,让他们能够使用开源软件做他们想做的任何事情,在当前法律框架下尽可能的放宽限制。 宽松自由的软件许可协议能够使软件开发社区做的更好。自由的开源软件开发能鼓励真正的、专心的、有实力的参与者的奉献活动,就像“公开核心” 运动那样,企业可以出售对软件的服务和“企业级软件功能”,而不要变成一个单一个体掌握了所有软件的重要权利。

  我必须坦诚——我对Java语言并不是很热心——我更愿意用Python,Javascript,C,C++,甚至是PHP写程序,可是我发现Java无所不在,我深陷其中。Java和JVM如今已经成为我的团队开发的Cloudkick里众多组件的核心部分,而且无可替换。

  如今IBM宣布了要转移他们的工作重心,转向基于OpenJDK上开发。这是Oracle控告Google的Android侵权吸脂减肥之后的又一件大事。Oracle是一个擅长于玩弄大公司政治的公司,擅长于榨取价值——我确信他会从Sun的躯壳里榨取出最后一枚硬币为止。

  当Sun,现在是Oracle,把OpenJDK置于GPL许可协议之下时,TCK的许可协议的问题已经悬着5年多了。有些博客对这个问题有深入的介绍[1] [2] [3],我建议大家对TCK,Apache和Sun之间的故事都应该详细了解一下——但这不是我要在这里关注的。

  我认为自己是个开源软件的倡导者,尽管跟有些人,例如Richard Stallman——GNU的创始人,的做法不尽相同。Richard的观点跟我在很多问题上都不太一致,但有一点是一致的,Java世界里越来越乱的现象也开始使我对软件平台和许可协议的信仰有所改变。

  6年以前,Richard发表了“自由但带着枷锁 – Java陷阱”。当时我并不认同这种道德上的关于软件自由的论点,但现在我相信了,Java平台就是一个陷阱。

  Richard在他的文章里谈到了“免费软件世界”以及其它很多的GNU项目,其中一点我觉得十分的重要:如果你的程序依赖于一个平台,你就会受到这个平台的许可协议和发展进程的约束。

  任何软件,任何语言都会碰到这种问题。例如,如果一个免费的程序只能运行微软的Windows美白针操作系统上,那对于免费世界来说还是需要付费。但在GUN/Linux上运行的软件由于依赖于其它的非免费软件,那也同样毫无意义。在过去,Motif(在LessTif之前)和Qt(在开发人员将其免费之前)主要的问题都是产生在这个方面。大多数3D显卡都依赖于非免费的驱动,同样也产生这样的问题。但如今,最大的问题却来自于Java,因为开发免费软件的人都对Java很有感觉。对这种语言的吸引力蒙蔽了他们,他们忽略了独立性问题,掉入了Java的陷阱。

  如果你在Java和JVM上开发软件,你就被困在了由一个公司——Oracle控制的单一的一个平台上。 Oracle努力维持着对这个平台的控制权,拒绝删除在TCK里的使用条款,有效的阻止了Apache Harmony项目一直不能正式发布。对Google的诉讼证明了Oracle过度的痴迷于对这个平台的掌控。

  问题并非都是关于Oracle对他的代码的控制。就像我上面说的,我相信一个公司有权做他们想做的——可是同时,如果他们选择有害的管理方式,我将不再去使用这个平台。在Java世界最严重的事情是,这种约束在Java的第三方实现中仍然存在。Oracle可以关闭OpenJDK源代码,这与我无关,但让人恼火的是它打压Java的其它版本的实现。

  看看一些跟Java差不多的语言,它们现在都有多种版本的实现:

  Python: CPython, but also has PyPy, IronPython, and Jython.

  Ruby: MRI, but also JRuby, MacRuby,

  Javascript: v8 (node.js), Spidermonkey, whatever-safari-is-calling-their-JS-engine-now.

  C/C++: Clang and GCC

  C#: CLI and Mono

  这些语言的各种各样的实现都在它们相应的平台上做出了创新。他们大多是在社区力量的带动下完成的,大多数采用自由许可协议。社区里大家有着共同的目标和信仰,不会使用那些晦涩难懂的许可条款来保护某些公司的移动市场。在Java里,你只有一个选择,这个选择是Larry(Oracle的CEO)和Oracle赐给你的。任何试图开发出可替代实现的企图都将遇到巨大的阻力。

  当我选择一个平台做开发时,我会考虑这个平台是否会被一个公司一时的冲动所左右。我会考虑是否有各种各种各样的社团在背后支持它。我希望人们能够尝试一种新的方式开发一个VM,让这个平台变得更好。

  这就是我为什么必须要疾呼,一个人怎么能选择祛斑嫩肤Java和JVM、将公司的未来建于其之上呢?我知道Oracle和IBM——他们将会投入百万美元来推动这个平台的持续发展,但这不是一个我想使用的平台。大公司像这样一掷千金并不能产生能吸引我选择某个平台的基本吸引力。Oracle要控制Java的未来。我并不知道Java Community Process未来将会怎样,但我对它不抱有信心。

  好好想想你们的开发,为什么要使用Java?你们开发基于的平台是开放、鼓励创新的吗?无所顾忌的吗?让一个公司在一天之内从Java上移走、放弃Java是不可能的,但经历了最近几个月的事件之后,我开始寻找一种替代品了,不论是否真的有。

  你使用的平台是自由的吗?还是只是个陷阱?

养成励志的习惯,一生励志

22本经典英语口语教程  

技术开发海量资料下载导航

30本经典Linux学习和开发教程和资料 

15本经典C、C++、MFC、VC++教程

10本经典Java教程

15本经典Android教程和海量Android源码

转载于:https://www.cnblogs.com/javaTest/archive/2012/03/07/2589270.html

2012 Java陷阱相关推荐

  1. Java陷阱:内部类中的字段访问

    这本身不是一个"陷阱",而是一个值得了解的实现细节. 假设我有一个带有字段的内部类. 这样的字段对于封闭的类是可见的,但是以下哪种方法是访问它的最快方法? 注意! 我只在这里查看生 ...

  2. java 陷阱,java 中的陷阱。

    看了一段北风网的视频,总结几个经典的java陷阱给大家. 答案在博客中:http://blog.csdn.net/ol_beta/archive/2010/05/17/5598867.aspx 欢迎大 ...

  3. java陷阱常见面试题_Java常见陷阱

    java陷阱常见面试题 总览 Java是一种极简主义的语言,具有比其他语言故意更少的功能,尽管如此,Java仍然具有产生奇怪效果的边缘情况,甚至具有令人惊讶的效果的一些常见情况也会使您轻而易举. 如果 ...

  4. Java陷阱一箩筐----面试题集

    Java陷阱一箩筐----面试题集 找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, ...

  5. java 陷阱_Java基础知识陷阱

    Java浮点数精确运算陷阱 System.out.println(2.0 - 1.1); 以上结果为0.899999999999999...; 如果需要精确运算,需要使用BigDecimal类进行运算 ...

  6. Java陷阱(一)——ArrayList.asList

    一.问题代码 话不多说,直接上问题代码: package com.pajk.recsys.dk.test;import java.util.ArrayList; import java.util.Ar ...

  7. java ==陷阱_Java小陷阱

    基本数据类型与字符串的连接 在Java中,+不仅可作为加法运算符使用,还可作为字符串连接运算符使用. 当把任何基本数据类型的值与字符串值进行连接运算时,基本类型的值将自动类型转换为字符串类型. pub ...

  8. 总结几个经典的java陷阱给大家。

    DK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: ...

  9. java陷阱之自动拆箱

    项目中突然报空指针异常 Integer code=null;code=code==null?500:code; 排查发现三元运算符空指针异常,表面上看不出来有什么问题,编译器编译的时候会保证:2边数据 ...

最新文章

  1. 未来,机器人帮你盖房子
  2. php要求输入是个数求平均值、_【227期】EXCEL求平均值的各种套路汇聚合,最后难倒70%的人...
  3. pytest测试框架_聊聊 Python 的单元测试框架(三):最火的 pytest
  4. python之 启动一个子进程并等待其结束
  5. 【讲●解】KMP算法
  6. kafka to mysql_Flink : kafka to mysql example
  7. 灰度调节_网关实现灰度发布
  8. 持续集成工具集之六 参考
  9. 图片随意命名可能被广告拦截插件拦截
  10. Fences -让你的桌面图标分组显示,成块状化
  11. es6 扩展运算符 三个点(...)
  12. 联想ghost重装系统_联想笔记本重装系统图文教程
  13. 解决 无法删除文件夹 “文件夹访问被拒绝 你需要权限来执行此操作“ 的问题 理论上还可以使用本方法删除任何文件夹
  14. Mit6.824-lab3a-2022
  15. 自定义 RPC框架4——RMI+Zookeeper实现RPC框架
  16. 转载文章,让大家一起探讨,
  17. [HNOI2006]公路修建问题 ——二分答案+krukal(蒟弱个人总结)
  18. Microsoft Teams出现无法连接服务器等等的异常,重装也无法修复的处理方法
  19. GitHub上一个关于学习java的指导,很赞
  20. 移动硬盘物理结构与详解

热门文章

  1. javamail读取并发送完整的html页面
  2. Delphi XE7 Update1修正列表
  3. mvnForum1.2.2在Eclipse中的部署
  4. OSCache-JSP页面缓存(2)
  5. 分享30个最佳 jQuery Lightbox 效果插件
  6. 提示No Launcher activity found
  7. android 设置PopupWindow透明度
  8. 内存映射(mmap系统调用)
  9. String内容不能改变的理解 String的值不能修改的理解
  10. Idea问题:“marketplace plugins are not loaded”解决方案