Microsoft Office: dlaczego aktualizacje są takie duże?
Aktualizacje pakietu Office skutecznie przemigrowały z formatu MSI (powstałego głównie na potrzeby Office 2000) do postaci Click-To-Run (CTR). Potrzebne było kilka podejść do tego, by CTR stało się przystępne, nieinwazyjne i niepsujące zgodności, ale w końcu się udało. Office w wersji 365, od wydania 2010 instaluje się metodą "strumieniową". Kiedyś w tym celu wykorzystywał wirtualny dysk Q oraz usługę AppV, dziś robi to samodzielnie i na Instalatorze Windows (MSI) polega w śladowym stopniu.
Do formatu CTR przemigrowały już także wersje "wieczyste", a nie tylko subskrypcyjne, ale miało to miejsce dopiero w 2019 roku. Obecnie poprawki w formacie klasycznego Instalatora Windows otrzymują tylko dwie wersje: Office 2013 i Office 2016. Na przestrzeni lat stały się one olbrzymie. Obecnie konkurują swoim rozmiarem z aktualizacjami kumulatywnymi samego Windowsa. Pakiet łatek do Office 2013 ze stycznia ważył aż 407 MB! Ostatnia kumulatywna aktualizacja do Windows 10 waży 680 MB. A przecież Office 2013 ma znacznie mniej intensywny proces wydawniczy niż 365. Zmienia się w nim znacznie mniej. A więc co się dzieje?
Nowoczesny i przestarzały jednocześnie
Powodów jest kilka, ale żeby je zrozumieć najpierw potrzebne jest (jak zwykle) trochę historii. Mechanizm aktualizacji, który ostał się jeszcze w wersjach 2013 i 2016 ukształtował się w swojej finalnej postaci wraz z Office 2007. Były to czasy, w których każde kolejne wydanie Office było w pewien sposób przełomowe (czasy te dawno już minęły). Wersja 2007 wprowadziła na przykład nowy mechanizm integrowania łatek: już nie dało się ich integrować ze źródłem instalacyjnym, pozostawało ono wieczyście niezmienne. Zamiast tego, aktualizacje wkleja się do katalogu, z którego są następnie instalowane jako sekwencja pojedynczych poprawek.
Źródło instalacyjne stało się dzięki temu niezmienne (immutable). Zamiast góry plików, Office instalowany jest z wielkiego archiwum CAB o stałej sumie kontrolnej. W wersji 2007 usprawniono także same aktualizacje: usunięto warianty językowe, dzięki czemu zamiast wydawać 40 wariantów tej samej łatki, budowano jedną. To wielka korzyść, bowiem zależność od łańcuchów językowych była np. jednym z powodów, dla których tak wiele problemów sprawiało stworzenie następcy przeglądarki IE6. To kula u nogi. Program i jego "lokalizacja" powinny być oddzielnymi zasobami.
Gdy nastały czasy Windows 8, Microsoft rozpoczął o wiele bardziej "zwinny" proces rozwoju oprogramowania. Nowe funkcje zaczęły wpadać do Ósemki bocznymi aktualizacjami, pakiet Office także rozwijał się o wiele intensywniej przez pierwsze 5 lat wsparcia - choć jeszcze był to czas Service Packów. Aktualizacje stały się większe, ale nie dlatego, że sam produkt wyraźnie przytył. Powodem było raczej to, że poza poprawkami bezpieczeństwa poprawiano o wiele więcej, dostarczając też nowe funkcje.
Czy wszystko tam jest potrzebne?
Po ośmiu latach Office istotnie jest większy, ale przede wszystkich cierpi na konsekwencje dobicia do kresu możliwości technicznych starych aktualizatorów. Najlepiej widać to właśnie na przykładzie języków. Połączenie procesu niezależnego językowo (dobry pomysł) z procesem szybkiego dostarczania aktualizacji (nowoczesny pomysł) sprawiło, że istotnie dalej otrzymujemy jedną aktualizację zamiast czterdziestu, ale… w środku zawiera ona i tak pliki językowe dla wszystkich wersji językowych. Po prostu plik zmienia się na tyle, że musi otrzymać też aktualizacje języków. Zatoczyliśmy koło.
To przybliża nas do wyjaśnienia, dlaczego łatki do Office'a ważą 407 megabajtów. Największe z nich, excel-x-none oraz mso-x-none, to razem 380. Pierwsza z nich, dla Excela, waży 151 MB. Przyjrzyjmy się jej. Zawiera on nową wersję pliku EXCEL.EXE. Ma on 36 MB, EXCEL.EXE z wciąż popularnego w Polsce Office 2007 waży tylko 18. Podobnie konwertery: w 2016 jest to 30 MB, w 2007 - 15. Pakiet przytył więc dwukrotnie, tak?
Nie! Porównujemy wersję 32-bitową z 64-bitową. Gdy weźmiemy wariant 32-bit, rozmiar okazuje się rosnąć już tylko o 1,25 raza: zamiast 151 mamy 106 MB. Nie tłumaczy to dalej i tak dużego rozmiaru najnowszych aktualizacji. Wystarczy jednak usunąć pliki lokalizacji i interfejsowe dla wszystkich języków oraz niepotrzebnie wrzucane przez build zasoby graficzne i ikony (za każdym razem!), by rozmiar spadł do ze 109 do 40 MB. Oznacza to ponownie przyrost jedynie o 25%. W przypadku aktualizacji rdzenia Office (MSO.DLL) mamy do czynienia z tym samym problemem, spotęgowanym w dodatku o dostarczanie jednocześnie wariantów 32 i 64 bit.
Problem rozwiązany?
Wniosek jest prosty: klasyczne instalatory nie są dostosowane do dzisiejszych potrzeb i Microsoft przemigrował na nowe. Nie włożono zarazem żadnego wysiłku by poprzednie paczki były choć elementarnie zoptymalizowane. W rezultacie w Redmond budowane są gigantyczne pakiety, zawierające w środku najwyżej jedną trzecią tego, czego potrzebuje klient. Oznacza to setki gigabajtów marnowanego transferu, co miesiąc, od lat.
Aktualizacje dokonywane przez Microsoft Store są o wiele lepiej zoptymalizowane. Szkoda tylko, że Office wykorzystuje własny aktualizator (Click-To-Run), OneDrive - jeszcze inny, a Microsoft Edge i Teams stosują rozwiązanie stworzone przez Google na potrzeby Chrome'a. Problem wcale nie wygląda zatem na rozwiązany.