Projekt Centennial – wszystko, czego nie przeczytasz na innych blogach

Lepiej późno niż wcale. O projekcie Centennial, czyli moście do przenoszenia desktopowych (Win32/.NET) aplikacji do Windowsa 10 i platformy uniwersalnych aplikacji (UWP), wiemy już od ponad roku. Nadal jednak, mimo kolejnej konferencji Build, która szeroko omawiała ten temat, pojawia się wiele nieporozumień w kwestii czym naprawdę jest projekt Centennial.

Definicja

Na początku króciutki opis czym Centennial jest. I czym nie jest. Projekt ten to most, który pozwala użyć istniejących desktopowych projektów (kodu) i „opakować” je w standardową paczkę .AppX, którą wysyła się do sklepu Windows Store lub instaluje jednym kliknięciem. Celowo użyłem słowa przepakować, a nie przekonwertować. Przepakowywać, bo ani kod źródłowy aplikacji, ani jej procesy się nie zmieniają. Paczkę .AppX, używając dużego skrótu myślowego, możemy porównać do paczki .rar czy .zip, która nie zmienia zawartości, a jedynie ją „opakowuje”. Skoro to tylko paczka („kontener”) dla niezmienionego kodu, po co to całe zamieszanie? O tym więcej w dalszej części wpisu, ale na tym etapie najważniejsze jest, żeby zrozumieć, iż narzędzia projektu Centennial nie konwertują w magiczny sposób starych programów desktopowych do nowych aplikacji UWP. Nie zmienia się (niemalże) niż – ten sam kod, interfejs i to samo środowisko uruchomieniowe. Projekt Centennial nie jest:

Dlaczego Windows to bagno

Jak więc działa Centennial? Zanim zaczniemy się w to zagłębiać, chciałbym wymienić największe problemy związane z desktopowymi aplikacjami dla Windowsa:

Centennial rozwiązaniem

Centennial został stworzony, żeby rozwiązać większość tych problemów. Zdecydowaną większość, ale nie wszystkie. Wróćmy teraz do tego, jak działa Centennial i jak wygląda architektura tego rozwiązania. Często finalnym efektem pracy programistycznej jest właśnie paczka z instalatorem (.exe, .msi), który ma trafić do użytkownika i zostać przez niego uruchomiony. Dzisiaj do programistów trafiło narzędzie Microsoftu, które pozwala przeanalizować działanie takiego instalatora (głównie śledzenie zmian, które chce wprowadzić w systemie) i stworzenie paczki .AppX, która może być wysłana do sklepu lub uruchomiona bezpośrednio – zainstalowana jednym kliknięciem za pomocą domyślnego instalatora wbudowanego w Windows 10 (a nie zewnętrznego instalatora stworzonego przez programistę) – to rozwiązuje problem niedomyślnego instalatora. Mało tego, po konwersji, instalator ten wrzuca pliki TYLKO do folderu danej aplikacji – bez zmian rejestru czy wrzucaniu plików .dll do folderów systemowych. Następuje tak zwana wirtualizacja rejestru i przestrzeni nazw dla plików .dll i tak każda aplikacja ma własny separowany folder na dysku, a jej odinstalowanie to jedno kliknięcie i usunięcie WSZELKICH pozostałości po niej. To rozwiązuje kolejne trzy problemy: piekła .dll, burdelu w rejestrze i odinstalowywania aplikacji. Dodatkowo, jednym kliknięciem mogą być instalowane tylko paczki cyfrowo podpisane – z zaufanego źródła. Dzięki temu pozbywamy się kłopotu z appkami z podejrzanych źródeł. Jeśli natomiast aplikacja była zainstalowana przez Sklep, a nie ściągnięcie i uruchomienie paczki, to rozwiązany mamy też problem autoaktualizacji, którymi zajmuje się sam Sklep. Appki wykorzystujące narzędzie Centennial dalej jednak działają w trybie full trust, więc wszelkie niebezpieczeństwa związane z działaniem poza sandboksem UWP pozostają realne.

Ograniczenia

Powiedzmy teraz o głównych ograniczeniach dla aplikacji, które mogą być przepakowane przy użyciu narzędzi projektu Centennial:

Te ograniczenia rozwiązują nam kolejne dwa problemy, o których pisaliśmy wcześniej – uprawnienia i sterowniki. Podsumowując – w najprostszej wersji Centennial to po prostu przepakowanie aplikacji do kontenera .AppX, zapewnienie mu izolowanej przestrzeni dyskowej (dedykowany folder aplikacji, obok aplikacji UWP), wirtualizacja przestrzeni nazw oraz rejestru, ograniczenie uprawnień (choć nie jest to automatyczne – uprawnienia musi ograniczyć sam programista przed kompilacją kodu). Wszystko to pozwala na wrzucanie tych aplikacji do Sklepu lub instalowanie/odinstalowywanie jednym kliknięciem przy użyciu uniwersalnego instalatora wbudowanego w Windowsa 10.

W tej postaci Centennial jednak nie jest mostem, a jedynie protezą. Oczywiście jest to coś znacznie lepszego niż całkowity bajzel, który był dotychczas, ale nadal nie rozwiązuje wszystkich problemów. Dlatego jest to tylko faza pierwsza. Docelowo, Centennial ma pomóc programistom stopniowo przenosić się na API i rozwiązania oferowane przez platformę UWP rezygnując z odwołań do starych API aplikacji Win32/.NET. Ma się to odbywać przez dodawanie kolejnych funkcji (takich jak dynamiczne kafelki, powiadomienia) i zastępowanie starych API nowymi.

Okres przejściowy

W okresie przejściowym („na moście”) uruchomienie aplikacji spowoduje uruchomienie dwóch procesów – jednego procesu full trust dla aplikacji Win32/.NET („stara cześć kodu”) i procesu w sandboksie UWP, zawierającego część nowego kodu pisanego dla UWP. W tym okresie przejściowym oba procesy mogą się ze sobą komunikować przez protokół zapewniany przez projekt Centennial. Microsoft radzi, żeby zacząć od przenoszenia interfejsu z WPF (Windows Presentation Foundation) do XAMLa, czyli markupu do tworzenia wizualnej części aplikacji uniwersalnych. Następnym krokiem będzie sukcesywne przenoszenie funkcji związanych z logiką aplikacji. W momencie przeniesienia wszystkich funkcji do UWP, część związana z Win32/.NET znika nam całkowicie, a aplikacja staje się w pełni uniwersalna – jesteśmy już „za mostem”. Appka działa w bezpiecznym sandboksie UWP i jest kompatybilna ze smartfonami ARM i x86, Xboksem, HoloLens czy Surface Hubem. W tym momencie niczym nie różni się ona od innych aplikacji UWP, bo cała część starego kodu desktopowego została zastąpiona przez nowy kod związany z API dla UWP.

Proces przejściowy nie będzie łatwy z uwagi na konieczność utrzymywania dwóch projektów w Visual Studio i braku niektórych API, których uzupełnienie może zająć Microsoftowi nawet kilka lat. Ale taki właśnie jest plan – gdy Windows 10 całkowicie zastąpi Windows 7 zarówno w przestrzeni konsumenckiej, jak i korporacyjnej, wtedy MS może wreszcie uwolni się od obciążenia starym, niebezpiecznym i trudnym do utrzymywania kodem Win32/.NET. Ale sukces tej misji będzie w dużej mierze zależeć od szybkości adopcji Windowsa 10. Bez tego, Windows 7 stanie się następnym Windowsem XP, okupującym korporacje przez kolejne 10 lat.

Zagrożenia

Centennial to jednak broń obosieczna. Do Sklepu Windows, kojarzonego do tej pory z bezpiecznymi aplikacjami uruchamianymi w sandboksach, trafią aplikacje desktopowe uruchamiane w trybie full trust. Oczywiście będą one indywidualnie weryfikowane, ale nie można wykluczyć pojedynczych „wpadek”. A nie ma nic gorszego dla rozwoju Sklepu, niż utrata zaufania użytkowników co do bezpieczeństwa jego użytkowania. Microsoft jednak nie ma wyboru. Od aplikacji Win32/.NET i pulpitu nie można się odciąć grubą kreską, więc firma robi co może, żeby ten proces przejściowy przeszedł możliwie bezboleśnie. Jest to pierwsze podejście Microsoftu do stworzenia jakiejkolwiek zunifikowanej platformy aplikacji, bo do tej pory w Windowsie nawet ciężko było zdefiniować czym jest desktopowa aplikacja. Zrobiono naprawdę bardzo dużo dzięki projektowi Centennial, zapewniającym uniwersalny instalator oraz izolację przestrzeni plików i rejestru, ale ten okres przejściowy to wojna, a na każdej wojnie są ofiary. I Microsoft z pewnością ich nie uniknie.

Exit mobile version