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)