〓【球友会】分享IT计算机各类电子书,包括各类编程语言,人工智能,机器学习、深度学习以及各类大数据、算法等内容的电子书
20周年:临危受命阻击Java见证微软转向开源
20周年:临危受命阻击Java见证微软转向开源

20周年:临危受命阻击Java见证微软转向开源

20 年前的 2002 年 2 月 13 日,仍高举着闭源大旗的微软正式发布 Visual Studio .NET,时任首席执行官比尔·盖茨将其描述为“第一个用于构建 XML Web 服务和下一代互联网应用程序的完全集成的开发环境”。

它被创造出来的目的非常明确 ——创建一个全新的技术体系以取代如日中天的 Java。

VB 曾经非常流行,但面向对象编程语言的狂热分子经常抱怨 VB 缺乏对继承的支持,对于使用 COM 和 Windows API 的高级应用来说,VB 过于复杂,而且几乎在所有方面都被 Borland 公司的 Delphi 所取代;作为微软早期的数据库语言,FoxPro 也日薄西山,其 DBF 数据库格式并不好用,加上此时的 Access 更受欢迎,后者与 SQL 和 SQL Server 更好地兼容;Visual InterDev 是微软首次使用 Active Server Pages (ASP) 进行 Web 开发,这是一种 VB 版本的 PHP,但却没有 PHP 的易用性和跨平台功能。

值得一提的是,Visual J++ 由 Delphi 的架构师 Anders Hejlsberg 设计(他于 1996 年跳槽到微软),可以看做是微软的 Java 版本,对当时的 Windows 开发相当有利。但它的问题并不是语言本身不够好,而是其不符合 Java 规范,正面临着来自 Sun 公司的诉讼危机。

也就是说,当时的微软开发生态领着一众“老弱病残”,看起来唯一能打的在法律上也被竞争对手拿捏,面对来势汹汹的 Java,微软不得不另辟蹊径。

2000 年 7 月,时任微软平台战略集团副总裁 Paul Maritz 在微软专业开发者大会上首次公布了 .NET Framework 战略。Maritz 将该战略的重要性比作八年前随 Windows NT 引入的 Win32 API。该项目最初在开发过程中被称为 NGWS(下一代 Windows 服务),Maritz 说“我们最终选择了 .NET 这个名称,因为它代表了旨在将互联网变成真正的分布式计算平台的一组技术。”

根据 Maritz 的描述,微软最初的想法是建立一个由使用 SOAP(简单对象访问协议)的 XML 网络服务驱动的程序化网络,SOAP 是一种在互联网上交换数据的 XML 标准。Maritz 说:“我们称之为网络服务架构……我们的 .NET 平台旨在使建立这些类型的应用程序变得更加容易”。

该战略旨在通过其 Passport 目录和一组代号为 Hailstorm 的第一方 XML 服务将微软置于互联网的核心,成为互联网软件分发的中转站。该服务于次年推出,但由于涉及不正当竞争很快被放弃。

“这是我们长期以来的目标,将 Visual Basic、Visual C++ 和我们的其他语言置于共同的基础上……我们今天拥有第一个真正的现代通用多语言面向对象的运行时环境”,Maritz 说。

尽管该计划的“面向对象”、“跨平台”等特性与 Java 有很多共同点,Maritz 的措辞仍试图将 .NET Framework 与 Java 区分开来。在微软的宣传中,Java 只是一种编程语言,而 .NET Framework 则是一种具有可以运行各种语言的“公共语言运行时”(CLR)—— 这在今天看来似乎有点奇怪,毕竟 JVM 语言的概念在当时就已经很普遍,而如今人们印象中大多数 .NET 开发都是用 C# 来完成的 —— 但在当时,这个宣传口径对 .NET 的推广还是起了很重要的作用。

除了宣传策略外,微软甚至在 2000 年就尝试打了“开放牌”。“我们的目的是在这个公共语言运行时和这些类库中获取全部知识产权,并将它们提供给标准机构,这样它们就可以成为一套真正开放的标准,”Maritz 说。

实际上,此时的微软对开放 .NET 并不全心全意。直到 2014 年新 CEO 上任,微软才将 .NET 分叉出开源的 .NET Core,真正支持开源 .NET,并使其成为跨平台的开发环境。甚至在去年,微软还一度做出(后来又撤销了)一些会破坏开源版本的决定。当然这些都是后话了。

Sun 公司最初推出 Java 时,是有意识地试图破坏微软当时在商业计算领域的垄断地位,而 Visual J++ 和后来的 .NET 都是微软对 Java 的反击。

根据 ASP.NET 创始人之一 Mark Anders 的说法,早期 .NET 的很多技术主要来自 Visual Basic 团队。VB 团队当时正在开发一个新的运行时,该 CLR 项目代号为“Project Cool”,它不像 COM 那样复杂,而且拥有很好的对象系统和垃圾回收器,这些特性都与 JVM 很相似。

Anders 还透露,ASP.NET 的早期原型就是用 Java 编写的,“我喜欢 Java 这种语言,Scott (ASP.NET 之父、现任微软副总裁)也是。”因此,Anders 和 Scott 也成为了微软内部首批采用 VB 团队 CLR 技术的开发人员,并推动了 .NET 项目的创建。

刚刚面世的 C# 看起来就与 Java 有着惊人的相似。它包括了诸如单一继承、接口、与 Java 几乎同样的语法和编译成中间代码再运行的过程。但是 Hejlsberg 又在 C# 中巧妙融入了一些 Delphi 和 VB 的特性来作为与 Java 的区分,包括与 COM(组件对象模型)直接集成、将 WFC 改编为 Windows 窗体类库等,规避了很多版权纠纷,这使得 C# 顺利成为了微软 .NET 框架的主角。

在 .NET 刚刚面世的前几年,微软的决策层仍聚焦于巩固自己的专利护城河,这使得 .NET 在很长一段时间里只能用于 Windows 平台,缺乏其发布会时所提出的跨平台能力,这对 .NET 在非 Windows 用户群体中的推广造成了阻碍。

2004 年,一个来自微软外部的开源项目 Mono 横空出世,率先为 .NET 的跨平台工作提供了非官方的支持。

“当我们刚开始创建 GNOME 时,那个时代的 Unix 世界有一个基于高级语言降低编程复杂性的方案,一个叫 John Ousterhout 的人构建了一种名为 TCL 的语言和一个称为 TK 的 UI 工具包,用这套工具来构建应用程序很有趣,但问题是 TCL 并不是一种出色的编程语言。”Icaza 说。

Icaza 和 GNOME 团队其他成员还尝试使用过 Java,但 Java 的即时编译器 JIT 在当时发展有限,工具包也还不够完善。于是 GNOME 团队最终使用了一个由 C 语言编写的 GUI 应用程序开源工具包 GTK。“GTK 符合我们的要求,但它是用 C 编程。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注