Systemudvikling og systemer

.NET-alternativet Mono

- En omfattende udviklingsplatform baseret på åben kildetekst.

Mono minder meget om Microsofts udviklingsplatform .NET, men adskiller sig på en række vigtige punkter.
Både Mono og .NET implementerer programmeringssproget C# og runtime-miljøet Common Language Infrastructure (CLI). Disse teknologier er fundamentet i begge platforme.
På dette fundament bygger begge platforme en række klasse-biblioteker og værktøjer der langt hen ad vejen er ens.
I det følgende fremhæves de væsentlige forskelle mellem Mono og .NET, der fokuseres bl.a. på licens, åben kildetekst, platforme, arkitekturer, klasse-biblioteker, sprog, værktøjer, baggrund, idé og vision.

Baggrund
For at forstå hvorfor Mono-projektet blev til må vi rejse tilbage i tiden til det herrens år 1997. Det var på denne tid at visionen om et komplet skrivebordsmiljø, der baseret på åben kildetekst kunne bringe Linux og Unix op på siden af Microsoft Windows med hensyn til brugervenlighed, handicapfaciliteter, dokumentation, internationalisering og eye-candy, begyndte at blive realiseret.
Hvis denne vision skulle realiseres, måtte man have minimum et tilsvarende og helst bedre udviklingsmiljø.
Mexicaneren Miguel de Icaza (primates.ximian.com/~miguel) havde sammen med en håndfuld ligesindede tænkt over visionen og siden starten af 90'erne forsøgt at realisere den flere gange. Ingen af deres forsøg fik vind i sejlene før august 1997 hvor det endelig lykkedes. Miguel annoncerede projektet GNU's Network Object Model Environment (GNOME), som siden hen skulle påvirke beslutningen om at starte Mono-projektet.
GNOME har to sider: bruger- og udviklersiden.
Set af brugeren består GNOME af et skrivebord, en skraldespand, en flok ikoner, en markør, paneler, menuer osv. Altså en digital version af et arbejdsrum.
Dog er det ikke brugersiden, som er interessant, men derimod udviklingssiden i GNOME. GNOME-udviklingsplatformen og .NET minder i høj grad om hinanden. Begge er udviklingsplatforme der stræber efter at forøge produktiviteten indenfor udvikling af skrivebordsprogrammel. Begge understøtter brugen af flere programmeringssprog, de er objekt- og komponent-orienterede, de tilbyder omfattende programmeringsbiblioteker og er generelt endnu et lag i programmel-stakken oven på operativsystemet.
Miguel grundlagde sammen med Nat Friedman (www.nat.org) virksomheden Ximian, der skulle understøtte udviklingen af GNOME og tilhørende nøgleprogrammer, fx har Ximian udviklet groupware-programmet Evolution.
Både Microsoft og Ximian forstod, at de måtte effektivisere deres udviklingsplatform, hvis de ville fortsætte med at være konkurrencedygtige. Eksempelvis tog det 3 år at udvikle Evolution 1.0, det blev til ca. 850.000 linjer kode, og da holdet var størst arbejdede 17 mand på projektet. Ressourceforbruget for et projekt som Evolution måtte reduceres væsentligt.
Da Microsoft præsenterede .NET i Orlando, Florida i juli 2000, var det en meget forvirrende oplevelse. Der var ikke rigtigt nogen, der helt vidste, hvad .NET gik ud på. Miguel så dog lyset og forstod at .NET og GNOME på mange områder søgte at løse de samme problemer. Han indså også at .NET teknologimæssigt var bedre integreret end GNOME, og da Microsoft i august 2000 sammen med Hewlet-Packard og Intel bad ECMA om at få CLI og C# standardiseret, frembragte det en idé hos Miguel, om en implementering af .NET i åben kildetekst.
I juli 2001 startede Ximian Mono-projektet, for at reducere deres udviklingsomkostninger og forbedre deres produktivitet.
Ximian bærer i dag navnet Ximian Novell Services (XNS), idet Novell købte Ximian i august 2003.

Visionen for Mono kan opsummeres i følgende 3 punkter:

1. At tilbyde et suverænt udviklingsmiljø til at udvikle Linux-programmer med en hidtil uset produktivitet.
2. At tillade udviklere at skrive og installere rige klienter, web-tjenester og server-side-programmer på Linux, Solaris, Mac OS X, Windows NT/XP og Unix-systemer.
3. At levere værktøjer der understøtter udarbejdelse af API'er og SDK'er som er sprogneutrale på flere operativsystemer.

Licens
Mono er åben kildetekst, helt specifikt er der tre licenser som sætter vilkårene for brugen af Mono.
C# kompileren er dækket af GNU's Not Unix (GNU) General Public License (GPL).
Runtime-biblioteket er dækket af GNU Library GPL.
Klasse-biblioteket er dækket af MIT X11.
Licenserne sikrer at brugerne kan genbruge, lære, kopiere, forbedre, fjerne, distribuere og innovere med Mono.
Disse egenskaber er enormt vigtige, og er grunden til den hurtige vækst, som Mono har oplevet. Væksten er bl.a. drevet af ca. 300 frivillige udviklere som arbejder på Mono. Til sammenligning beskæftiger Novell i dag ca. 20 udviklere fuldtid med Mono.
Et lille eksempel fra Compact Framework (CF) WinCE-programmørernes verden, her bliver XML-biblioteket fra Mono ofte benyttet, fordi det er mere komplet end det der eksisterer i CF. Programmørerne kan gøre dette af den simple grund, at Mono er åben kildetekst.
Flere virksomheder drager fordel af at de kan ændre i kildeteksten fx ved at optimere og rette fejl. En af de større bidragydere er Mainsoft, som i øjeblikket arbejder på at gøre Mono skalérbar.

Platforme og arkitekturer
Fordi Mono er åben kildetekst, kan alle, der ønsker det, forbedre og udvide Mono. Blandt andet pga. denne egenskab er Mono porteret til mange platforme og arkitekturer, se liste 1 og 2.

• Linux
• Mac OS X
• Windows
• *BSD
• HP-UX
• Solaris
Liste 1, Platforme understøttet af Mono.

• IA32
• IA64
• AMD64
• PPC
• HPPA
• IBM S390
• StrongArm
• SPARC
• SPARC v9
Liste 2, Arkitekturer understøttet af Mono.

Mono åbner døren til valg af hardwarearkitektur og operativsystem.

Klassebiblioteker
Hvis man ser bort fra Windows.-Forms, Directory.Services og Enterprise.Services, så indeholder Mono de samme API'er, som man finder i .NET 1.0 og 1.1. Det skal dog bemærkes, at disse mangler er ved at blive implementeret, og fx forventes Windows.Forms at blive inkluderet i næste version af Mono.
Noget af det mest innovative og spændende ved Mono er, at der findes en række nye klassebiblioteker, som ikke er en del af .NET. I dem findes der ny funktionalitet indenfor områderne XML, matematik, kryptering, POSIX og LDAP. En delvis oversigt over de yderligere klassebiblioteker findes i Tabel 1.
Det er rimeligt åbenlyst at der er en forskel mellem .NET og Mono når man ser på de yderligere klassebiblioteker, men når man arbejder med Mono opdager man en række mere subtile afvigelser. Eksempelvis er System.Security.Cryptography 100% managed-kode i Mono mens .NET implementationen er en adapter til Win32-krypterings-API'en.
Der findes desuden en række interessante tredjepartsklassebiblioteker, iblandt dem er Gtk# et af de mest kendte, bl.a. fordi Gtk# bliver udgivet samtidig med Mono.
Gtk# integrerer Mono med Gtk+ (et grafisk værktøjssæt) og GNOME. Hvis du er interesseret i at vide mere om denne integration, foreslår jeg at du læser rapporten »Gnome, et RAD miljø«, mwh.sysrq.dk/documents/documents.phtml.
Mozilla# er også værd at nævne, dette klassebibliotek gør det muligt at integrere webbrowseren Mozilla i ens programmer.
Klassebibliotekerne er delt op i en Microsoft-kompatibel og en Mono-programmelstak.
Se figur 1.

Sprog
Muligheden for at benytte flere programmeringssprog er fuldt ud til stede i Mono. Som standard er C# inkluderet, mens VB.NET og C#-2.0 er inkluderet i smugkigsversionen af Mono.
Hvis man har lyst til at arbejde med andre sprog end C#, skal man ikke lede længe efter dem. Der er udbudt et væld af tredjepartssprog, to populære sprog er IronPython, en implementering af det gammelkendte Python og den nye sproglig hybrid, Nemerle, der både er funktionel, objektorienteret og procedurel. Af andre sprog kan nævnes PHP, MonoLogo, Oberon, Component Pascal, Delta Forth, Tachy og DotLisp.
Endvidere integrerer Mono med Java vha. IKVM, et værktøj der giver mulighed for at Javaprogrammer kan tilgå Monos klassebiblioteker og omvendt.

Værktøjer
Mono Documentation Browser (MonoDoc) og MonoDevelop er to af mine favoritter når det kommer til Mono-specifikke værktøjer.
MonoDoc er en dokumentationsbrowser, som udmærker sig ved at man både kan se, redigere og skrive dokumentation for klassebiblioteker. Endvidere kan man med ved at skrive "providers" udvide MonoDoc således at andre dokumentationsformater kan benyttes. Indbyggede providers inkludere HTML, Unix' manpages og ecmaspec.
Klassebibliotekernes dokumentation er ret omfattende og er derfor ikke integreret med kildeteksten men i stedet lagt i eksterne filer. Dokumentationen overskygger således ikke kildeteksten. Dokumentationen er skrevet på flere sprog og indeholder typisk eksempler på kildetekst.
Se skærmbillede 1.
MonoDevelop er et integreret udviklingsmiljø, som har sine rødder i SharpDevelop, der er skrevet til .NET. I løbet af ca. tre måneder blev SharpDevelop porteret til Mono og Gtk#.
MonoDoc er integreret i MonoDevelop, der har syntaksfremhævning, kildetekst-fuldførelse, Makefile-generering og meget andet godt.
Se skærmbillede 2.

Programmer
Et godt udviklingsmiljø viser sit værd igennem det programmel, der hviler på det. Mange nye innovative og spændende idéer forsøges implementeret ved hjælp af Mono, idet man her har et højniveau-sprog og ikke behøver at programmere en masse kogeplade-kildetekst på lavt niveau. Tomboy er et godt eksempel, her er tale om et program der giver mulighed for at man kan tage noter og organisere dem på en nem og hurtig måde.
Se skærmbillede 3.
I dag har mange en weblog (blog), så man kan følge med i deres liv og hvad de arbejder på. Med Blam er det nemt at håndtere flere blogs og nyhedskilder.

Hvad byder fremtiden på?
Mono 1.0 blev udgivet d. 30 juni 2004 efter ca. tre års arbejde. Det er besluttet, at der skal udgives nye versioner af Mono med en måneds mellemrum. I skrivende stund er Mono 1.0.4 den nyeste version.
Figur 2 beskriver køreplanen for de næste to versioner af Mono.

Hjælp til selvhjælp
Jeg håber at du har fået et indblik forskellene mellem Mono og .NET og ikke mindst at din appetit for at vide mere om Mono er blevet skærpet.
Et godt sted at finde mere information er Monos hjemmeside, www.mono-project.com, desuden vil jeg foreslå at du taler med andre udviklere der benytter Mono og ikke mindst dem, der arbejder på Mono, få en snak med dem på Internet Relay Conference (IRC), irc.gimp.net, #mono.
Når det handler om bøger vil jeg, hvis du allerede kender .NET, anbefale at du læser "Mono - A Developer's Notebook" af Dumbill og Bornstein, som leverer ikke færre end 50 små projekter som fører én igennem Monos verden.
Hvis du endnu ikke har stiftet bekendtskab med Mono eller .NET, så tag et kig på liste 3, hvori finder du nogle gode grundlæggende bøger om .NET, som også er ganske godt dækkende for Mono.

• Essential .NET af Box og Sells
• A Programmer's Introduction to C#
• Essential ASP.NET
• .NET Web Services
• Advanced .NET Remoting
Liste 3, Grundlæggende .NET bøger.