IT技术博客大学习 共学习 共进步

Java陷阱(2010版)

外刊IT评论 2010-10-24 19:27:22 浏览 4,003 次

作为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是不可能的,但经历了最近几个月的事件之后,我开始寻找一种替代品了,不论是否真的有。

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

[英文出处]:Java Trap, 2010 Edition

建议继续学习

  1. 我对技术方向的一些反思 (阅读 11,145)
  2. Java技术路线 (阅读 7,643)
  3. Java应用运维 (阅读 5,225)
  4. 如何正确安装ORACLE使ORACLE状态最优 (阅读 4,646)
  5. 从淘汰Oracle数据库的事情说起 (阅读 4,286)
  6. Oracle Database 12c架构图 (阅读 4,264)
  7. Oracle or MySQL ? (阅读 4,164)
  8. JavaScript性能陷阱 (阅读 4,044)
  9. PHP数据类型隐性转换的陷阱 (阅读 3,943)
  10. Java 常量值修改后不起作用 (阅读 3,903)