技术开发 频道

MoonLight让silverlight走向Mono


【IT168 专稿】
   你可能听说过微软的Silverlight技术,它是一个富互联网应用程序(RIA)框架,定位于挑战Adobe公司的Flash。但是,与Flash不同的是,它只支持Windows和Mac,而不支持Linux。这个缺陷曾经让很多Linux下的开发者感到郁闷,不过令人高兴的是,现在有一个新的被称作Moonlight的项目可以弥补此不足,该项目致力于为Mono环境创建一个Silverlight插件,通过这个插件使Silverlight技术可以在Linux、Mac和Windows上运行。

   在作者写稿的时候,Silverlight 1.0还处于早期实施阶段,正处于发行候选版阶段。尽管Silverlight 1.0本身已经令人十分兴奋,许多开发者还在等待Sliverlight 1.1,大多数人广泛的看好这个未来的新版本,据称该版本可以在.NET运行环境下使用托管代码。这个1.1版目前在alpha测试版阶段。Moonlight可以同时兼容1.0和1.1版的Silverlight。

了解Silverlight

    Silverlight被设计为一个Web浏览器插件,用于实现比HTML加脚本编程更丰富的交互性和内容控制。实际上,这是微软推动其浏览器功能发展的一步棋。Silverlight让网络应用既具备了桌面图形界面平台的强大表现力,同时又具有网络识别功能。因此,看上去和Flash颇多相似之处。不过与Flash所不同的是,Silverlight通过一种你可能已经熟悉的语言来实现这些效果,而Flash则使用自己的ActionScript脚本语言。

    它的图形界面层是用一种叫做XAML的用户界面简单标记语言来表达的,以下是“Hello,World!”的示例。
Listing 1. Hello World in XAML 
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<TextBlock>Hello, World!</TextBlock>
</Canvas>
   在Silverlight应用程序中的控制要么是通过一个预编译好的C#或Visual Basic.NET程序集控制,要么通过一个诸如JavaScript之类的脚本语言动态控制。借助于微软的动态语言运行时,程序员可以选择脚本语言来编写Silverlight。你可以选择Python或Ruby,同样也可以选择JavaScript。(注:在Silverlight 1.0中,你只能选择JavaScript,因为它不支持.NET运行时。) 

   一个Silverlight应用程序并非一个单独的文件,而是许多文件的组合,通常情况下是由描述用户界面的XAML文件和进行行为控制的脚本文件组成的。通过Siverlight应用程序编程接口(API),应用程序可以访问广泛的功能函数,包括窗口界面、网络访问和多媒体等。此外,微软的ASP.NET技术在服务器方面提供方便的综合应用程序编程接口(API),尽管Siverlight可以通过Ajax与任何服务器实现交互。

    如果你担心微软会让人们通过手工完成这些所有的编码工作,那就多虑了。你可以使用微软的一个叫做Expression的工具套装。一点也不令人吃惊的是,微软的Expression工具的作用就如同Adobe公司的Creative套装工具类似。巧妙的是,你也可以完全手动来编写Silverlight应用程序,这样或许对源代码共享以及整合代码有所帮助。

    从技术上说,Silverlight是微软现有平台技术的一个混合产物:Windows展现层(WPF)、.NET运行时和服务器端的ASP.NET。这使得Mono项目可以很容易的开发Moonlight,因为很多要求的组件已经在Mono中存在了。



Moonlight诞生的由来

    Moonlight是在Mono项目小组经过21天的连续辛勤工作而得出的成果。微软在维加斯的REMIX 07会议上向外界隆重介绍Silverlight之后,Novell的Miguel de Icaza就召集了Mono小组的一群开发者,创造了一个Linux下的类似执行工具Moonlight。他们的起点非常低,用Miguel的话来说,除了一位微软法国代表的邀请在巴黎观看了10分钟的预先展示,除此之外他们没有接触到任何相关信息。

    Miguel组织了Mono项目组中的精英人员,经过21天的努力,他们提交了超过24000行C++和13000行C¥代码到他们的subversion库中,他们的成果是部分Silverlight的实现和很多视频介绍,其中包括Miguel可以在大会上演示的Surface应用程序的示例。

    Moonlight有三个目的:首先是支持Siverlight应用程序可以在Linux上运行;创建一个SDK,以便可以单独在Linux上开发Silverlight应用程序;对Moonlight引擎进行重用以支持桌面应用程序。

    最后一个目的是非常让人感兴趣的,对于当时的Mono项目来说,具有重大的意义。追赶Windows是一个艰难的游戏,对于Mono来说没有太多机会可以实现整个Windows图形子系统。同时,GTK+不是一个非常令人满意的跨平台图形界面工具,对于从Windows转到Linux的开发者来说,肯定会对它感到非常陌生。

    因此,似乎Moonlight提供了一个在Linux上创建轻量级图形应用程序的极有希望的途径。如果对于桌面应用你并不感兴趣的话,也可以在那些嵌入式安装了Linux的便携设备上看到它的将来的用武之地。举个例子来说,Linux上的Moonlight也可以被看作是针对iPhone进行开发的一种选择。

Moonlight实现的跨越

    从深层次上看,Silverlight 1.1是.NET 2.0框架的一个延伸子集。许多功能已经被缩减,只留下那些在浏览器环境中有用的功能和一些被增加的额外的专门的应用程序编程接口。这本身对Mono项目就代表了一个有意思的挑战。它们并不是真的拥有管理多个运行时的资源,但是却想能够提供多个程序的化身。一个web用户不会仅仅因为运行一个小的applet而drag down 27 MB的Mono。

    解决方案就是Cecil,这是一个对于Mono项目具有战略意义的函数库。它能操作编译好的CIL(中间语言),并把修改后的程序集保存到磁盘中。基于Cecil之上的Linker工具能够创建同一个函数库的多个定义,在所有的编译已经完成的情况下创建合适的Moonlight库。这种优化的过程不仅仅可以移除不需要的部分函数库,而且可以增加需要的函数库,避免在最初源代码中的大量插入#ifdef的出现。目前来看,Moonlight的大小大约是8M或9M左右,大约是Mono的三分之一大。

    除了减少了应用程序编程接口(API)的大小外,在浏览器中使用Moonlight还可以带来另一个意义重大的挑战。通过网络实现并运行在浏览器中的应用程序必定会受到安全因素的影响,这一点是非常容易理解的。对于Silverlight本身来说,微软放弃了它们之前的.NET安全机制-代码访问安全(Code Access Security,CAS),而采用了另一种叫做CoreCLR的安全模型,这是一个简化过的安全模型,仅限于编写代码的人所做的是/否决策。

    由于移除了实现所有WPF功能的要求,Moonlight的安全模型包含三个代码访问级别:

   •透明(Transparent)代码
   •安全关键(Safe critical)APIs
   •关键(Critical)APIs

    所有的Silverlight应用是由安全透明的代码组成的;这意味着它们不能含有无法校验的代码,不能直接调用native代码。而safe critical APIs在Silverlight应用代码和critical APIs之间提供了一个桥梁。举个例子来说,访问文件系统将被认为是一个安全临界行为,因为它要求调用native系统。safe critical API实现了对文件系统访问的沙箱原则,对critical API进行封装,只允许符合规则的操作发生。

Moonlight的有趣的应用

    当然,Moonlight最明显的应用就是在浏览器中运行Silverlight应用。根据目前的发展状态来看,极有可能在明年的某个时候我们就可以安全实现这个目的。但是,现在你马上就可以将Moonlight应用在非常有趣的应用程序中:desklets。

    Desklets,人们又将其成为widgets,是一些有专门目的的小应用程序。如果你以前没有看到过它的话,可以去看一下Yahoo! Widgets、Mac OS X的Dashboard或gDesklets等。它们非常吸引人,易用使用,而且是轻量级应用。

    以下是Moonlight desklets的一个截图。



如何上手Moonlight

    首先,请记住Moonlight还是一个未发布的技术的实验性的实现。Silverlight本身的真正好处在其1.1版推出后才真正能体现出来。因此,你应该降低对它的期望值。如果你担心在编译或修补程序的过程中碰到太多麻烦的话,等待可能是最好的选择。

    当然,如果你还是想了解这个技术的话,可以参看Moonlight主页上的上手指南,网址是:http://www.mono-project.com/Moonlight#Getting_Started。从这儿你可以了解到上手Moonlight的最初级的入门。

    据Moonlight团队表示,Moonlight开发工具将在今年底或2008年初推出。他们希望不就会公布一个更正式的发布日程表。
0
相关文章