Mono i .NET

Microsoft je 2002. predstavio .NET framework, novi sustav za razvoj programa neovisnih o platformi. Njegova je namjena pojednostavljenje razvoja mrežnih i Internet aplikacija. Prakticki sav noviji Microsoftov softver dolazi pisan u toj tehnologiji. Podržava objektno orijentirano programiranje i dolazi s bibliotekom klasa pogodnom za programske jezike poput novog C# jezika i Visual Basic .NET-a. Takoder sadrži prevoditelj (compiler) koji izvorni kod prevodi u bytecode, binarni format neovisan o platformi. Nudi velik broj vec gotovih dijelova za tipicne zahtjeve programera, poput iscrtavanja grafickog sucelja, pristupa datotekama i podacima, kodiranja i zaštite, razvoja aplikacija za web, algoritama i mrežne komunikacije.
Programi u .NET-u pokrecu se u softverskoj okolini, tzv. Common Language Runtime (CLR), po funkcionalnosti usporedivoj s Javinom JVM (Java Virtual Machine) koja sakriva specificnosti hardvera i pruža identicnu okolinu za sve programe. Usput dodaje i sigurnosne opcije, upravljanje memorijom i obradu grešaka. Framework garantira sve te opcije, bez obzira na programski jezik koji se koristi. Poneki programi zbog CLR-a imaju sporije performanse od ekvivalenta u starijim programskim jezicima.
CLR i biblioteke rutina zajedno cine .NET framework. On se najviše usporeduje s Javom, ali kljucna je razlika da Java sustav omogucuje pokretanje programa pisanih samo u Java jeziku, dok je .NET CLR zamišljen za pokretanje brojnih programskih jezika. Jednako dobro podržava proceduralne (C, Pascal) kao i objektne, a dozvoljava i razmjenu podataka i poruka o greškama (exceptions) izmedu njih, pa cak i medusobno nasljedivanje objekata.

Standardizacija

Microsoft, HP i Intel standardizirali su CLR i C# programski jezik i 2001. dobili ECMA standard, a u 2003 ISO certifikat. Svi patenti nad implementacijom zbog pravila ECMA-e i ISO-a moraju biti razumni i otvoreni. Doduše, neki dijelovi frameworka nisu pokriveni standardom, pa tako patenti i dalje vrijede. To su Windows.Forms, ADO.NET i ASP.NET. Slabije je poznato da Microsoft cak i ima verziju .NET platforme za Linux, BSD sustave i Mac OS X, zvanu Shared Source Common Language Infrastructure (SSCLI). Njena licenca ne dozvoljava komercijalnu upotrebu programa u .NET-u vec samo za osobnu i akademsku upotrebu.

Mono - zamjena za .NET

Svi ovi razlozi licenciranja potaknuli su zajednicu da na temelju otvorenih specifikacija pocne pisati svoju implementaciju .NET frameworka. Tako je prije cetiri godine nastao Mono, open source projekt koji je uspio u nekoj mjeri zamijeniti .NET, odnosno Linuxu donijeti novu razvojnu okolinu i nacin bržeg razvoja aplikacija. Pokretac projekta Miguel de Icaza, a i trenutni sponzor Novell, prvenstveno su htjeli olakšati život programerima i dobiti bolje alate za razvoj.
Mono sadrži virtualno racunalo CLR koje se može pokrenuti na Linuxu, BSD sustavima (i Mac OS X) i Windowsima, prevoditelje za C# i Basic i vec gotov izvjestan broj biblioteka klasa, odnosno gotovih funkcija. Iako se vec dosta dugo razvija, sve opcije nisu do kraja završene, pogotovo Windows.Forms za iscrtavanje Windows grafickog sucelja. Kao zamjena ili nadopuna tome, razvijeno je sucelje za GTK, tako da se aplikacije pisane za Linux mogu pokrenuti i pod Windowsima, ako je instaliran GTK graficki toolkit. Gtk#, odnosno jezik za razvoj baziran na GTK-u i Gnome bibliotekama jedna je od znacajnijih prednosti Monoa. Objektna orijentiranost jezika, slicnost s C#-om olakšavaju programiranje pa se tako GTK# cini vrlo ozbiljnom GUI platformom.
Od ostalih komponenti .NET-a koje nisu mogle biti implementirane slijedeci standarde, spominjemo ADO.NET i ASP.NET. Prvi sadrži klase za pristup bazama podataka, odnosno model pristupa bilo kakvoj vrsti podataka iz bilo kojeg izvora. ASP.NET web podrška podijeljena je na dva dijela: web forme i web servisi. Forme izgraduju korisnicko sucelje za web aplikacije. To olakšava izradu sucelja (u nekom alatu za crtanje i izradu sucelja, primjerice Glade za Gnome) i odvaja prezentaciju od samog kôda. Web servisi nude SOAP (Simple Object Access Protocol) bazirano udaljeno pozivanje klasa i procedura. Tako više servisa može dijeliti podatke i logiku rada preko mreže pa cak i kroz firewallove (protokoli poput HTTP-a i XML-a). ASP.NET kod je preveden i kao takav postavljen na server, za razliku od interpretiranih jezika poput PHP-a i starog ASP-a. Razlike u brzini su velike.
Od ostalih zanimljivih dijelova Monoa, nalazimo Gst# za Gstreamer multimediju, OpenGL#, MonoGLo i CsGL za OpenGL programiranje 2D i 3D grafike te SDL.NET za programiranje igara. Cak i kad ne bi postojalo .NET kompatibilnosti, sa svim ovim dodacima još bi uvijek imali kvalitetnu platformu za programiranje. To je posebno znacajno znajuci koliko pod Linuxom ima nacina programiranja grafickog sucelja (GUI widgets) - uz GTK tu su Qt, Motif i drugi. Njihovo pozivanje iz raznih programskih jezika dodatni je problem. Zato je ujednaceno programiranje sucelja koje na isti nacin radi iz raznih programskih jezika dodatna je prednost Monoa. Osim toga, brojni Windows programeri zaticu poznatu okolinu pa je prijelaz na programiranje za Linux puno lakši.

Razvoj Mono programa

Besplatne i slobodne programske jezike obicno progoni nedostatak kvalitetne razvojne okoline. Dok Microsoft ima Visual Studio .NET, njegova alternativa je Sharpdevelop pod Windowsima, odnosno Monodevelop okolina na Linuxu. Njima nedostaje debugger, tj. alat za lakše otklanjanje bugova. Zanimljivo je da mogu uvoziti gotove Visual Studio projekte, pa ako oni ne koriste neke složenije funkcije Windows.Formsa, mogu se odmah prevesti i pokrenuti. Primjer najosnovnijeg programa u Monou mogao bi izgledati nekako ovako: using System; class first { public static void Main (string[] args) {Console.WriteLine ("Hello, World!"); } } Program se prevodi naredbom "mcs program.cs". Dobit ce se izvršna verzija koja ima tipican Windows nastavak EXE.. Na kraju, taj se program pokrece s "mono program.exe". Taj se program zatim može prenijeti na Windowse i pokrenuti (i obrnuto). Do grafickog sucelja tek je par dodatnih naredbi u kodu. Zanimljivost je da i biblioteke nastale na Linuxu imaju DLL nastavak datoteke.

Brojni gotovi programi

Najbolji dokaz prihvacenosti Monoa su programi nastali koristeci ga. Otkad ga je Novell preuzeo napravio je iFolder, ZenWorks, F-Spot, Stetic i još nekoliko, a i ostali su visoko rangirani na gnomefiles.org. Najrazvikaniji od njih, koji smo i mi svojedobno opisivali, je Beagle, program za indeksiranje datoteka u lokalnim direktorijima i njihovo pretraživanje po imenu i sadržaju. Ovaj program odlikovao je brz razvoj, u tek nekoliko mjeseci od pocetka razvoja uspio je doci do dovoljno funkcionalne, iako ponešto bugovite verzije, s dotjeranim grafickim suceljem (upravo odlika brzog razvoja zbog Monoa i GTK#). Trenutno je najbolje integriran u Novellovom Suse Desktopu 10 (SLED10). Može pretraživati dokumente raznih Office programa, e-mailove, privremeni spremnik browsera, Instant Messenger komunikaciju, metapodatke multimedije i slika (ID3, EXIF itd.), imena datoteka, arhive (i njihov sadržaj), RSS, zabilješke (Tomboy, KNotes) i slicno. Beagle je jedan od alata na koje je Novell racunao kod izgradnje SLED-a kao produktivne distribucije za desktop korisnika.
U istu je svrhu popularan i Tomboy za izradu zabilješki na desktopu, odnosno zapisivanje ideja i informacija bilo koje vrste. Iako ovakvih programa ima dosta i svi su u osnovi vrlo jednostavni, Novellova podrška i integracija u distribucije doprinijeli su njegovoj raširenosti. Osim što i sam ima pretraživanje, dobro se integrira u Beagle i Evolution kao i sistemski tray kako bi bio dostupniji.
Još jedan program koji dobiva dosta pažnje korisnika je F-Spot, program za upravljanje slikama. Nije potpuno dovršen, no stabilan je i dosta brz. Ono što mu nedostaje su naprednije mogucnosti obrade fotografija koje primjerice imaju slicni programi: digiKam i gThumb. Korisnici se takoder žale na njegovu neintuitivnost kod dodavanja slika u albume i njihovog oznacavanja, tj. dodjeljivanja tagova. Takoder je izgraden na GTK# okvirima i sucelje je od prvih verzija bilo sredeno.

Mono i stereo multimedija

Banshee je još jedan program koji ima velik potencijal. Služi za stvaranje kolekcije glazbe iz audio CD-a, njihovu organizaciju, izvodenje, dijeljenje i razmjenu s mobilnim glazbenim uredajima. Podržava i pametne playliste, podcastove, glazbene preporuke (temeljene na dosadašnjem izboru glazbe) itd. Posebno se preporucuje za korištenje s iPodom. Ne daje dojam nedovršenosti, no još se ne može usporedivati s npr. Amarokom po mogucnostima. Zanimljiv projekt ciji bi razvoj trebalo pratiti je Diva, softver za video editiranje, odnosno uvoz, uredivanje, poboljšavanje i izvoz video materijala u razne formate.
Programeri Monoa svakako su u prednosti jer su kvalitetne aplikacije za razvoj programa bile medu prvima dostupne i tako omogucile brži razvoj. Monodevelop kao kvalitetnu razvojnu okolinu smo vec spomenuli, a tu su i Glade za izgradnju GTK grafickih sucelja, Nant, novi alat za izgradnju izvršnih programa (funkcionalnost naredbe make), MonoUML, alat za brz dizajn softverskog sustava UML-om, Object Browser za provjeru objekata u nekom projektu. Spomenimo i IronPython, implementaciju Python skriptnog jezika za .NET.
I administratori imaju nekoliko programa koji im mogu pomoci. To su LDAP browser, OpenVPN Admin, vmx-manager za upravljanje virtualizacijom i Sussen za sigurnosni nadzor.
Nedavna suradnja Novella i Microsofta zabrinula je zajednicu buduci da bi Microsoft na neki nacin mogao utjecati na razvoj Monoa ili zaprijetiti patentnim tužbama. Zasad se to nije dogodilo, a Novellovci nas uvjeravaju kako ce Mono, u slucaju da se netko pozove na svoj patent, pokušati poništiti njegovu vjerodostojnost ili naci alternativnu implementaciju neke funkcije. Takoder, nije se usporio ni razvoj aplikacija tako da možemo ocekivati još dosta programa temeljenih na Monou.

Ivan Capan, ožujak 2007.