Implementasi .NET dengan Mono

Implementasi .NET dengan Mono


Penulis masih ingat ketika membaca tulisan yang membandingkan aplikasi di Windows dan di Linux. Misalnya Photoshop di Windows dibandingkan dengan Gimp di Linux sebagai editor gambar. Yang menarik adalah artikel itu membandingkan .NET di Windows dengan J2EE di Linux sebagai framework pengembangan teknologi informasi atau piranti lunak. Tapi hal yang lebih menarik adalah .NET sekarang “sudah” tersedia di Linux.

.NET adalah produk yang diciptakan oleh Microsoft sebagai respon terhadap kesuksesan Java. .NET adalah suatu framework atau platform untuk piranti lunak. Anda bisa bilang .NET sebagai saingan Java. .NET sendiri bukanlah jiplakan dari Java tapi desain ulang kembali dari Java dengan ditambahi berbagai fitur menarik.

Anda cuma bisa memakai bahasa pemrograman Java untuk platform Java tapi di platform .NET Anda bisa memakai berbagai bahasa pemrograman sepanjang bahasa pemrograman itu memiliki properti .NET. Yah, salah satu fitur menarik dari .NET adalah ketidaktergantungan dari suatu bahasa tertentu. Itulah sebabnya di dunia Windows, Anda sering mendengar VB.NET, C++.NET, Cobol.NET, ASP.NET, dan C#.NET. Anda bisa mencampur berbagai bahasa itu dengan mudah. Untuk perbandingannya, salah satu alasan pustaka GTK+ ditulis dengan bahasa C adalah supaya bisa diakses oleh berbagai bahasa. Misalnya Anda ingin menggunakan pustaka GTK+ untuk membuat aplikasi tapi Anda ingin menggunakan bahasa python bukan bahasa C. Hal ini dimungkinkan dengan binding. Anda mengakses pustaka Gtk+ yang ditulis dengan bahasa C itu dengan binding. Tapi Anda tidak bisa mengakses pustaka python dari bahasa C. Di .NET hal ini dimungkinkan. Luar biasa!

.NET mempunyai pustaka yang sangat besar untuk hampir setiap keperluan. Beberapa di antaranya adalah dukungan XML, database, dan web. Sementara itu dengan .NET Anda bisa membuat aplikasi web dengan mudah lewat ASP.NET. Dengan ASP.NET membuat aplikasi web berskala besar menjadi jauh lebih mudah. Yang enaknya ASP.NET memberi Anda pilihan berbagai bahasa seperti C#, atau C++ dalam mengerjakan aplikasi web.

Walaupun .NET dibuat oleh Microsoft tapi framework itu sendiri standar dan begitu juga dengan berbagai hal lainnya seperti spesifikasi C#. Standardisasi itu sendiri disubmit ke ECMA, yaitu suatu organisasi yang mengurus standardisasi atas bidang teknologi informasi dan komunikasi. Ini artinya setiap pihak bisa mengambil keuntungan dari framework ini secara bebas.

Novell dan kelompok open source menjawab tuntutan untuk menghadirkan framework yang luar biasa ini di platform Unix di mana kemudian platform Windows dan MacOSX pun didukung. Dengan dimotori oleh Miguel de Icaza (salah satu pendiri projek Gnome), projek Mono dikembangkan. Secara singkatnya Mono adalah implementasi bebas dari platform .NET. Ada berbagai teknologi menarik dari Mono, seperti compiler untuk bahasa pemrograman yang baru, yaitu C#, compiler Basic, compiler LOGO, mesin virtual bagi kode-kode binari CIL (Common Intermediate Language) yang mirip dengan Java Virtual Machine, berbagai pustaka untuk memanipulasi XML, pengaturan database, pembuatan aplikasi GUI, sampai konstruksi web.

Anda boleh menulis aplikasi open source maupun closed source dengan teknologi ini. Compiler C# dilensikan ke dalam GNU GPL sedangkan runtime library-nya dilensikan dengan GNU Library GPL dan pustaka kelas-kelasnya dilensikan dengan salah satu lisensi open source, yaitu lisensi MIT X11.

Terus mungkin ada yang khawatir karena bagaimanapun ini adalah teknologi yang berhubungan dengan Microsoft. Mungkin suatu hari Microsoft akan menuntut orang-orang yang yang menggunakan platform .NET di Linux seperti kasus SCO menuntut IBM. Sebagai latar belakang informasi, teknologi .NET terbagi dua: teknologi .NET yang disubmit ke ECMA dan teknologi yang dibangun di atasnya seperti Windows.Forms, ADO.NET, ASP.NET. Mono mengimplementasikan kedua-duanya dan juga melebihi dari itu, yaitu dengan mengembangkan dan mengintegrasikan pustaka pihak ketiga seperti API untuk debugging, Mozilla, OpenGL, dukungan atas database yang luas, integrasi dengan pustaka POSIX. Teknologi .NET yang disubmit ke ECMA adalah standar. Artinya semua pihak boleh mengimplementasikan komponen-komponen itu secara bebas untuk kepentingan apa pun. Teknologi .NET yang kontroversial adalah seperti Windows.Forms, ADO.NET, ASP.NET. Teknologi ini diperlukan bagi orang yang memerlukan kompatibilitas penuh dengan platform Windows, tapi tidak diperlukan bagi platform open source seperti Linux atau *BSD yang kaya akan pustaka-pustaka. Jadi seharusnya Anda tidak perlu khawatir untuk mengembangkan karya dengan Mono. Lagipula ada perusahaan besar yang menjadi sponsor utama dari projek ini, yaitu Novell. Kita tahu sendiri Novell adalah perusahaan yang memiliki reputasi bagus. Jangan lupa juga, masalah paten ini tidak berlaku di negara di mana paten piranti lunak (software patents) dilarang. Kabar baiknya, sampai artikel ini ditulis, software patents tidak atau belum diberlakukan di Indonesia.

Walaupun Anda bisa mencampur berbagai bahasa dalam platform .NET ini tapi .NET ini sendiri memperkenalkan bahasa baru, yaitu C# yang dikembangkan oleh Anders Hejlsberg (pengembang inti Borland Delphi sebelum ditarik oleh Microsoft) bersama timnya. C# memiliki sintaks yang elegan, bersih dan indah. Bagi Anda yang memiliki pengalaman di bidang bahasa pemrograman bahasa berorientasi objek seperti Java dan C++, Anda tidak akan mengalami kesulitan untuk mempelajari bahasa ini. C# itu seperti anak yang dilahirkan dari perkawinan C++ yang “perkasa” dan Java yang “anggun” di mana gen C++ lebih dominan. Jadi sekarang dengan Mono, Anda bisa membuat aplikasi dengan bahasa C# di platform Linux.

C# tidak di-compile ke bahasa mesin tapi ke kode-kode binari bagi mesin CIL yang kemudian dengan bantuan pustaka-pustaka class utamanya mengeksekusi program ini. Mirip dengan Java VM. Apa artinya ini? Artinya program yang dikembangkan di platform Windows bisa dieksekusi dengan baik oleh Mono tanpa kompilasi ulang sepanjang program itu tidak memiliki kode khusus Win32 seperti fungsi yang mengakses registry atau fungsi spesifik Windows seperti fungsi spawnv(...).

Ok, kita akan mencoba pemrograman C# di Linux. Umumnya Anda hanya membutuhkan satu paket saja agar bisa melakukan pemrograman di framework .NET, yaitu mono-0.95.tar.gz. Paket ini berisi source code dari Mono runtime dan demi kemudahan pengguna, maka developer Mono memutuskan untuk memasukkan juga compiler C#, compiler VB, dan tentu saja pustaka class-nya yang sudah di-compile. Jadi ketika Anda melakukan make install untuk paket mono-0.95.tar.gz, maka Anda siap bekerja dengan framework .NET ini. Source code dari compiler C#, compiler VB, dan pustaka class-nya ada di paket mcs-0.95.tar.gz. Anda tidak akan membutuhkan paket ini kecuali Anda adalah seorang hacker mono. Sampai artikel ini ditulis, Mono sudah mencapai versi 1 Beta 2 atau 0.95. Tapi karena projek Mono ini begitu aktif, adalah mungkin jika pada saat pembaca membaca artikel ini Mono sudah mencapai rilis stabil atau lebih baru dari ini. Instalasikan paket mono-0.95.tar.gz seperti berikut:

$ tar -zxvf mono-0.95.tar.gz

$ cd mono-0.95

$ ./configure --prefix=/usr

$ make

$ su

# make install

Untuk kedua paket ini Anda bisa menggunakan prefix default yaitu /usr/local tapi Anda bisa menggantikannya ke /usr yang cukup umum digunakan oleh orang. Dalam hal ini penulis merasa lebih nyaman dengan prefix /usr.

Dengan asumsi Anda berhasil menginstalasinya, sekarang kita akan mencoba program sederhana. Gunakanlah text editor kesayangan Anda.

Program yang dihasilkan memiliki ekstensi exe karena untuk menjaga kompatibilitas dengan file yang dihasilkan di platform Windows.


//Fitur.cs

using System;


class Fitur {


private string String;

private int Mono = 0;


public int FiturProperty {

get {

Console.WriteLine( "Ini fitur baru C#. " );

return Mono;

}

set {

Mono = value;

}

}


public static void Main() {


string Majalah = "InfoLinux";

int Jumlah = 4;


Console.WriteLine( "Saya memmpunyai majalah {0} sebanyak {1}. ", Majalah, Jumlah );


double[] angka = { 1.2, 2.3, 3.4 };


foreach( double temp in angka )

{

Console.WriteLine( "{0}", temp );

}


Fitur penguin = new Fitur();

penguin.FiturProperty = 7;

Console.WriteLine( "{0}", penguin.FiturProperty );


}


}


Simpanlah kode itu dengan nama Fitur.cs. Lalu gunakan konsol dan pergilah ke direktori tempat file itu berada.


$ mcs Fitur.cs

Compilation successful

$ mono Fitur.exe

Saya memmpunyai majalah InfoLinux sebanyak 4.

1.2

2.3

3.4

Ini fitur baru C#.

7


Kita akan membahas beberapa fitur unik dari C#.


using System;


Ini berarti kita menggunakan namespace System sehingga kita bisa menuliskan Console.WriteLine langsung. Jika tidak kita harus menuliskan System.Console.WriteLine.


get {

.....

}

set {

.....

}


Di C++ biasanya kita menggunakan metoda tradisional untuk mengambil data dengan fungsi dari class seperti int getX() dan untuk mengeset nilai data dengan fungsi dari class seperti void setX(...). Di C#, Anda tinggal menggunakan fitur properti yang menyederhanakan kode. Implementasinya bisa dilihat di kode program di atas.


foreach( double temp in angka )


Ini mirip perulangan for biasa. Arti dari pernyataan ini adalah perulangan atas array angka dari index terkecil sampai ke index terbesar dan dalam setiap pengulangan itu nilai array angka dengan index yang bersangkutan disalin ke variabel temp.


Sedangkan hal lainnya cukup jelas dari kode program di atas.


Ok.... nah kejutannya adalah mono datang dengan compiler Basic.NET juga. Mari kita mencicipi program Basic.NET di Linux. Buka lagi text editor kesayangan Anda.


//InfoLinux.vb

Imports System


Module InfoLinux

Sub Main()


Console.WriteLine( "Contoh sederhana program vb di Linux" )


Dim nama as String

Dim jumlah as Integer


Console.Write( "Siapa nama Anda? " )

nama = Console.ReadLine()

jumlah = 4

Console.WriteLine( nama + " mempunyai majalah InfoLinux sebanyak " + jumlah + ". " )


End Sub


End Module


Simpanlah kode program ini dengan nama InfoLinux.vb. Kita akan meng-compile kode program ini menjadi kode binari CIL.


$ mbas InfoLinux.vb

Compilation successful

$ mono InfoLinux.exe

Contoh sederhana program vb di Linux

Siapa nama Anda? Slacker

Slacker mempunyai majalah InfoLinux sebanyak 4.


Merupakan hal yang menarik jika kita bisa bermain-main dengan C# dan Basic di Linux dengan Mono. Tapi bagaimanapun program-program yang dihasilkan itu adalah program konsol. Bagaimana dengan GUI? Tentu kita bisa membuat aplikasi GUI dengan C# atau Basic. Tapi untuk pembahasan kali ini kita akan menggunakan bahasa C# karena bahasa ini dibuat khusus untuk platform .NET.

Jika Anda melakukan pemrograman GUI dengan C# di platform Windows, maka Anda umumnya memakai System.Windows.Forms sebagai toolkit-nya. Untuk alasan kompatibilitas maka Mono juga menyertakan System.Windows.Forms sebagai toolkit-nya, dan di platform Windows toolkit ini bekerja secara sempurna seperti yang diharapkan tapi di platform Unix dan MacOSX, keadaan menjadi lebih sulit. Implementasi untuk toolkit ini menggunakan pustaka winelib. Akibatnya aplikasi yang dibuat dengan toolkit ini kelihatan jelek di platform Linux dan MacOSX karena menggunakan emulasi. Bahkan untuk sekarang ini, tidak semua fungsi API dari toolkit ini didukung di platform Linux dan MacOSX karena projek Mono sendiri belum selesai 100%. Jadi jangan menggunakan toolkit ini kecuali Anda cuma mau membuat aplikasi di platform Windows saja. Sekali lagi toolkit ini didukung karena untuk mempermudah transisi aplikasi yang dibuat dengan framework .NET di Windows ke platform Linux. Anda memerlukan paket winelib-0.3.tar.gz untuk melakukan pemrograman GUI dengan Windows.Forms.

Alternatif yang lainnya adalah GTK#. Binding ini masih belum matang dan berada dalam pengerjaan yang aktif. GTK# mewarisi API yang stabil dari GTK+ dan mempunyai basis komunitas yang besar. Kita juga bisa membuat GUI dari program secara cepat dengan Glade. Keunggulan lainnya dari toolkit ini yang lainnya adalah mendukung internasionalisasi, kontrol atas HTML (rendering dan pengeditan). Tentu saja program ini terintegrasi dengan manis ke dalam desktop Gnome. Walaupun begitu aplikasi yang dibuat dengan GTK# bisa dijalankan di platform mana saja seperti Windows, Unix, atau MacOSX karena GTK+ itu sendiri multiplatform. Anda memerlukan paket gtk-sharp-0.93.tar.gz untuk melakukan pemrograman GUI dengan toolkit ini.

Mungkin Anda bertanya bagaimana dengan penggemar KDE? Jawabannya adalah Qt#. Toolkit yang dikembangkan oleh Adam Treat ini mewarisi keunggulan dari toolkit yang sudah sangat terbukti kehandalannya, yaitu Qt. Aplikasi yang dibuat dengan Qt# ini multiplatform dan di setiap platform penampilannya seperti aplikasi asli pada platform yang bersangkutan atau istilahnya native look. Anda memerlukan paket qtsharp-0.7.tar.gz untuk melakukan pemrograman dengan toolkit ini. Selain itu, masih ada toolkit wx.NET dan Sharp WT.

Pengembangan piranti lunak identik dengan IDE. IDE yang khusus untuk keperluan Mono ini diberi nama MonoDevelop. Projek ini masih berada dalam versi awal dan seperti Mono, pengembangan projek Monodevelop sangat aktif. Tapi Anda juga bisa memakai IDE yang sudah matang seperti SharpDevelop (hanya di platform Windows) atau Eclipse dengan plugin C#-nya.

Masih banyak lagi teknologi lainnya yang belum sempat dibahas pada artikel ini tentang .NET di Linux seperti ASP.NET, ADO.NET, Gecko# dan lain-lainnya. Anda juga bisa meng-compile Java ke kode binari CIL. Jadi Anda bisa menjalankan program Java dengan Mono. Walaupun begitu tidaklah bijaksana untuk menggunakan Mono dalam sistem produktif karena Mono ini sendiri masih dalam pengerjaan yang aktif. Istilahnya, “Under heavy development”. Tapi banyak orang yang menaruh harapan pada Mono. Mono adalah projek yang memiliki masa depan yang cerah karena didukung oleh banyak developer open source, perusahaan besar seperti Novell dan tentu saja sebagian besar komunitas open source. Sangat menarik untuk melihat sepak terjang dari projek yang mencoba untuk menghadirkan framework .NET di Linux ini.

Mono bukanlah satu-satunya implementasi bebas dari platform .NET di Linux. Alternatif yang lain adalah proyek DotGNU. Sama seperti proyek Mono, DotGNU juga menghadirkan perlengkapan untuk mengembangkan dan menjalankan aplikasi Common Language Infrastructure (CIL). Target awalnya adalah platform Linux, kemudian platform lainnya seperti Windows, *BSD, Solaris, dan MacOS X.

Perbedaan proyek DotGNU dengan Mono tetap ada. Pertama, proyek DotGNU itu murni komunitas yang terlihat jelas dari namanya. Mono sendiri dikembangkan oleh perusahaan Ximian yang merupakan bagian dari perusahaan Novell tapi tetap membuka kesempatan bagi siapa saja untuk bergabung mengembangkan proyek Mono. Secara kasarnya, DotGNU itu seperti distro Slackware yang murni komunitas walaupun tidak menutup kemungkinan bagi orang untuk menggunakannya secara komersial. Mono itu seperti distro Mandrake di mana ada upaya komersial untuk menjual distro itu dan memberikan pelayanan pelanggan tapi tetap saja orang bisa menggunakan distro Mandrake itu secara bebas dan gratis.

Untuk GUI, tidak seperti Mono yang menggunakan GTK+ binding sebagai fokus utamanya, DotGNU menggunakan toolkit System.Windows.Forms. Mono menggunakan pustaka winelib sebagai implementasi dari toolkit System.Windows.Forms, sedangkan DotGNU menggunakan pendekatan Java Swing. DotGNU tidak menggunakan pustaka pihak ketiga, seperti GTK+, Qt, atau pun Wine sebagai implementasi dari toolkit System.Windows.Forms. Artinya DotGNU “menggambar” sendiri penampilan aplikasi yang dibuat dari toolkit System.Windows.Forms pada setiap platform. Tentu masih ada beberapa bagian dari toolkit System.Windows.Forms yang tidak bisa “digambar” sendiri dan mesti menggunakan pendekatan Wine.

Mungkin motivasi adalah perbedaan yang paling menarik dari Mono dan DotGNU. Motivasi utama dari proyek Mono yang terlihat jelas dari website dan milisnya adalah ingin menghadirkan alat pengembangan yang diharapkan bisa mendongkrak produktivitas para developer di platform Free Software seperti Linux. Motivasi utama dari proyek DotGNU sendiri adalah menghindari monopoli .NET-nya Microsoft. Malah DotGNU sudah membuat pernyataan khusus tentang bahaya .NET Microsoft bagi Free Software di websitenya. Jadi Mono atau DotGNU? Kebebasan ada di tangan Anda.


Akbar (tuxer@softhome.net)





Artikel ini datang dari InfoLINUX
http://www.infolinux.web.id/site

URL cerita ini adalah:
http://www.infolinux.web.id/site/sections.php?artid=117