domenica 14 febbraio 2010

Ambiente di sviluppo virtualizzato in singola workstation

A lavoro e a casa ho a disposizione solo una macchina di lavoro e in genere ho la necessità di utilizzare versioni differenti degli ambienti e degli strumenti di sviluppo. Per esempio, per generare immagini di Windows CE 6.0, uno ha bisogno di Visual Studio 2005, Windows CE 6.0 Platform Builder, i vari service pack, gli aggiornamenti di compatibilità con Windows Vista/Windows 7 (se non viene più usato Windows XP), aggiornamenti mensili di Windows CE. Se uno ha a disposizione una macchina pulita, con solo i software elencati precedentemente, non ci dovrebbero essere problemi. Tutto dovrebbe funzionare bene, il debug remoto sui dispositivi funziona, la generazione delle immagini si dovrebbe completare con successo (a parte i normali errori di generazione e configurazioni errate, ma che in alcun modo dipendono dalla configurazione del sistema e dai software installati).

Ma cosa succede se si avesse la necessità di sviluppare anche applicazioni .NET Compact Framework 3.5 per Windows Phones? Sulla macchina di sviluppo bisogna installare Visual Studio 2008 e i vari SDK e strumenti per Windows Mobile. Naturalmente si vorrebbe anche che tutto il software precedentemente installato continuasse a funzionare come prima: questo è il problema. Raggiungere questo obiettivo non è una cosa facile. Visual Studio 2008 aggiorna infatti alcuni componenti di sistema che vengono usati da Visual Studio 2005 e da Platform Builder per lo sviluppo con Windows CE, e questo potrebbe causare alcune problematiche nel debug remoto di dispositivi Windows Mobile/Windows CE. Non che non sia possibile far convivere i due ambienti, ma bisogna prestare particolarmente attenzione all’ordine di installazione dei vari applicativi, degli aggiornamenti, degli strumenti. A lungo andare, qualcosa andrà storto e, per esempio, non sarà magari più possibile generare immagini Windows CE oppure effettuare debug remoto di un dispositivo.

Se poi avete anche bisogno di usare database SQL Server, di cui alcuni in versione 2005 e altri 2008, l’unica cosa da fare è installare entrambi sulla propria macchina. So che il problema non esisterebbe se i database 2005 potessero essere aggiornati alla versione 2008 (ma alcuni clienti non permettono di fare questa cosa) oppure se avessi altre macchine/server di sviluppo su cui installarli separatamente. Cercando sul web, nei forum, sui blog, molte persone dicono che le due versioni possono convivere tranquillamente, senza problemi. Io ho provato a installarli entrambi e per le necessità che ho per lavoro (Management Studio, Query Analyzer, backup database, accesso remoto ai database) le cose funzionano. Tuttavia molte persone in rete segnalano problemi con Management Studio, Integration Services e Analysis Services, ma di questo non posso dire molto, non avendo esperienza in merito.

Stufo di questi (e molti altri) problemi di compatibilità nel lavoro quotidiano, durante le vacanze natalizie ho iniziato a sperimentare un ambiente di sviluppo virtualizzato sulla mia workstation di casa. Dopo un mese di uso quotidiano, ho quindi deciso di adottare la stessa configurazione di sviluppo a lavoro.

In alcuni prossimi post vi darò una panoramica dei miei esperimenti di virtualizzazione, con i problemi che ho avuto e le soluzioni che ho trovato.

Per chi non conoscesse la virtualizzazione, segue una breve introduzione. Per maggiori informazioni, iniziate dando un’occhiata alle voci disponibili su Wikipedia (http://it.wikipedia.org/wiki/Virtualizzazione e http://en.wikipedia.org/wiki/virtualization).

 

Cos’è la virtualizzazione?

Il termine “virtualizzazione” fu coniato negli anni ‘60 del secolo scorso, facendo riferimento ad una macchina virtuale: ovvero, in generale, l’astrazione di una risorsa informatica. Questo include sia il far apparire una singola risorsa fisica come una moltitudine di risorse logiche (come server, sistemi operativi, applicativi, dispositivi) e sia il far apparire risorse fisiche multiple come se fossero un’unica risorsa logica (come server o dispositivi di memorizzazione). La creazione e la gestione di macchine virtuali è stata chiamata “virtualizzazione di piattaforma” o, recentemente, “virtualizzazione server”.

La virtualizzazione di piattaforma è ottenuta su una specifica piattaforma hardware da un programma di controllo (host), che crea un computer simulato, una macchina virtuale, per il suo software ospitato (guest). Il software guest non si limita alle singole applicazioni utenti: molti host permettono l’esecuzione di sistemi operativi completi. Il software ospitato viene eseguito come se stesse girando direttamente sull’hardware fisico, ma con alcune limitazioni. L’accesso alle risorse fisiche (rete, schermo, tastiera, dischi, dispositivi USB, ecc.) in genere viene gestito con un livello più limitato rispetto al processore e alla memoria. Spesso i software ospitati potrebbero avere delle limitazioni nell’accedere a particolari periferiche o potrebbero solo aver accesso ad un insieme ristretto delle effettive funzionalità del dispositivo fisico. Il tutto dipende dalle politiche di accesso all’hardware implementate dal software di virtualizzazione.

Esistono vari software di virtualizzazione, commerciali, gratuiti e alcuni anche open-source, disponibili per i principali sistemi operativi. Per citarne alcuni, senza un particolare ordine preferenziale:

  • VMWare Workstation
  • Microsoft VirtualPC
  • VMWare Server
  • Sun VirtualBox
  • Microsoft Hyper-V
  • QEMU
  • Microsoft Virtual Server
  • Parallels for Desktop
  • Parallels Workstation

Per altri software e maggiori informazioni: http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines

 

Usi della virtualizzazione

La virtualizzazione può essere usata in vari contesti e modalità. Principalmente può essere utile per:

  • Server consolidation (unificazione di sistemi poco/sotto usati in un unico server fisico; unificazione di vecchi sistemi)
  • Testing (test QA; test di portabilità; nuovi sistemi operativi)
  • Navigazione web sicura (siti pericolosi; ricerche; download; script automatici; validazione; test sicurezza; ecc.)
  • Supporto tecnico (software e sistemi operativi dei clienti in macchine virtuali; ricreazione dell’ambiente dei clienti in maniera virtuale)
  • Prove software (test di caratteristiche e compatibilità; simulazione di scalabilità; catture-schermo; snapshot delle VM per ri-uso futuro)
  • Corsi (nessun problema di configurazione tra insegnanti e studenti; macchine per pratica/studio)
  • Demo (nuove VM per ogni demo garantiscono esperienze riproducibili)
  • Load balancing (cluster di VM piuttosto che nodi hardware)
  • Grid computing (Cloud computing)
  • Sviluppo software (gli sviluppatori usano una o più VM con tutte le risorse sulla propria macchina locale)

Negli  ultimi anni la virtualizzazione ha iniziato a prendere sempre più posto nelle strategie di organizzazione e nell’utilizzo nel mondo IT. Alcuni degli scenari precedenti sono correntemente utilizzati, mentre altri si stanno appena affacciando sul mondo della virtualizzazione. Di sicuro la virtualizzazione nell’IT crescerà sempre più in futuro, perchè i benefici che ne derivano sono molteplici.

L’ultimo punto della precedente lista rappresenta il punto di partenza dei miei esperimenti. In uno dei prossimi post vedremo la mia interpretazione di quest’uso della virtualizzazione.

giovedì 4 febbraio 2010

Windows Embedded Standard 2011

Windows Embedded Standard 2011 è la prossima versione di Windows Embedded Standard 2009 e sarà basata su Windows 7. La Release Candidate di Standard-2011 sarà presto disponibile. Per iniziare a conoscere questa nuova piattaforma, grazie ad un accordo con il Microsoft Windows Embedded Team, Beppe Platania (Beps Engineering CEO) ha iniziato a pubblicare sul suo blog una traduzione italiana degli articoli del Windows Embedded Blog riguardanti il prodotto.

Gli articoli saranno pubblicati su base settimanale e il primo è stato pubblicato appena qualche giorno fa. Se siete interessati, date un’occhiata al blog di Beppe!