Sviluppare con Windows 8

BUILD Windows è la conferenza conclusa da poco in cui Microsoft ha presentato agli sviluppatori Windows 8. Una nuova interfaccia utente, nuove API e nuovi strumenti di sviluppo. Con qualche discontinuità rispetto all’esistente. DevCon Conference 2011 è l’evento di un giorno che faremo il 25 ottobre 2011 a Milano per riassumere le novità e valutarne l’impatto sulle applicazioni esistenti e future. Abbiamo un mese per preparare tutto il materiale, ma ci sono già alcune considerazioni che è possibile fare su quanto appena presentato.

Le novità sono molteplici e non riguardano soltanto quello che vede l’utente. Alla classica interfaccia “a finestre”, chiamata non a caso “Desktop” perché ricalca la metafora della scrivania con documenti, cartelle e finestre personalizzabili che definiscono un’area di lavoro, Windows 8 introduce una nuova interfaccia adatta all’uso su dispositivi senza tastiera, basati prevalentemente su un’interfaccia multi-touch. Avrete sicuramente già letto molti commenti entusiasti delle novità della nuova piattaforma, mi dilungherò quindi su alcuni degli aspetti più controversi e che hanno suscitato le maggiori critiche e preoccupazioni (molte infondate, ma non tutte).

Molti di noi si sarebbero aspettati un’evoluzione della piattaforma esistente, basata magari su .NET, con nuove linee guida e oggetti per l’implementazione dell’interfaccia utente. La scelta è stata diversa. Windows 8 ha una nuova API a livello di sistema operativo chiamata Windows Runtime (WinRT) che definisce un layer alternativo all’interfaccia Windows e alle API Win32. Questa API è a oggetti, espone metadati che semplificano la ricerca di metodi e classi, integra funzionalità per la sicurezza nell’accesso ai dati e a determinati servizi del sistema operativo, un po’ come .NET ci ha abituato. Ma questa API è codice nativo, non è basata su .NET, non richiede di avviare il runtime di .NET per eseguire un’applicazione.

WinRT può essere utilizzato in maniera “naturale” da C++, C#/VB, JavaScript. Questa è una vera “rivoluzione” per C++ e JavaScript, ma può sembrare un passo indietro per il mondo managed. L’impressione va però mediata. Oggi il mondo .NET dialoga con il sistema operativo attraverso P/Invoke, con la necessità di convertire molti dei parametri trasferiti tra il mondo managed e il mondo unmanaged per soddisfare una diversa rappresentazione binaria. Questo ha un costo, nelle applicazioni che esistono oggi. Con WinRT questa situazione non è eliminata del tutto, ma viene migliorata in molti aspetti. Resta un sistema operativo con API unmanaged, che trova il massimo dell’efficienza in applicazioni scritte in C++, e aggiunge un piccolo overhead (minore che in passato) quando usato da altri ambienti, come .NET e JavaScript.

Questa è solo la base di partenza per descrivere i cambiamenti che avverranno con Windows 8. Il discorso è molto ampio e riveste tutti gli aspetti degli attuali ambienti di sviluppo per il client, managed (WPF, Silverlight, Windows Forms) e unmanaged (MFC, ATL, Win32). È semplicemente impossibile pensare che in meno di 10-15 anni tutto il codice esistente possa essere convertito alle nuove API. Soprattutto, è forse insensato che succeda, perché l’interfaccia Metro è perfetta per l’uso sui Tablet e anche come “porta d’ingresso” per molte delle attività da fare su un PC. Ma è assolutamente prematuro decretare con questo la “fine” delle applicazioni Windows così come le conosciamo. Un aspetto è l’enorme inerzia del mercato esistente, ma più importanti sono le differenze funzionali esistenti. Posso immaginare una versione di Office con interfaccia Metro. Ma a essere ottimisti, posso pensare a un sottoinsieme delle funzionalità disponibili con tale interfaccia, un po’ come oggi, con le Office Web Apps, sono disponibili solo una parte delle funzionalità degli applicativi Office.

Personalmente non ho ancora formulato un’opinione completa. Per certi aspetti, finalmente Microsoft fa una mossa “coraggiosa” nel “cuore” del sistema operativo. Avvicinandosi ai dettagli, molti servizi sono semplicemente la riesposizione degli attuali servizi Win32, semplicemente perché non hanno avuto tempo di “rifare” alcune cose, e l’esistente è utilizzabile. Il coraggio unito al pragmatismo.

Non posso però nascondere un po’ di sorpresa. Non dovremmo dire che COM è risorto, visto che non è mai stato dismesso, ma sicuramente da oggi inizia una seconda giovinezza, in cui dovremo scoprire se le rughe del passato hanno comunque lasciato qualche segno. Qualcosa è stato semplificato, qualcosa è rimasto. La gestione della memoria è ovviamente la cosa su cui ho maggiori preoccupazioni, per fortuna l’uso con C#/VB dovrebbe semplificare le cose a chi non può fare a meno di riferimenti circolari tra i suoi oggetti… Vi invito a leggere il post di Raffaele Rialdi con qualche dettaglio tecnico in più su questi aspetti.

Credo che le lenti migliori con cui dovremmo guardare a queste novità sono quelle che Miguel De Icaza descrive nel suo blog: WinRT è una nuova libreria per l’interfaccia utente. Non è la nuova API di Windows a 360 gradi. Nel bene, e nel male. Evidente che la cosa potrebbe cambiare nel futuro e un approccio analogo a WinRT potrebbe essere usato per altri servizi del sistema operativo, ma l’obiettivo di Microsoft, per Windows 8, è di fornire una nuova API che sia alla base di un ecosistema per lo sviluppo di applicazioni che copre un range ampio di sviluppatori: chi conosce .NET, chi conosce HTML/JavaScript e chi preferisce C++. Come sempre, l’architettura di un’applicazione complessa non dovrebbe dipendere dall’interfaccia. Da questo punto di vista, chi oggi scrive applicazioni nel modo corretto non si troverà di fronte a un problema insormontabile nel dover adattare il proprio codice alle nuove API. Quello che è relativamente nuovo, almeno per il mondo Windows, è che potrebbe avere senso avere due tipi di interfacce diverse per una stessa applicazione. Una per il “desktop”, completa di tutte le funzionalità. E una per i “device mobili”, in particolare per i tablet, con un’interfaccia utente magari semplificata e più adatta a un’interfaccia touch. Ma forse anche questo, in realtà, non è nuovo come concetto. Ciò che è nuovo è lo strumento con cui andremo a implementarlo.

Stiamo quindi preparando la DevCon Conference 2011, dove affronteremo tutte le questioni aperte, a cominciare da Silverlight e WPF che, parlando di interfaccia utente, sono i due strumenti più coinvolti nella discussione, anche se come abbiamo visto l’impatto è, da un punto di vista tecnico, più ampio e complesso. Merita perciò di essere conosciuto a fondo per prendere le migliori decisioni strategiche nei propri piani di sviluppo.

BUILD Windows: novità in arrivo su Windows 8 e non solo

L’attesa per la BUILD Windows Conference che si terrà ad Anaheim in California dal 13 al 16 settembre 2011 è sempre più alta. Con una strategia di comunicazione che ci riporta indietro al 2000, Microsoft sta centellinando le informazioni che vengono rilasciate al pubblico in modo da controllare al meglio il messaggio, correggere tempestivamente eventuali percezioni errate e mantenere alta l’attesa per le novità che saranno svelate durante la keynote e le sessioni tecniche della conferenza.

Esistono molte indiscrezioni su quanto sta per arrivare (riassunte abbastanza bene qui), ma la realtà è che non esiste alcuna notizia attendibile o anche solo credibile relativamente agli aspetti strategici più importanti.

Qualcuno ha pensato che avremo un’interfaccia basata esclusivamente su HTML5 e JScript, ma quasi certamente quella sarà una delle opzioni possibili, che si appoggerà su… cosa? L’interfaccia “Metro” sarà utilizzabile senza nemmeno caricare l’interfaccia “windows” tradizionale. Assumendo che il Kernel sia ancora al suo posto (altrimenti perderemmo la compatibilità di tutti i driver) questo mette in discussione la dipendenza della nuova interfaccia dal sottosistema USER (la mitica USER32.DLL). Se fosse così, questo getta dalla finestra anche GDI/GDI+. Nel senso, sono ancora lì ma solo per compatibilità, le applicazioni nuove possono farne a meno.

Questo apre grandi interrogativi: chi gestirà il rendering? Sarà tutto in mano al motore di Internet Explorer? C’è qualcosa che invece è parte del sistema operativo e non di IE? Quasi certamente questa componente critica non sarà scritta in codice managed ma avrà un’interfaccia nativa. E la domanda successiva è: userà COM? Il recente annuncio della dismissione di OLEDB per SQL Server a favore di una rinascita di ODBC porta a pensare a un progressivo allontanamento da COM, ma in cambio di cosa?

Qualcuno teme addirittura per il futuro di .NET. Personalmente non credo che .NET possa sparire, anche se potremmo assistere a un cambiamento delle forme in cui si esprime il runtime. D’altra parte già oggi Silverlight funziona “come” .NET anche se non dipende dalla presenza del CLR sulla macchina. Non mi stupirei di vedere altre evoluzioni analoghe a questo modello. Ma fondamentalmente tutti gli investimenti sui linguaggi managed credo si possano considerare in cassaforte.

Molti di noi di DevLeap saranno in California per seguire tutto l’evento. Personalmente sarò a Torino dove, con il Torino Technologies Group, faremo un incontro il pomeriggio del 13 settembre per assistere in diretta alla keynote della BUILD Conference e commentarla subito dopo, scambiandoci le prime impressioni a caldo. Un aspetto interessante della faccenda è che al momento nessuno ha confermato ufficialmente che ci sarà una diretta in streaming dall’evento. In ogni caso abbiamo centinaia di blogger che seguiranno l’evento e non posso credere che Microsoft stia creando tanta attesa per poi “perdere” l’opportunità di trasmettere l’evento in diretta. Probabilmente fa tutto parte di una strategia di comunicazione mirata a generare il massimo dell’attesa. Comunque, noi facciamo la nostra scommessa e se ci fosse un black-out abbiamo comunque i nostri inviati sul posto che ci aggiorneranno sulle novità. Se volete partecipare, registratevi per tempo perché i posti sono limitati. Tra una settimana tornerò a commentare le novità annunciate, confrontandole con le attese e le previsioni di questo post.