作为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
[译文来源]:外刊IT评论
转:http://www.aqee.net/2010/10/25/java-trap-2010-edition/
分享到:
相关推荐
Java语言在实际应用中充满了各种陷阱,这些陷阱可能在...通过深入理解和实践这些Java陷阱,不仅可以避免在编程中犯错,也能在面试中展现出专业技能,为你的职业生涯加分。不断学习和探索,使你在Java的世界里游刃有余。
该文档讲述了java程序员常见的编程陷阱和一些面试指导
Java作为一门广泛使用的编程语言,其基础知识的掌握对于程序员来说至关重要。然而,即便是经验丰富的开发者也可能在...本资源的"01第一讲:Java基础方面陷阱"应包含了对这些知识点的详细讲解,值得Java程序员学习参考。
《Java陷阱:开源与专有的拉锯战》 在IT界,Java无疑是最具影响力的编程语言之一,然而,它的光环背后却隐藏着一系列被称为“Java陷阱”的问题。这些问题不仅涉及技术层面,更触及到开源软件许可协议的核心。本文将...
### Java面试中的陷阱知识点解析 在Java面试过程中,面试官往往会通过一些问题来考察应聘者对Java基础知识的理解深度以及在实际编程中解决问题的能力。本文将根据提供的标题、描述及部分内容,整理并归纳出一系列...
Java陷阱一箩筐——面试题集 Java陷阱一箩筐——面试题集 Java陷阱一箩筐——面试题集 Java陷阱一箩筐——面试题集
Java面试---陷阱一箩筐-----------------------------
"1222-张国旗-JAVA陷阱.rar"这个压缩包文件显然是一份由专家张国旗编写的关于Java编程中常见陷阱的教程,通过PPT的形式,帮助学习者轻松理解并避开这些陷阱。 首先,让我们来探讨一些可能包含在PPT中的Java陷阱: ...
《Effective Enterprise Java》也不例外,它旨在帮助开发者避免常见的陷阱,提升代码质量,并提高开发效率。书中的每个条目都是一个独立的建议,旨在解决实际开发中遇到的问题,这些条目通常以简洁明了的方式呈现,...
面试 陷阱 技巧 历史最全面的Java面试题 陷阱 和面试技巧
标题和描述均强调了在Java中处理`String`对象时可能遇到的陷阱,尤其是在理解和使用`String`的处理机制上。文章由天津工业大学软件工程专业的翁龙辉撰写,旨在深入剖析`String`在Java中的独特行为及其潜在的陷阱。...
"Java SCJP 陷阱大全"显然是一份集合了Java编程中常见错误、陷阱和难点的资料,旨在帮助考生或者开发者避免在实际工作中遇到这些问题。以下将详细介绍Java SCJP考试中的一些关键知识点和常见陷阱: 1. **基本语法**...
Java面试是每位求职者在寻找Java相关工作时必须经历的一关,而“陷阱题”则是面试官们常常用来考察候选人深度和广度的一种方式。这些题目往往涉及到一些易被忽视的细节,或者是容易混淆的概念。以下是一些重要的Java...
Java SCJP,即Sun Certified Programmer for the Java Platform,是一项针对Java程序员的基础认证考试。这个文档列举了一些常见的陷阱和错误,让我们一一...理解并掌握这些陷阱,有助于编写更规范、更健壮的Java代码。
《Java开发手册(黄山版)》是一份由阿里巴巴和开课吧技术团队共同编撰的、基于大量一线实战经验的编程规范文档。这份手册旨在提高Java开发者的综合素质,确保软件的高质量交付。随着软件行业的快速发展,开发者的...
Java语言在设计上有着丰富的特性和机制,但同时也存在一些陷阱和细节问题,这使得面试时经常出现一些挑战性的题目。下面将详细解释标题和描述中提到的一些关键知识点。 1. **final, finally, finalize的区别**: -...
《More Java Pitfalls》中文版是一本专注于Java编程中常见陷阱和误区的书籍,它针对初学者和有经验的开发者提供了宝贵的指导。该资源以RAR压缩格式提供,包含一个PDF文档,便于读者在电脑上阅读或打印。 Java是一种...
《阿里Java开发手册-黄山版》是一份由Java社区爱好者共同智慧结晶的开发规范文档,旨在提高Java开发者的综合素质和软件质量。这份手册经过多次实战检验,并不断优化,形成了一个全面且系统的指导体系。手册主要涵盖...