Metro = Yeni .NET
“Build Windows” seminerinin ikinci gününde, artık her şeyi daha net anlamış oluyoruz. Windows temelli dünyada, kullanıcı deneyimi ortadan ikiye yarılıyor.
Bunlar ilki herkesin bugüne kadar kullanageldiği, alışageldiği, adeta doğar doğmaz tecrübesini edindiği masa üstü uygulamaları içeriyor. Eskisinden hiç farkı yok.
Diğeri ise, dün duyurulan Metro uygulamaları. Bildiğimiz uygulamalardan epey farklı olacaklar. Farklı davranacaklar. Farklı geliştirilecekler, farklı dağıtılacaklar. Ve doğal olarak farklı çalışacaklar.
Gördünüz mü? Ortaya Ihlara Vadisi kadar büyük bir yarık ortaya çıktı. Bu konudaki fikirlerimizi başka bir yazıya saklayıp, Metro paketini açmaya devam edelim.
Olayı benim için netleştiren, aşağıdaki şema oldu:

Metro’ya müsadenizle, Microsoft’un yeni framework’ü demek istiyorum. Biz uyurken, yepyeni bir .NET doğmuş. Neden böyle söylüyorum. Çünkü ortaya çıkan şey, .NET kadar etraflı. Hatta kimi noktalarda onun ötesinde.
Nereden başlayalım… yürütme ortamından meselâ. .NET’in yürütme ortamı CLR adını verdiğimiz sistem. CLR, herkesin artık ezbere bildiği gibi uygulamanın kaynak yönetimini sağlıyor ve işletim sistemi servisleri ile arasında aracı oluyor. Metro, bu iş için, tam da tahmin ettiğim gibi minik bir yürütme ortamı icat etmiş. Adı şu anlık “App Container”. App Container, uygulamanın yine aynı ihtiyaçlarından sorumlu. Tüm ihtiyaçları da WinRT kütüphanesiyle gidermeyi amaçlıyor.
App Container’in CLR’ye göre önemli bir fazlalığı var: sandbox’lama. Sandbox’lama Türkçede pek tatlı bir ifade bulamıyor kendine. Ama izolasyon (tecrit, soyutlama) kelimesiyle karşılarsak kimse küsmez herhalde. Sandbox’lama ile, Metro uygulamaları resmen kilitli bir odada çalışıyor. Bu Apple’ın son olarak Lion’a koyduğu yöntem de aynı.

Bu konteyner, ilaveten çalışan kodun sertifikalı olmasını da şart koşuyor. Bu sertifikalama, tahmin edebileceğiniz gibi yüklenecek Metro’ları sadece Microsoft’un sertifikalamasını gerektirecek. Windows Store dışında bir yerden Metro uygulaması yüklemek, mümkün olamayacak. (Geliştirici senaryoları kapsam dışı.)
WinRT ise, .NET SDK’nın birçok temel servisinin C++ üzerinde, nesne yönelimli olarak tekrar edilmiş hâli. WinRT’nin en önemli özelliği, saf C++ kodu üzerinde yazılmış olması ve Windows’un çekirdek API’leriyle aynı ortamda çalışması. Açıkçası bu Windows’un yıllar önce yapması gereken şeydi. Bugüne kalmış olması, .NET’in suçu diyebiliriz.
WinRT, özelde, Metro’ya verilecek hizmetlere odaklanmış bir kütüphane. .NET’teki tam kadro hizmeti veremeyebilir fakat Metro için gereken her şeyi vermeye bakacaktır. O yolda ilerleyecektir. İlk verdiğim şema, bunu dillendiriyor zaten.
Microsoft, bu kadar radikal bir operasyonun yanında gönül almaya çalışmış ve C# ve Javascript/HTML geliştiricilerini de App Container - WinRT kombinasyonunun içine katmış. Ama bence çok da sevinmeyin. C#’taki .NET SDK tecrübeniz çok işe yaramayacak meselâ. Çünkü Metro uygulamaları, çoğu klasik .NET SDK kütüphanesini kullanamayacak. Meselâ, dosya sistemine erişemeyeceksiniz. Şaşırmayın. Bir pencere açamayacaksınız. Bir mesaj kutusu gösteremeyeceksiniz. Sadece ve sadece, o dili kullanmış olacaksınız. Javascript tarafı için de aynısı geçerli.
XAML için yapılan önemli bir yatırım, tüm XAML alt yapısının, C++ ile tekrar kodlanması olmuş. Daha önce büyük kısmı CLR üzerine C# ile kodlanmış olan XAML kütüphanesi, şimdi aradaki tüm katlar atılarak doğrudan C++ hâline getirilmiş. Bu yeni XAML’da yazdığınız tüm markup kodlar, C++ nesnelerine dönüşerek derleniyor. Metro’yu C# ile yazdığınızda bu XAML’lar ne oluyor, tam kesinleştiremedim şu an.
Metro’nun işletim sistemine erişimi tamamen farklı. Özellikle, kritik kaynakları kullanımı, kontrollü sağlanıyor. Kullanıcıya tam kontrol verilmiş. Metro uygulamalarının işletim sistemi kaynaklarından neyi kullanacağını ve kullanmacağını kullanıcı belirliyor. Meselâ, bu uygulama, kameraya erişemesin diyorsanız (bunu işaretliyorsanız), o WinRT çağrısını kesinlikle yapamıyor. (Şu an akıllı telefonlarda (mobil işletim sistemlerinde) uygulanagelen yöntem.)
Görüyorsunuz. Microsoft, tablet dünyası için yeni bir .NET yapmış. Dokunma öncelikli, performans odaklı bir platform.
Küçük bir tahmin koyayım buraya. Hızlı veya yavaş bir ilerleme ile, sadece Metro platformunu barındıran, masa üstü uygulamaları ise sanallaştırma ile çalıştıran mini bir Windows’un yolu açılmıştır. Belki de ana Windows, Metro Windows olacak. Eskiyi hep sanallaştırma ile destekleyecek.