Скачать презентацию Mono Rapid GUI Application Development On Linux Karl Скачать презентацию Mono Rapid GUI Application Development On Linux Karl

601220d842af26efa2b84806128b6d04.ppt

  • Количество слайдов: 60

Mono: Rapid GUI Application Development On Linux Karl Bunnell Software Engineer Consultant, Novell Inc. Mono: Rapid GUI Application Development On Linux Karl Bunnell Software Engineer Consultant, Novell Inc. kbunnell@novell. com

The one Net vision 2 © January 30, 2004 Novell Inc. The one Net vision 2 © January 30, 2004 Novell Inc.

The one Net vision 3 © January 30, 2004 Novell Inc. The one Net vision 3 © January 30, 2004 Novell Inc.

Agenda • • Mono Overview • 4 . NET Overview Lab Exercises that implement Agenda • • Mono Overview • 4 . NET Overview Lab Exercises that implement simple technologies on Linux Platform © January 30, 2004 Novell Inc.

What is. NET? • Microsoft. NET is a “vision”, or marketing strategy, as well What is. NET? • Microsoft. NET is a “vision”, or marketing strategy, as well as new technologies • A brand applied to: • Several new technologies • . NET Framework – Mono is an implementation of the. NET Framework • • • New releases of old technologies Several old technologies Most significant new technologies • • 5 © January 30, 2004 Novell Inc. Common Language Runtime (CLR) / Common Language Infrastructure (CLI) Web Services

. NET Platform Visual Studio. NET Enterprise Servers . NET Framework . NET Services . NET Platform Visual Studio. NET Enterprise Servers . NET Framework . NET Services Operating Systems, desktops and devices 6 © January 30, 2004 Novell Inc.

The. NET Framework • Managed, type–safe environment for the development and execution of applications. The. NET Framework • Managed, type–safe environment for the development and execution of applications. • Previously only available on Windows, now available on Linux. The. NET Framework consists of the following two components: • Common Language Runtime (CLR) • • Provides core services • • Manages code execution Enforces safety and security restrictions . NET Framework class library • 7 © January 30, 2004 Novell Inc. Collection of useful and reusable types that integrate with CLR

. NET Framework Web Services Web Forms Windows Forms Data and XML Classes Framework . NET Framework Web Services Web Forms Windows Forms Data and XML Classes Framework Base Classes Common Language Runtime Windows/Linux Platform 8 © January 30, 2004 Novell Inc.

The. NET Framework Benefits • Language Independence • • Platform Independence • • Like The. NET Framework Benefits • Language Independence • • Platform Independence • • Like Java, . NET code is not compiled to machine code but to an intermediate byte format (CIL). Hence, anywhere the interpretive engine exists the application can run. Class Library • 9 Write an application in any supported language (C#, Monobasic, etc) and its classes can be shared with an application written in any other supported language. Extensive class library that includes support for many/most of the tasks needed for application development. © January 30, 2004 Novell Inc.

The. NET Framework Benefits • C# Language • • More full-featured than previous versions The. NET Framework Benefits • C# Language • • More full-featured than previous versions of Basic classes can be used from other languages like C# Web Applications • 10 Effective language patterned after Java, so it contains many of the strengths of both Java and C++ VB. NET Language • • (cont. ) ASP. NET delivers on the promise of Web Services with implementation of technologies such as WSDL, SOAP, etc. © January 30, 2004 Novell Inc.

The. NET Framework Class Library • Object-oriented collection of reusable classes that provide many The. NET Framework Class Library • Object-oriented collection of reusable classes that provide many of the services needed to write an application • All Framework classes are under the “System” namespace • • • 11 System. Collections System. Data – database access and manipulation System. Data. SQLClient – MS SQL Server specific System. IO – File system handling System. Security – permissions, cryptography, etc. System. Windows. Forms – types for windows apps. © January 30, 2004 Novell Inc.

The. NET Framework Namespace • Logical, Hierarchical grouping of related classes • • Similar The. NET Framework Namespace • Logical, Hierarchical grouping of related classes • • Similar to a ‘package’ in Java Access namespaces with: • Imports – Visual Basic. NET • using – C# • 12 © January 30, 2004 Novell Inc. using System. Windows. Forms

Assemblies • Physical packaging of the class libraries • Typically built as a ‘. Assemblies • Physical packaging of the class libraries • Typically built as a ‘. dll’ file. • • An Assembly Manifest is Metadata that contains information about what an assembly contains • • • Assemblies name and version Types exposed by the assembly Other assemblies required by the assembly Security instructions (permissions required and denied) . NET runtime, tools, compilers etc. can all use this ‘Metadata’ to find out all they need to know about. NET resources. • 13 However, don’t confuse them as being a Win 32 shared library © January 30, 2004 Novell Inc. Used for Reflection

Common Language Runtime (CLR) • Provides services to. NET applications (similar to JVM in Common Language Runtime (CLR) • Provides services to. NET applications (similar to JVM in Java) • • Manages memory • Thread execution • Code execution • Type safety verification • 14 A set of libraries available to all. NET applications Compilation (Just In-time Compiler) © January 30, 2004 Novell Inc.

Common Language Infrastructure (CLI) • Subset of the CLR submitted to the European Computer Common Language Infrastructure (CLI) • Subset of the CLR submitted to the European Computer Manufacturers Association (ECMA) standards organization so that a third-party vendor could implement a CLR for a platform other than Windows. • Shared Source CLI (SSCLI) is a working implementation of the ECMA CLI. • Submitted for standardization: • • Semantics for metadata • Microsoft Intermediate Language (MSIL) • 15 C# Parts of the. NET framework class library © January 30, 2004 Novell Inc.

Managed Code Web Definition: Code that is executed by the CLR. Managed code provides Managed Code Web Definition: Code that is executed by the CLR. Managed code provides information (i. e. , metadata) to allow the CLR to locate methods encoded in assembly modules, store and retrieve security information, handle exceptions, and walk the program stack. Managed code can access both managed data and unmanaged data. Managed data—Memory that is allocated and released by the CLR using Garbage Collection. Managed data can only be accessed by managed code. 16 © January 30, 2004 Novell Inc.

. NET Portable Execution File • Executable files must conform to the publicly available . NET Portable Execution File • Executable files must conform to the publicly available file format called the “PE file format”, which is a derivative of the Microsoft Common Object File Format (COFF), also publicly available. • . NET extends this file with a CLR Header and Data section that allows the CLR to execute/manage the application. . NET PE File Common Language Runtime 17 © January 30, 2004 Novell Inc. . NET PE File

The Microsoft Intermediate Language (MSIL) • • Not a machine specific binary but an The Microsoft Intermediate Language (MSIL) • • Not a machine specific binary but an intermediate representation • 18 Intermediate format that runs in the CLR Must be converted by a. NET Framework just-in-time (JIT) compiler to native code © January 30, 2004 Novell Inc.

MSIL Tools • MSIL Assembler (Ilasm. exe) • • MSIL Disassembler (Ildasm. exe) • MSIL Tools • MSIL Assembler (Ilasm. exe) • • MSIL Disassembler (Ildasm. exe) • • Creates MSIL code from executable Native Image Generator Tool (Ngen. exe) • 19 Generates executable from MSIL Compiles MSIL to machine code in lieu of JIT compiler © January 30, 2004 Novell Inc.

MSIL “Hello World” • Assembler directives begin with a period • MSIL instructions: lines MSIL “Hello World” • Assembler directives begin with a period • MSIL instructions: lines 8, 9 and 10 /* This is an MSIL comment */. assembly extern mscorlib {}. assembly hello {}. method static public void main() il managed {. entrypoint. maxstack 1 ldstr “Hello World!” call void [mscorlib]System. Console: : Write. Line( class System. String ) ret } 20 © January 30, 2004 Novell Inc.

. NET Application Construction • Write application in one of the many supported languages . NET Application Construction • Write application in one of the many supported languages (C#, VB, C++, etc). • All these languages conform to the Common Language Specification (CLS) • Compile application into Microsoft Intermediate Language (MSIL or IL) • Execute code within the CLR • 21 Since all compilers, tools and the CLR use the Common Type System (CTS) data can be transferred between applications developed in different languages. © January 30, 2004 Novell Inc.

. NET Execution Model Source Code Managed Code VB C# C++ Compiler Assembly Code . NET Execution Model Source Code Managed Code VB C# C++ Compiler Assembly Code Common Language Runtime JIT Compiler Native Code Operating System Services 22 Unmanaged Component

Common Type System (CTS) CTS • . NET supports language integration, which means that Common Type System (CTS) CTS • . NET supports language integration, which means that you can inherit classes, catch exceptions, etc. across languages. This is possible because all. NET components must adhere to the CTS standard. • All objects derive from root object System. Object • CTS is a type system shared by compilers, tools and the CLR • CTS supports two different types: • • 23 Reference (heap allocation) Value (stack allocation) © January 30, 2004 Novell Inc.

Common Language Specification (CLS) CLS • The goal of. NET is to support language Common Language Specification (CLS) CLS • The goal of. NET is to support language integration • BUT - not all languages are the same • • Some are case sensitive, others are not, etc. CLS is a specification that identifies a base set of rules that are required for language integration. • • 24 Languages must support CLS to be compliant with the. NET Framework Essentially CLS is a contract between language designers and the. NET Framework © January 30, 2004 Novell Inc.

NET Languages • The CLR was designed to support multiple languages C# VB C++ NET Languages • The CLR was designed to support multiple languages C# VB C++ J# 25 © January 30, 2004 Novell Inc.

Mono • An Open Source. NET Framework Implementation. • • • Effort lead by Mono • An Open Source. NET Framework Implementation. • • • Effort lead by Ximian®, launched in July 2001 ~100 contributors, ~30 very active Status today: • CLI compliant execution system. • Just-in-time compiler on x 86 systems. • Multi-platform (Linux, Solaris, BSD, Windows) • C# compiler. • Class Libraries: • • 26 © January 30, 2004 Novell Inc. Most core functionality done. Various degrees of readiness at higher levels.

Project Background The GNOME project: Bring Open Source to the Desktop. Scope: • • Project Background The GNOME project: Bring Open Source to the Desktop. Scope: • • A desktop for Linux. A development platform • • A suite of productivity applications Started in 1997 Mostly developed in C, Python and Perl. Avoid C++ as much as possible. Unix model vision: CORBA and Bonobo. • Any programming language • Small tools/components 27 © January 30, 2004 Novell Inc.

Evolving GNOME • We ran into various problems: • Old development tools, C-based • Evolving GNOME • We ran into various problems: • Old development tools, C-based • Learning curve too hard for new programmers. • Costly to develop. • Gap between release and support in languages. Language bindings: CORBA/Bonobo: • Lag • Solves between release and deployment • Good for fine control. • Multiple languages supported 28 © January 30, 2004 Novell Inc. release/deployment • Coarse interfaces. • Bonobo was complicated

Example Case • Evolution • Outlook replacement for Linux. • Multi-threaded, multi-process, multi-component. • Example Case • Evolution • Outlook replacement for Linux. • Multi-threaded, multi-process, multi-component. • Most standard compliant mailer/calendar/contact system. • 800 k lines of code. • 2 years, 17 programmers & a lot of money. Slow to develop, debug, improve, innovate. • • The Future: • • 29 © January 30, 2004 Novell Inc. Enable scripting, allow plugins Reduce cost of development

The. NET Framework • What we were looking for • For Gnome, For Ximian The. NET Framework • What we were looking for • For Gnome, For Ximian • Core standardized (VES + C# language) • A virtual execution system (VES) • Multiple language support • Common subset for interop: CTS • • A new programming language: C# • 30 A large class library VES designed to interoperate with legacy code © January 30, 2004 Novell Inc.

Mono Project Scope • A change of direction • • Desktop -> Platform Bring Mono Project Scope • A change of direction • • Desktop -> Platform Bring the. NET Framework to Unix • Allows easy migration of Windows to Unix. • • • Develop with Visual Studio, deploy on Linux. Gives us much needed room to breathe. Goals: • • C# compiler • 31 Virtual Execution System Class Libraries compatible with. NET Framework © January 30, 2004 Novell Inc.

Mono Development Tools: C# Compiler, Debugger, Profiling. . NET Classes: • Core + XML Mono Development Tools: C# Compiler, Debugger, Profiling. . NET Classes: • Core + XML • ADO. NET • ASP. NET Mono Classes: • Gtk#: Gtk, Gnome, A 11 n, Media • PEToolkit Mono Runtime JIT, Loader, Verifier Threads, I/O GC Native Platform (x 86, SPARC, PPC, Strong. ARM, S 390) 32

Lab: Install Mono Runtime There a few ways to install the Mono runtime: • Lab: Install Mono Runtime There a few ways to install the Mono runtime: • Source Install • At minimum you need: • Pkg-config: • • Glib 1. 3: • • • Binary rpm (e. g. mono-0. 28 -1. ximian. 6. 1. i 386. rpm ) • • 33 http: //www. go-mono. org/download. html Then: autogen. sh ; . /configure ; make install RPM (Red Hat Package Manager) Install • • ftp: //ftp. gtk. org/pub/gtk/v 1. 3/glib-1. 3. 12. tar. gz Source Tarball (e. g. mono-0. 28 -1. src. rpm ) • • http: //www. freedesktop. org/software/pkgconfig http: //www. go-mono. org/download. html rmp -ih mono-0. 28 -1. ximian. 6. 1. i 386. rpm Use Red. Carpet © January 30, 2004 Novell Inc.

Use Red. Carpet to Install Mono 1. From the Ximian desktop, select Programs|System Tools|Software Use Red. Carpet to Install Mono 1. From the Ximian desktop, select Programs|System Tools|Software Update 2. Select the “Available Software” tab 3. In the “All Subscribed Channels” list select“mono” 4. Select all the displayed packages by clicking in the “Action” section beside each package. 5. Click the “Run Now” button. 5 a. Click “Continue” when prompted 6. Test mono installation by running mono doc from a terminal window 6 a. export MONO_PATH=/opt/gnome 2/lib 6 b. monodoc 34 © January 30, 2004 Novell Inc.

C#. NET Programming Language Web Definition: An object-oriented and type-safe programming language supported by C#. NET Programming Language Web Definition: An object-oriented and type-safe programming language supported by Microsoft for use with the. NET Framework. C# (pronounced "see-sharp") was created specifically for building enterprise-scale applications using the. NET Framework. It is similar in syntax to both C++ and Java and is considered by Microsoft as the natural evolution of the C and C++ languages. C# was created by Anders Hejlsberg (author of Turbo Pascal and architect of Delphi), Scot Wiltamuth, and Peter Golde. C# is defined by the standard ECMA-334 35 © January 30, 2004 Novell Inc.

C# vs. Java Similarities 1. Single rooted class hierarchy a) C# - System. Object C# vs. Java Similarities 1. Single rooted class hierarchy a) C# - System. Object b) Java – java. lang. Object 2. 3. Managed Execution Environments (CLR, JVM) 4. Heap based classes and Garbage Collection 5. Subarrays of multi-dimensional arrays can vary in size 6. All methods must be a member of a class (unlike C) 7. Interface support 8. Strings are immutable 9. Unextendable classes (sealed, final) 10. Exceptions are thrown and caught 11. 36 Mostly similar keywords Class member initialization © January 30, 2004 Novell Inc.

C# vs. Java Slight Differences 1. 2. Inheritance (: vs. extends and implements) 3. C# vs. Java Slight Differences 1. 2. Inheritance (: vs. extends and implements) 3. C#’s ‘is’ vs. Java’s ‘instanceof’ 4. Namespaces vs. packages (in C# namespace names do not identify directory 5. Constructors, C# destructors vs. Java finalizers 6. Synchronizations of methods and code blocks (a) Synchronized vs. lock (code blocks) (b) Java – public synchronized void our. Method(void) 7. C# - [Method. Impl (Method. Impl. Options. Synchronized)] 8. Public void Our. Method(void) 9. Access Modifiers: private(default) – private, public – public, internal -protected(default), protected – N/A, internal protected – N/A) 10. 37 C# - Main vs. Java - main (C# Main can have void parameter) Const (compile time), readonly(run time) vs. final(both) © January 30, 2004 Novell Inc.

C# vs. Java Slight Differences (cont. ) 1. 2. base vs. super for calling C# vs. Java Slight Differences (cont. ) 1. 2. base vs. super for calling base class constructor 3. C# has static nested class but no inner class equivalent 4. Threads – Exist in both but instantiated and run differently 5. C# has no fall-through in switch statement 6. Assemblies vs. JAR’s 7. Collections (Java is considered to be more sophisticated) 8. Documentation – XML vs. HTML 9. Multiple classes in a single file (multiple public classes) 10. Importing Libraries (import vs. using, -classpath vs. /r) 11. 38 Array declarations (int i. Array[] won’t compile in C#) Cross Language Interoperability (JNI vs. CLS) © January 30, 2004 Novell Inc.

C# vs. Java Unique Things in Either C# or Java C# - System. IDisposable C# vs. Java Unique Things in Either C# or Java C# - System. IDisposable interface C# - Delegates C# - Enumerations C# - Value types (may be stack based in C#) C# - as operator for dynamic casting C# - foreach statement C# - attributes C# - Pass by reference 39 © January 30, 2004 Novell Inc. • Java – Checked exceptions • Java - Cross platform portability (mono dealing with this)

Lab: Become Familiar with C# • • What c# construct would you use to Lab: Become Familiar with C# • • What c# construct would you use to organize c# classes? (hint: similar to Java packages) • When you compile a c# application what does it compile to? • What tool do you use to compile a c# application? • 40 Using monodoc read the sections indicated by the red box ---> What tool do you use to run a c# application? © January 30, 2004 Novell Inc.

Lab: Compile a C# Application Exercise: • • Read the section on “Using the Lab: Compile a C# Application Exercise: • • Read the section on “Using the C# Compiler” and complete the associated exercise. • At the cmd prompt type: monodis hellocs. exe -output=hellocs. il • At the cmd prompt type: vi hellocs. il • 41 Using monodoc navigate to -> What is the hellocs. il file? © January 30, 2004 Novell Inc.

Objective: Compile VBasic Application Exercise: • • Read the section on “Using the VB. Objective: Compile VBasic Application Exercise: • • Read the section on “Using the VB. NET Compiler” and complete the associated exercise. • At the cmd prompt type: monodis hellovb. exe output=hellovb. il • Compare hellovb. il to hellocs. il from the previous exercise. • 42 Using monodoc navigate to -> Are they the same? What are the differences? © January 30, 2004 Novell Inc.

Objective: Compile IL Code Exercise: • Using monodoc read the sections indicated by the Objective: Compile IL Code Exercise: • Using monodoc read the sections indicated by the red box --> • At the cmd prompt type: mono/usr/bin/ilasm. exe --help • Use ilasm. exe to compile hellocs. il & hellovb. il. (hint: ilasm. exe is a. Net application) • 43 What specification enables the support of multiple programming languages within. Net? © January 30, 2004 Novell Inc.

Mono Development Tools: C# Compiler, Debugger, Profiling. . NET Classes: Mono Classes: • Core Mono Development Tools: C# Compiler, Debugger, Profiling. . NET Classes: Mono Classes: • Core • Gtk#: + XML • ADO. NET • ASP. NET Media Gtk, Gnome, A 11 n • PEToolkit Mono Runtime JIT, Loader, Verifier Threads, I/O GC Native Platform (x 86, SPARC, PPC, Strong. ARM, S 390) 44

GUI classes: Gtk# • Gtk# is Ximian's main interest • • It is also GUI classes: Gtk# • Gtk# is Ximian's main interest • • It is also easy, most stuff is already there. • We have plenty of in-house expertise. • Benefits our products directly. • Works on Windows as well. • 45 For Gnome Purposes Mphoto. © January 30, 2004 Novell Inc.

Windows. Forms • Current strategy: • Use Wine. Lib to implement it. • • Windows. Forms • Current strategy: • Use Wine. Lib to implement it. • • • Reduces time of development. Need it to be Wndproc/PInvoke compatible. Implement alternate render engines in Wine: • • • Gtk on X 11 Cocoa on Mac. OS X Reasons: • • Third party developers focused on it. • 46 Major interest in getting it done. Second most requested Mono feature. © January 30, 2004 Novell Inc.

ASP. NET Web. Forms • Component-based Web programming. • Most requested Mono feature. • ASP. NET Web. Forms • Component-based Web programming. • Most requested Mono feature. • • ASP. NET: XSP parser. • • 47 Develop on Windows, deploy on Unix. Finished the Http. Runtime infrastructure recently. Can run as a cgi-bin in most servers. Deep integration with Apache coming soon. Limited to C# for the server-side-scripts © January 30, 2004 Novell Inc.

What is gtk+… “GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering What is gtk+… “GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering a complete set of widgets…” gtk. org 48 © January 30, 2004 Novell Inc.

GTK+ Libraries GTK+ is based on three libraries 1 GLib a. A low-level core GTK+ Libraries GTK+ is based on three libraries 1 GLib a. A low-level core library that provides data structure handling for C, portability wrappers, and interfaces for such runtime activity as an event loop, threads, dynamic loading, etc. 2 Pango a. A library for layout and rendering of text 3 ATK a. A library that provides a set of interfaces for accessibility. It is used by screen readers, and other devices 49 © January 30, 2004 Novell Inc.

GTK+ Uses Widgets… Widget is an X Windows term for any user interface element. GTK+ Uses Widgets… Widget is an X Windows term for any user interface element. • • Windows • Labels • 50 Buttons http: //devolper. gnome. org/doc/API/gtkobj © January 30, 2004 Novell Inc.

GTK+ Basics… • Container Widgets • • A widget that can ‘contain’ one other GTK+ Basics… • Container Widgets • • A widget that can ‘contain’ one other widget. For example a button can contain a label, a window might contain a button Packing Widgets • A widget that can hold more than one other widget. These are not visible so they are normally placed within another container widget that is visible. These widgets come in three varieties: • • • 51 Vertical Packing Boxes Horizontal Packing Boxes Tables (a grid on which to places widgets) © January 30, 2004 Novell Inc.

GTK+ Basics… • Properties • • Each widget may employ a number of properties GTK+ Basics… • Properties • • Each widget may employ a number of properties such as the visible property, the size property, etc. Signals • 52 (cont. ) A signal occurs whenever something interesting (like a user clicking a button) happens to a widget. When the signal occurs a callback method is normally called that performs some programmer defined function. © January 30, 2004 Novell Inc.

Widget Life-Cycle • Creation • • Add widget to a container • • gtk_widget_show( Widget Life-Cycle • Creation • • Add widget to a container • • gtk_widget_show( button) Destroy the widget • 53 gtk_signal_connect( button, “clicked”, Button. Func, NULL ) Show the widget • • gtk_container_add( window, button ) Define a signal for the widget • • gtk_button_new gtk_widget_destroy(button) © January 30, 2004 Novell Inc.

Objective: Become Familiar with GTK# Exercise: • • Complete the gtk# Hello World exercise. Objective: Become Familiar with GTK# Exercise: • • Complete the gtk# Hello World exercise. • What does 'GTK' represent? • 54 Using monodoc read the sections indicated by the red box --> What is the origin of the GTK? © January 30, 2004 Novell Inc.

Objective: Become Familiar with GTK# Samples Exercises: 1 Check out the gtk-sharp source from Objective: Become Familiar with GTK# Samples Exercises: 1 Check out the gtk-sharp source from the mono CVS system. Using 'cd' change to the following directory: '/home//mono/gtk-sharp'. Ensure these directories exist. Type the following at the command prompt: – export CVSROOT=: pserver: anonymous@ anoncvs. go-mono. com: /mono – cvs login – cvs -z 3 co gtk-sharp 55 © January 30, 2004 Novell Inc. 2 Change to the 'gtksharp/sample' directory. Review the *. cs files, change some of the samples then run them using the mono runtime.

Objective: Become Familiar with GNOME# Exercise: • Using monodoc read the sections indicated by Objective: Become Familiar with GNOME# Exercise: • Using monodoc read the sections indicated by the red box --> • Complete the gnome# Hello World exercise. • When would you use gnome# vs gtk#? • Is there any advantage to using one over the other? (hint: read 'Introduction' sections. ) 56 © January 30, 2004 Novell Inc.

Objective: Become Familiar with Glade# Exercise: • Using monodoc read the sections indicated by Objective: Become Familiar with Glade# Exercise: • Using monodoc read the sections indicated by the red box --> • Complete the associated Glade# exercise. • Compile the Glade# sample to include the Glade- xml file as an embedded resource. (hint: read last paragraph in the section) Use the Interface Designer to create your own GUI © January 30, 2004 Novell Inc. application. • 57

Resources • EMCA filing of CLI and C# http: //www. ecma. ch/ecma 1/STAND/ecma-335. htm Resources • EMCA filing of CLI and C# http: //www. ecma. ch/ecma 1/STAND/ecma-335. htm • The Mono Project homepage http: //www. go-mono. com/ • The dot. GNU hompage http: //www. dotgnu. org • Microsoft's. NET Homepage http: //www. microsoft. com/net 58 © January 30, 2004 Novell Inc.

General Disclaimer This document is not to be construed as a promise by any General Disclaimer This document is not to be construed as a promise by any participating company to develop, deliver, or market a product. Novell, Inc. , makes no representations or warranties with respect to the contents of this document, and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose. Further, Novell, Inc. , reserves the right to revise this document and to make changes to its content, at any time, without obligation to notify any person or entity of such revisions or changes. All Novell marks referenced in this presentation are trademarks or registered trademarks of Novell, Inc. in the United States and other countries. All third-party trademarks are the property of their respective owners. No part of this work may be practiced, performed, copied, distributed, revised, modified, translated, abridged, condensed, expanded, collected, or adapted without the prior written consent of Novell, Inc. Any use or exploitation of this work without authorization could subject the perpetrator to criminal and civil liability.