Cross-Platform .NET: Mono and MySQL Joseph Hill Product Manager for Mono, Novell jhill@novell.com Joe Audette Founder, Source Tree Solutions, LLC joe.audette@gmail.com
Multi-platform, Multi-language x86 C# Visual Basic SPARC Boo Java (IKVM) Common Intermediate Language Code Generation: Just-In-Time or Ahead-of-Time StrongARM F# JavaScript Interesting thing about Mono/.NET CIL (Common Intermediate Language): the "Lingua Franca" for computer languages. Allows you to write a front-end compiler (C#, Java, etc.) and instead of generating native machine code, you generate code for the intermediate language. So you always map to a single language, then the single language gets mapped to the target OS. We take the IL and generate code that will run on a number of platforms. So today we have very good coverage of languages that you can use with Mono. C# 2.0 (you can use full generics), VB.NET, Java applications - with IKVM which has been incredibly popluar - and a bunch of other languages. s390 IronPython IronRuby PowerPC
Mono® 1.0 (7/04) .NET 3.0 / .NET 3.5 .NET 2.0 .NET 1.1 Server: ASP.NET WCF WF WPF .NET 2.0 .NET 1.1 Upgrades to stack. Upgrades to stack. Server: ASP.NET Gtk# WinForms C# 2.0 Generics C# 3.0 LINQ
Mono® 1.2 (11/06) .NET 3.0 / .NET 3.5 .NET 2.0 .NET 1.1 Server: WCF WF WPF .NET 2.0 .NET 1.1 Upgrades to stack. Upgrades to stack. Server: ASP.NET Gtk# WinForms C# 2.0 Generics C# 3.0 LINQ
Mono Today: Mono 1.9 – March 2008 ASP.NET 1.1 & 2.0 Web Forms & Web Services Support for ASP.NET AJAX ADO.NET 1.1 & 2.0 SQL Server, Oracle, PostgreSQL MySQL, Sybase, DB2, SQLite, etc Win Forms 1.1 & 2.0 C# 1.0, 2.0, 3.0 LINQ GTK#
Mono® 2.0 (Summer 08) .NET 3.0 / .NET 3.5 .NET 2.0 .NET 1.1 Server: WCF WF WPF .NET 2.0 .NET 1.1 Upgrades to stack. Upgrades to stack. Server: ASP.NET Gtk# WinForms C# 2.0 Generics C# 3.0 LINQ
Mono® 3.0 (Olive) .NET 3.0 / .NET 3.5 .NET 2.0 .NET 1.1 Server: WCF WF WPF .NET 2.0 .NET 1.1 Upgrades to stack. Upgrades to stack. Server: ASP.NET Gtk# WinForms C# 2.0 Generics C# 3.0 LINQ
Mono® Migration Analyzer (MoMA) Inspects CIL byte code Looks for uses, compares with implementation Missing methods “Todo” methods (flagged with an attribute) MoMA is the best place to start; full report of how easy your existing app will be to migrate We started building the left side of the stack, ie, ASP.NET, ADO.NET, Windows.Forms, and that stack is done for 1.1 and 70% done for .NET 2.0. We can run a lot of apps with that. But we didn't really know what people were using, which controls, which bugs actually matter, etc. So, a couple of months ago we built a tool that people could run on windows, and would allow us to figure out what to implement. So we have developed this. Inspects the byte code, looks at methods, and ships with a definition of everything that Mono has. Generates a report and sends it to our website. Developers can use this tool to find out what apps are portable, and which apps are not portable. So, once the data is submitted, let's see what the data looks like. We aggregate all the data that people have sent us. Between Mono 1.2.2 and 1.2.3 we implemented 2000 methods. Regarding apps submitted to us, 16% are VB, 67% are Windows.Forms, 28% are .NET 1.1, and 72% are .NET 2.0. http://www.mono-project.com/Moma
mojoPortal – What Is It? Content Management/Web Site Framework Project began with the idea of supporting MySql and Mono Current Features – Blogs, Forums, Calendars, Maps, Image Gallery, Ecommerce, and more Download it from www.mojoportal.com
mojoPortal Architecture
Cross Platform Development Visual Studio 2005/2008 MonoDevelop
Developing with MonoDevelop Free .NET IDE for Linux and Mac OS X Code completion Refactoring Class management Built-in help VS 2005 project support Gtk# designer support ASP.NET support C#/VB/Boo/C/C++ support Much More
Getting Mono Mono http://www.mono-project.com/Downloads MoMA http://www.mono-project.com/MoMA Moonlight http://www.mono-project.com/Moonlight http://go-mono.com/moonlight Mono projects http://packages.opensuse-community.org/ mojoPortal http://www.mojoportal.com
Virtual Machine: Multilanguage Mono® Stacks ASP.NET ADO.NET Windows.Forms Mono Runtime (Implementation of ECMA #335) MySQL/Postgress Microsoft Compatibility Libraries Mono Libraries Mozilla Apache Mono Novell LDAP Java Compatibility Evolution# Novell iFolder GTK# Gnome# ASP.NET ASP.NET MySQL Gtk#/Gnome D-Bus# Mozilla Bonjour Novell APIs: iFolder, LDAP ADO.NET ADO.NET Apache Mono Identity Desktop: GTK# OpenOffice Sqlite# Cecil Windows.Forms Windows.Forms Java Compatibility Addins Rocks .NET Stack Mono Stack Virtual Machine: Multilanguage Done some very important things GTK# work - provided bindings for building GUI applications at Novell, we try to not write C-Code very much, we try to use managed languages - in the last couple of years we've done Banshee, F-Spot, desktop search Fairly successful in creating an ecosystem of class libraries that would complement Mono IKVM - allows you to run unmodified Java apps on top of Mono. Takes your Java byte code and xlates on the fly and generates code for the CIL. Has exploded into a universe of API and class libraries. Cecil - a library that lets you manipulate executabeles, insect, make mods, insert code, inspect code, etc. (Implementation of ECMA #335)
Platform Support 32 bit: Operating Systems: x86 Linux SPARC Solaris S390, IBM ARM family PowerPC 64 bit: x86-64 s390x, IBM Itanium Operating Systems: Linux Solaris MacOS X Windows Nokia/Maemo Contributed ports: Alpha, MIPS (not finished).