Piekiełko wieloplatformowego desktopu

0
203

Od dłuższego czasu śledzę tematykę desktopowych aplikacji wieloplatformowych, marząc wciąż o rozwiązaniu idealnym. Do napisania tego postu zmobilizowała mnie ogromna ilość różnego rodzaju postów, czy też wpisów na różnych forach sugerująca jakoby Electron stał się obecnie dominującą technologią tworzenia wieloplatformowych rozwiązań desktop.

Jest w tym stwierdzeniu dużo prawdy. Co raz więcej aplikacji powstaje w tej technologii lub jest wręcz migrowanych z rozwiązań natywnych właśnie na aplikacje bazujące na Electronie.

Dla niewtajemniczonych: Electron to taka paczka zawierająca w sobie silnik chromium oraz node.js, która pozwala zapakować aplikację webową w taki sposób, że działa ona niemal jak natwna aplikacja desktopowa. Oczywistą zaletą jest właśnie wieloplatformowość takiego rozwiązania.

Kiedy zaczynałem swoją zawodową przygodę z programowaniem ponad 15 lat temu, technologie webowe były jeszcze nieco w powijakach. Javascript służył do animowania obrazków na stronach a prym w dostarczeniu rozwiązań webowych po stronie serwera wiódł tandem PHP + MySQL. Sam zresztą w czasach studenckich sporo czasu spędziłem pracując w tym ekosystemie tworząc proste rozwiązania dla klientów. Można było w ten sposób fajnie dorobić do uczelnianego stypendium. Z mojego punktu widzenia – w tamtym czasie – “Prawdziwe” aplikacje, to był jednak natywny desktop i tym się chciałem zajmować (co się zresztą udało). Dominującą pozycję wtedy na świecie (przynajmniej z punktu widzenia programisty z Polski) miał Windows. Maca używano tylko za oceanem a Linux był uważany za system jedynie serwerowy. Temat wieloplatormowości nie był więc zbyt istotny.

Świat się zmienił. Dzisiaj praktycznie każde rozwiązanie przybiera postać aplikacji webowej. Rozwiązań natywnych jest coraz mniej. Co prawda na mobilkach nadal zdecydowanie rządzą aplikacje natywne, ale przy obecnym rozwoju hardware-u to prawdopodobnie również jedynie kwestia czasu. Dzisiejsze natywne rozwiązania desktopowe to głównie bardzo specjalistyczne oprogramowanie – chociaż i rozwiązania chociażby CAD trafiają coraz częściej do przeglądarki. Zdecydowanie łatwiej zarabiać w ten sposób w modelu subskrypcyjnym – ulubionym ostatnimi czasy przez wiele firm.

Okazuje się jednak, że jakieś zapotrzebowanie na aplikacje desktopowe nadal jest. Nie w każdym kraju świata możemy sobie zapewnić stały, szybki i tani internet. Czasami nadal występuje potrzeba pracy offline.

W moim odczuciu Electron nie jest rozwiązaniem wybieranym ze względu na swoją jakość, ale bardziej ze względu na optymalizację kosztów. Jeden zespół tworzy wszystko – aplikację webową, mobile i desktop. Przy dzisiejszym wysokim koszcie pracy programisty jest to zrozumiałe. Na rynkach, gdzie koszt pracy programisty nie jest wysoki (jak np. Chiny) sytuacja wygląda z goła inaczej – nadal większość aplikacji to native.

Dlaczego Electron nie bardzo mi się podoba:

  1. Potężny rozmiar gotowego projektu. Proste “Hello World” to ok 115Mb. Wyobraźmy sobie teraz, że napisaliśmy prostego Pong-a w Javascript i chcemy z niego zrobić fajną desktopową aplikację. Stupiętnasto megabajtowy Pong ? Serio ?
  2. Każda aplikacja pracuje w izolowanym środowisku własnego chromium. Im więcej ich odpalimy tym więcej instancji wirtualnego środowiska jest uruchomionych. Pamięciożerność Chrome jest już legendarna – tutaj wszystko multiplikujemy.
  3. Wydajność. Z tym jest już lepiej, ale każdy kto próbował używać pierwszych wersji edytora Atom na nieco słabszym sprzęcie wie o czym mówię.

Jeżeli nie Electron to co ?

Cóż jest wiele innych rozwiązań, ale każde ma jakiś naprawdę istotny mankament. W przypadku Qt, które wydaje się świetnym produktem o ugruntowanej pozycji mamy licencję LGPL v.3 (która jak się okazuje wcale nie jest taka prosta do ogarnięcia, fundacja Qt opublikowała nawet specjalny film, w którym prawnik tłumaczy w jaki sposób Oni ją interpretują) lub kosmiczne koszty w wersji full-commercial. Biblioteki dla C# i Mono takie jak Avalonia są rozwijane przez małe community i ciężko na nich opierać duży komercyjny projekt. Flex ? – no przecież Flash is Dead. Może Java ? … poza produktami JetBrains od lat nie widziałem dużego projektu desktopowego w Javie. Część projektów (jak np. silnik gier Godot, czy LibreOffice lub Blender) tworzy własne rozwiązanie, dedykowane do produktu.

Pewne nadzieje można wiązać z Proton Native, który ma być odpowiednikiem React Native dla desktopu – ale to również projekt we wczesnej fazie rozwoju.

Innymi słowy – na chwilę obecną dobre rozwiązanie, pozwalające tworzyć szybkie i dobrej jakości wieloplatformowe aplikacje desktopowe nie istnieje. Z Electronem jest w tej chwili trochę jak w przysłowiu o demokracji: Jest trochę do d..y, ale póki co niczego lepszego nie wymyślono.

I tym samym – marząc nadal o stworzonej przez Microsoft wersji WPF-a opartej na Xaml-u, współpracującym z .Net Core i działającym natywnie pod Win/Mac/Linux – kończę.

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here