Chi avrebbe mai detto che sarebbe stato possibile programmare sia per windows e linux, utilizzando .NET? Un assaggio di questa possibilità lo avevamo già avuto con Java, e ora arriva Mono che promette integrazione, ma purtroppo non uifficialmente benedetta da mamma Microsoft.
Le prove di questo articolo sono state eseguite con una
Red Hat 9.0.
Passato, presente .... futuro?Tutto nasce da un sogno di tutta la comunità di
Linux, limitare il potere di Microsoft sul mercato, intruducendo un ambiente che permetta l'utilizzo di applicazioni .NET non esclusivamente su Windows. A capo di questo progetto vediamo
Ximian, società che collabora al progetto
Gnome, e recentemente acquisita da
Novell. Molti si chiederanno come è possibile che Microsoft abbia dato il permesso, questo è potuto accadere perchè mesi addietro l'
International Organization for Standardization (ISO), certificando il linguaggio C# e la
Common Language Infrastructure (CLI), ha permesso il rilascio del codice di quest'ultime sotto licenza
Shared Source, questo vuol dire che il codice sarà visibile, ma non potrà essere usato per costruire applicazioni commerciali, questo ha sorpreso la comunità mondiale di
Linux, che si è messa subito al lavoro per il porting su
Linux dell'intera piattaforma.
Attualmente (marzo 2004) la piattaforma è ancora in fase di sviluppo, la maggiorparte delle classi sono state implementate, ma manca ancora tutta la parte dell'integrazione con le cassi Windows.Forms, e il supporto ad ASP.NET non è ancora completo. Tralasciando questo il progetto promette bene e si pensa che a breve sarà possibile rilasciare la versione 1 (attualmente alla version 0.3).
Il futuro? Gli sviluppatori
Mono sono fiduciosi, anche perchè oramai Microsoft ha certificato il tutto, ma comunque resta il fatto che non è ancora stata data una ufficiale benedizione al progetto e quindi il lavoro rischia di diventare un frenetico inseguimento dei rilasci ufficiali.
Download e installazioneSi parte! Ora dobbiamo solo scaricare la piattaforma, e subito dobbiamo fare una scelta: Scaricare il sorgente o i pacchetti? Di sicuro il metodo più veloce per installare
Mono è il download dei pacchetti
rpm, ma quale dei tanti rilasci? Questa è una scelta ardua perchè, il rilascio più consigliato attualemente è la versione 0.28, che supporta anche l'utilizzo di mono-wine che emula le windows.forms, mentre l'ultima versione è stata ottimizzata molto, meno utilizzo di memoria e risorse. Per il seguente articolo è stata scaricata la versione 0.28.
I pacchetti scaricati sono i seguenti:
? mono-0.28-1.ximian.6.1.i386.rpm: Pacchetto base piattaforma
? mono-debuginfo-0.28-1.i386.rpm: Pacchetto risoluzione bug
? mono-wine-20030318-1.ximian.6.4.i386.rpm: Pacchetto suporto grafica
? mono-wine-debuginfo-20030318-1.ximian.6.4.i386.rpm: Pacchetto risoluzione bug
Ora l'installazione è monlto semplice, se utilizzate un ambiente grafico, basta fare un doppio click per ogni pacchetto (verrà richiesta la password di root) e automaticamente verrà installato Mono.
Per chi invece vuole utilizzare la shell dovrà scrivere questo semplice comando per ogni pacchetto:
rpm -ihv mono-[nome_pacchetto]Naturalmente per eseguire il comando dovremo avere i permessi di root, utilizzando il comando
"su".
Per chi invece preferisce la compilazione del codice, deve scaricare i tar e scompattarli
tar -xzvf mono-[nome_pacchetto].tar.gzDopo di che eseguire la classica configurazione e installazione eseguendo questi comandi:
./configure
make
make installOra sia che voi abbiate seguito la strada semplice, o quella meno immediata sarete pronti per creare la vostra prima applicazione Mono.
La mia prima applicazioneCreare una applicazione è molto semplice, dobbiamo aprire il notro editor di testo preferito, in questo caso è stato usato
Kwrite, al quale l'installazione precedente ha aggiunto la possibilità di riconoscere testo C#.
Faremo un semplice programma che ci chiederà il nome e ci saluterà, ecco il codice:
using System;
class esempio
{
static void Main()
{
//chiedo il nome
Console.WriteLine("Come ti chiami ?");
//stampo il nome
Console.WriteLine("Ciao {0}",Console.ReadLine());
}
}
Ora dobbiamo compilare, per far questo dobbiamo aprire la shell e nella stessa directory del nostro file cs, scrivere il seguente comando:
mcs esempio.csSe la compilazione è andata a buon fine dovremmo avere il seguente messaggio
"Compilation succeeded". Ora eseguiamo la nostra mini applicazione, sempre da shell scriviamo:
mono esempio.exee il risultato è il seguente:
Ora non ci resta che verificare che anche su Windows funzioni, ed infatti copiando il file in Windows ed eseguendo il file dal prompt dei comandi otteremo lo stesso risultato:
Windows FormsOra proviamo a costruire un'applicazione che utilizzi le classi
Windows.Forms, e qua si inizia a fare sul serio. Ora bisogna sapere che
Mono non offre pieno supporto per le applicazioni grafiche, principalmente perchè le classi di gestione della grafica sono integrate con windows quindi abbiamo due possibilità: O l'utilizzo delle librerie
http://gtk-sharp.sourceforge.net/ ">#Gtk, oppure
Wine con una modifica per l'integrazione con
http://www.go-mono.com/winforms.html ">Mono.
La strada scelta per questo articolo è stata la seconda (mono-wine), questo perchè offre una maggiore compatibilità tra ambienti, e lo possiamo fare perchè all'inizio abbiamo installato i pacchetti necessari. Questo però non basta, perchè per essere sicuri che tutto funzioni è necessario scaricarsi e installare anche
http://www.winehq.com/site/download ">WineL'installazione è molto semplice, basta scaricare il pacchetto e installarlo, facendo doppio click su file, per chi usa un ambiente grafico, oppure utilizzare il comando rpm per chi è affezionato alla shell.
Ora siamo pronti per creare la nostra applicazione, e possiamo seguire due strade, la prima è creare l'applicativo con il
Visual Studio .NET e poi importarlo su Linux, oppure scrivere direttamente il codice con Linux. La seguente applicazione utilizza un ComboBox, un bottone, un TextBox e una Label, selezionando una voce dal ComboBox comparirà la scelta nel TextBox. Dopo aver scritto il nostro codice dobbiamo compilare, ricordandoci di aggiungere il riferimento agli assembly
System.Windows.Forms e
System.Drawing.dll, con il seguente comando:
mcs Form1.cs /r:System.Windows.Forms.dll /r:System.Drawing.dll Una volta compilato, eseguiamo: SWF=1 Form1.exe
Ecco il risultato in Linux:
ed in Windows:
Come si nota c'è qualche differenza, ma principalmente il risulato è molto simile, comunque il supporto a tutti i controlli delle
WinForms non è completo, per approfondire l'utilizzo di
Mono-Wine potete trovare esempi e informazioni qui :
http://www.nullenvoid.com/mono/wiki/index.php ">Esempi Mono-Wine
ASP.NETOra parliamo dell'integrazione con ASP.NET. Il progetto mono ci offre due possibilità:
XSP web Server o
Apache Mono Module. Il primo è un web server a se stante, il secondo è un modulo che si affianca ad Apache.
In questo esempio è stato usato XSP.
Per installare il web server bisogna scaricare il codice, dopo di che scompattarlo
tar -xzvf xsp-[nome_pacchetto].tar.gzUna volta scompattato usiamo la classica procedura per l'installazione da codice
% ./configure
% make
% make installOra siamo pronti, troveremo una cartella server, e quella sarà la nostra root, e con pochi comandi facciamo partire il nostro server
% cd server
% mono xsp.exee questa è la schermata che vedremo comparire:
Da come si vede il nostro server è attivo sulla porta 8080, ora non dobbiamo far altro che creare una pagina
ASP.NET di test molto semplice, un semplice form che chi chiede il nostro nome ( vario molto vero? :-) )
Ecco il codice della nostra semplice pagina .aspx
<%@ Page Language="C#" %>
<html>
<head>
<script runat="server">
void Button1_OnClick(object Source, EventArgs e)
{
Span1.InnerHtml = "<h3>Ciao " + Name.Text.ToString() + "<h3>";
}
</script>
</head>
<body>
<h3>Come ti chiami?</h3>
<form id="ServerForm" runat="server">
<asp:textbox id="Name" runat="server"/>
<button id=Button1 runat="server" OnServerClick="Button1_OnClick">
Button1
</button>
<br>
<span id=Span1 runat="server" />
</form>
</body>
</html>
Ora non dobbiamo far altro che aprire il nostro browser preferito e andare all'indirizzo:
http://localhost:8080/PaginaTest.aspx, ed ecco il risultato:
ConclusioniSpero di aver stimolato la curiosità di molti su
Linux e sul mondo
Open Source. Il progetto mono ha un futuro? Bè è presto per dirlo, anche perchè è ancora un progetto nello stadio embrionale, di sicuro ci sarà molto da lavorare sulla compatibilità tra sistemi. Intanto aspettiamo trepidanti la versione 1.0.