/var/opinion - GPL Java 是否为时过晚?
很抱歉一开始就剧透答案,但答案是,“不,还不算太晚。” 我当然更希望 Sun 在 Microsoft .NET 发布之前就 GPL Java。 我认为在那时 .NET 将会完全失败。 但请允许我展示证据,证明 Java 已经在 Linux 上击败了 .NET。
看看 Java 即使在没有 GPL 的好处的情况下也变得多么普及。 SourceForge 是最受欢迎的 Linux 软件项目仓库之一,甚至可能是最受欢迎的(软件也适用于其他操作系统,包括 Windows,但 SourceForge 主要是一个 Linux 仓库)。 长期以来,Java 在 SourceForge 上一直占据着非常突出的位置,远早于 Sun 宣布将 GPL 大部分 Java 代码。 在撰写本文时,SourceForge 列出了 5,421 个用 Java 编写的项目。 Java 项目的数量甚至超过了 C++ 项目,数量为 4,582 个。 C# 仅列出了 284 个项目,BASIC 仅列出了 34 个项目。 我认为 C 以 8,558 个项目超过所有其他项目,这不会让任何人感到惊讶。
.NET 为我们带来了 Java 所缺乏的东西。 .NET API 具有更丰富的功能,因为它不是为一次编写,到处运行 (WORA) 平台而编写的。 Java 的目标是 WORA,因此它缺少一些相当基本的功能,例如对 USB 或 FireWire 的良好支持。 这是因为直接支持硬件违反了 WORA 原则。 您必须编写硬件和/或特定于平台的 Java 扩展库,利用 Java Native Interface 来支持这些功能。
这是一件坏事吗?Java 必须忠实于 WORA 才能成为 Java 吗? 从某种意义上说,答案是肯定的。 核心 JVM 应该忠实于 WORA。 但这并不意味着您不能扩展 Java 以使其特定于平台。 实际上,我希望随着社区更多地参与 Java 的未来,除了 WORA JVM 之外,编译后的 Java 也会变得更好。 我确信社区的努力只会带来好处。
我预计一旦 Sun 完成 Java 的 GPL 化,特定于硬件的项目扩展将会蓬勃发展。 对于那些想以这种方式使用它的人来说,Java 仍然可以是一个 WORA 平台,并且社区可以提供您需要的工具,将 Java 用作一个出色的特定于平台的语言。 如果附加组件违反 WORA 又如何?它是一种语言,而不是一种宗教。 相比之下,Mono 团队决心通过追赶 .NET 的 Windows API 部分来提供非 WORA 功能。 我所能做的就是脱帽致敬并说,“祝你好运”。
Linux 上 Java 目前存在的问题(现在正在消失)是,在您喜欢的发行版上安装 Java 通常并非易事。 这种情况正在迅速改变,但仍然时好时坏。 更糟糕的是,一些最好的 Java 应用程序无法通过简单的 apt-get 获得。
这个apt-cache search jedit命令没有返回任何结果,即使在 Ubuntu 的未来版本上也是如此,尽管 jEdit 是一款出色的基于 Java 的编辑器。 搜索 BitTorrent 客户端 Azureus 会找到 GCJ 编译的版本。 这没什么问题,但我仍然更喜欢将 Azureus 作为 Java 应用程序运行。 如果我想要非 GCJ 版本,我必须手动下载并安装 Azureus。 Java 中没有那么多专业级独立客户端应用程序,但我喜欢和使用的那些应用程序很少能从标准应用程序存储库中获得。 我期望,或者至少希望,随着 Java 的 GPL 化进程的推进,以及在 Linux 的所有发行版上默认安装 Java 虚拟机,这种情况将会改变。
但这就是 Java 的使用量即将爆发的地方。 目前,经济型 Web 托管默认支持 MySQL 和 PHP,可能还有 Perl 和 PostgreSQL。 Java 通常需要额外付费,很可能是因为它不是免费的,而且提供这些服务的商业主机没有默认安装 Java。 我打赌在一年之内,您会看到所有那些每月 5 美元或更高的托管服务默认提供 Java 和 JSP。 我甚至看到一些已经采取了这一步骤。 我可能会错吗?当然有可能。 我以前也犯过一次错误——我想是 1979 年 10 月,但我可能在那件事上也错了。 无论如何,我坚持我的预测,即 Java 将在经济型托管服务上爆发。
最重要的是,如果您还没有尝试,那就去做吧。 Java 不像 PHP 那样容易上手。 但是,它与 C/C++ 足够相似,如果您有传统的 C/C++ 背景,学习曲线不会过于陡峭。 我发现学习 Java 的关键是专注于如何正确使用错误处理功能,这通常是我第一次尝试用 Java 编程时绊倒的地方。
Nicholas Petreley 是 Linux Journal 的主编,曾是一名程序员、教师、分析师和顾问,从事 Linux 相关工作和写作已超过十年。