To je těžké.
Současný Thunderbird nějak funguje na XULu a má nějaký zajímavý ekosystém rozšíření, byť se to moc nerozvíjí.
Pokračovat stejným směrem by kromě stagnace znamenalo taky nutnost udržovat něco, co dosud bylo od Mozilly bez práce. Znamenalo by to více úsilí než doposud.
Přepsat všechno najednou je dost riskantní krok. Na jednu stranu se těším na to, co to (snad) přinese, na druhou stranu vidím pár rizik. Zaprvé kompletní přepis bývá podceňovaná věc a ne vždy je výsledkem produkt v požadované kvalitě dodaný v plánovaném to termínu. Zadruhé, celkem jistě si to vyžádá přepis dnešních rozšíření, která fungují snad výhradně na XULu. Jsem dost zvědavý, kolik z nich zanikne a kolik bude přepsáno. V poslední řadě během přepisu se obvykle nevěnuje moc sil vylepšování starého kódu. Thunderbird se ale poslední dobou moc nemění, takže to bude asi celkem malá oběť.
Postupný přepis by možná šel, kdybychom měli něco jako Electron/Cordovu na Gecku. Pak by snad šlo rozumně kombinovat legacy kód s moderním. Třeba editor zpráv by byl přepsán, zatímco seznam zpráv by zůstal v původní podobě. Ale o ničem takovém nevím. A i kdyby něco takového existovalo (v požadované kvalitě), mohou tu být další bariéry, o kterých zatím nevím.
Ať už zvolí cokoli, je jisté, že tu bude početná skupina uživatelů, kterým se to líbit nebude. Řekl bych, že je to o hledání nejméně špatné volby.
Co mi na přechodu od XUL u Firefox/Thunderbird na "moderní technologie" vadí:
U Thunderbirdu po letech registruju jen 2 bugy: S/MIME nebo GPG zašifrované zprávy nelze prohledávat a po suspend/wake cyklu se rozpadne občas synchronizace u IMAP foldrů (musí se na ně explicitně kliknout). Zvláštní je, že RHEL 6 Thunderbird má nějaký patch, který tohle řeší, ale nenašel jsem který přesně.
1. No, nevím, jestli je na tom XUL o tolik lépe. (A blbě se to srovnává. Ideální by bylo porovnávat dostatečně podobné aplikace. Chrome vs. Firefox se liší už používáním procesů a přímé srovnání je problematické.)
2. Ano, toho se bojím. Odhadují tři roky, reálně po čtyřech letech vyjde nestabilní nedodělek. (Teda třeba ne, ale něco takového jsme tu už viděli tolikrát…)
3. XUL addons jsou kontroverzní. Ale nejde až tak o XUL, jako o overlays (které můžeme ale mít klidně i s HTML5). Na jednu stranu nejsme svázani poskytnutým API a můžeme si dělat, co nás napadne, na druhou stranu nemáme jasné API (problémy s kompatibilitou při upgradu Firefoxu) a rozšíření si mohou dělat, co autory napadne (není žádný sandbox, rozšíření může šahat kamkoli). V principu nemůžeme chtít všechno.
Mimochodem, ono to není buď-anebo. Můžeme mít XUL a WebExtensions vedle sebe. Nebo WebExtension může mít k dispozici API, kterým získá privilegovaný přístup, a pak je to podobná situace jako s XULem.
S Lightningem by snad nemusel být problém, to je skoro samostatná aplikace, nepotřebuje se nějak hluboce integrovat. S Enigmailem to může být horší, ale pokud bude podpora pro S/MIME, tak snad by to mohlo jít…
Myslím že kombinovat různé UI frameworky ("editor zpráv by byl přepsán, zatímco seznam zpráv by zůstal v původní podobě") nemá moc smysl. Spíš bych se soustředil na lepší oddělení front-endu a back-endu, a zachování maxima z toho back-endu. Front-end by bylo dobré napsat v nějakém vyšším jazyku, který nesvádí k chybám, a když už se vyskytnou, umožní je dobře odchytat. Z hlediska jazyka zní nejlépe C# a Java, jenže z praktických důvodů to první na Unixech není moc dobrý nápad, a to druhé není dobrý nápad nikde. Framework by měl být multiplatformní a podporovat mobilní zařízení. Nabízí se Qt s QML, otázkou je v čem psát kód. Alternativně Mono framework, i když si umím představit, že proti tomu by někteří uživatelé na Linuxu protestovali. V každém případě se dá čekat, že rozšíření bude potřeba přepsat.
Řešit to pomocí webových technologií bych považoval za dost nešťastné.
> Myslím že kombinovat různé UI frameworky ("editor zpráv by byl přepsán, zatímco seznam zpráv by zůstal v původní podobě") nemá moc smysl
Jako trvalé řešení určitě. Jako dočasné řešení pro přechod mi to smysl dává, pokud je to technicky/ekonomicky schůdné.
> v nějakém vyšším jazyku, který nesvádí k chybám, a když už se vyskytnou, umožní je dobře odchytat.
Souhlas, ale bohužel je tu spousta lidí, kteří to vidí jinak. Navíc toto nejde tolik dohromady s návrhem zachovat co nejvíce z backendu, který je z velké části v JS, což při volání z jiných jazyků může činit větší či menší obtíže.
> Z hlediska jazyka zní nejlépe C# a Java, jenže z praktických důvodů to první na Unixech není moc dobrý nápad, a to druhé není dobrý nápad nikde.
Proč? Takové Banshee (Mono) funguje dobře, aspoň na linuxu. A Java – pokud se nepoužije Swing (nebo pokud se Swing zkulturní, jako to udělali v JetBrains), nevidím v tom problém.
> Alternativně Mono framework, i když si umím představit, že proti tomu by někteří uživatelé na Linuxu protestovali.
Někteří ano. Ale najděte technologii, proti které nebude nikdo protestovat…
> Řešit to pomocí webových technologií bych považoval za dost nešťastné.
Na jednu stranu ano. Na druhou stranu, teď má projekt nějaké přispěvatele s nějakými znalostmi a zkušenostmi, které jsou webu blízko. A pokud nový Thunderbird má se starým mít společného i něco jiného než název a logo, hodilo by se nedělat radikální řez do týmu
Ad kombinovat různé UI frameworky nemá moc smysl; Jako dočasné řešení pro přechod mi to smysl dává, pokud je to technicky/ekonomicky schůdné - tam bude asi problémem ta schůdnost
Ad bohužel je tu spousta lidí, kteří to vidí jinak - takovým přeju, aby na podobném projektu pár let kódovali. Za následky na jejich zdraví neručím :)
Ad toto nejde tolik dohromady s návrhem zachovat co nejvíce z backendu, který je z velké části v JS - back-end v JS? Fakt? Někdo tu uváděl, že TB má 63% v C/C++ a 22% v JS. Tipnul bych si, že v C/C++ bude primárně back-end. Obsluhu tlačítek a zaškrtávátek bych naopak čekal v tom JS.
https://www.root.cz/clanky/vyvojari-navrhuji-prepsat-thunderbird-pomoci-web-technologii/nazory/918761/
Ad Banshee (Mono) funguje dobře, aspoň na linuxu - vím že projekt Mono udělal velký pokrok, ale nejsem schopný posoudit, jak si na Linuxu stojí. Jestli dobře, tak by to asi mohlo být řešení.
Ad Java, pokud se nepoužije Swing (nebo pokud se Swing zkulturní, jako to udělali v JetBrains), nevidím v tom problém - Java je pěkný jazyk, ale dost mizerná platforma. Vývoj Javy prakticky stojí, bezpečnost je hrozivá, a upřímně: HW náročnost Java aplikací je někdy dost překvapující.
Ad najděte technologii, proti které nebude nikdo protestovat - velký souhlas
Ad teď má projekt nějaké přispěvatele s nějakými znalostmi a zkušenostmi, které jsou webu blízko - v podstatě mohou udělat to co jsem popsal, nebo strávit léta ohýbáním a doděláváním nějakých frameworků... a nebo vymyslet lepší migrační cestu, která jim bude vyhovovat.
> Tipnul bych si, že v C/C++ bude primárně back-end.
Možné to je, potom by se situace trochu měnila.
> vím že projekt Mono udělal velký pokrok, ale nejsem schopný posoudit, jak si na Linuxu stojí. Jestli dobře, tak by to asi mohlo být řešení.
Nemám s Monem až tak velké zkušenosti, ale mám z něj pocit, že záleží, jestli s ním vývojáři počítali. Pokud ano, pak funguje dobře. Pokud ne (tzn. vývoj probíhal spíše pro MS .NET a s Monem se nepočítalo), pak ve složitější aplikaci skoro jistě najdeme problém. Problém Mona budou tedy spíše edge cases nebo feature parity s MS .NET než stabilita.
Ostatně na Monu se dělají i aplikace pro Android a iOS – vizte Xamarin.
> Vývoj Javy prakticky stojí
To bych řekl spíše v době Javy 6, ne dnes.
> bezpečnost je hrozivá
Pokud chcete v JVM spouštět cizí kód a uzavírat jej do sandboxu, pak ano – většina zranitelností Javy je právě o úniku ze sandboxu. Jinak mi to – s ohledem její rozsah – nepřijde jako tak velké množství zranitelností. Ne každá zranitelnost je zneužitelná s každou aplikací. Pokud jde ale o poštovního klienta, tam nepotřebujeme snad primárně sandboxovat Javový kód (i když, pro extensions by se to mohlo hodit, ale tam je menší riziko útoku) a ani z ostatních nebude zdaleka všechno aplikovatelné.
> a upřímně: HW náročnost Java aplikací je někdy dost překvapující.
S čím to srovnáváte? Pro jaké scénáře? Často takové srovnání vidím s nějakou o poznání jednodušší aplikací (typu IDEA vs. Vim). Nebo pro scénáře, které sice nejsou silnou stránkou Javy, ale ne vždy jsou podstatné (rychlost startu). Nebo 10+ let stará srovnání. Ano, žere to typicky více RAM než obdobná aplkace v C (pro CPU bych si s tím už nebyl jist), ale zase komfort vývoje a memory safety jsou někde jinde. A pokud budeme srovnávat s JS, tak Java nejspíš vyhraje. (Jasně, vždy lze najít dostatečně zpackaný kód…) Srovnání s .NET bych čekal celkem vyrovnané, možná až na cold performance.
Souhlas že u Mono může být problém s feature parity, ale když člověk píše přímo pro Mono, tak je mu to celkem jedno. Pokud je stabilita OK, tak není problém. Trochu zamrzí, že podle všeho není hotová podpora WPF.
Ohledně Javy a bezpečnosti: u mailového klienta je bezpečnost celkem klíčová. Vzpomeňte si na Outlook, když kdysi používal pro parsování HTML Trident engine: přijde nakažený email, uživatel klikne na preview, a je vymalováno. A tohle zrovna moc optimisticky nevypadá:
https://www.cvedetails.com/vulnerability-list/vendor_id-93/product_id-19117/Oracle-JRE.html
Pokud jde výkon, tak paměťová náročnost není nic moc, výkon jak a kde. Swing má vyjma té zmíněné necivilizovanosti problémy při běhu přes Remote Desktop (pokud si pamatuji, tak obsah okna je v podstatě obrázek, takže se proti ostatním aplikacím tahá relativně pomalu). A pokud jde o cold start time, tak to je u desktopové aplikace dost zásadní. Komfort vývoje je slušný (nakonec Java je opravdu pěkný jazyk), a memory safety rozhodně nesrovnatelně lepší, než u C/C++; přesně proto jsem Javu uváděl jako jednu z možností, s tím že bohužel má své mouchy, bez ohledu na hostitelskou platformu.
Nerad bych začal flame Java vs .NET, ale z mého hlediska Java za C# lehce zaostává z hlediska jazyka, a poměrně výrazně zaostává ohledně platformy, zvlášť pokud jde o desktop. Další problém je cold start time.
> u mailového klienta je bezpečnost celkem klíčová
Souhlas. Ale zdaleka ne každá zranitelnost Javy bude zneužitelná v e-mailovém klientu.
> A tohle zrovna moc optimisticky nevypadá:
https://www.cvedetails.com/vulnerability-list/vendor_id-93/product_id-19117/Oracle-JRE.html
Bohužel zranitelnosti Javy mají v NVD často dost generický popis. Někdy jde o relativně generický odstavec, někdy dokonce o „Unspecified vulnerability“ s minimem informací. Často pak máme hrozivě vypadající zranitelnosti s „network exploitable“ a celkově vysokým skóre, kde jde fakticky jenom o sandbox escape. V kontextu Java appletů to má opodstatnění, jinde je dopad často až nulový, protože celé JVM je stejná trust boundary a na sandbox nehrajeme. Tím, že Java má mizerný sandbox, tvoří takto hrozivě vypadající zranitelnosti s typicky nulovým dopadem snad většinu všech zranitelností. (Ostatně v Javě je challenge implementovat privilegovaný kód bezpečně, už kvůli memory modelu, který dává příležitosti pro race conditions, když se programátor posnaží.)
A jak vím, že velká část (od oka většina) těch zranitelností se týkají pouze sandboxu, když popisy jsou tak skoupé na slovo? Jsou tu dva zdroje, které typicky řeknou více informací:
* Critical Patch Update v sekci Java SE risk matrix sice moc detailní není, ale dozvíte se, jestli se to týká sandboxu nebo ne (sloupec Note). Ta tabulka je typicky plná zranitelností aplikovatelných pouze na sandbox.
* Pod zmíněným CVE lze zranitelnost najít na webu RedHatu, který má často lepší popis (někdy kratší a výstižnější), k tomu link do Bugzilly, kde je někdy o něco podrobnější popis, občas i s linkem na commit, který zranitelnost opravuje.
Co se týče ostatních zranitelností, ani ty nemusejí ovlivnit výslednou aplikaci. Standardní knihovna Javy je poměrně obsáhlá (snad byly plány to v Javě 9 rozdrobit), takže bude obsahovat zranitelné části, které ani nepoužijete. Obrazně řečeno, je celkem jedno, jestli máte deset knihoven s celkem deseti zranitelnostmi, nebo jednu knihovnu (ze které ale využíváte jen polovinu) s dvaceti zranitelnostmi.
> Swing má vyjma té zmíněné necivilizovanosti problémy při běhu přes Remote Desktop
Ano, psal jsem, že GUI ideálně v něčem jiném než Swing. RDP mě neštve, náročnost asi taky tolik ne, ale třeba jejich file dialog nebo podpora horizontálního rolování jsou věci, které mě vytáčejí. JetBrains to umí eliminovat, ostatní moc ne.
> A pokud jde o cold start time, tak to je u desktopové aplikace dost zásadní.
Jde hlavně o pomalejší běh krátce po startu, ale kolik dělá e-mailový klient CPU-bound úloh, kde by se to projevilo? Navíc mi typicky běží dlouhoďobě, nepouštím ho na každý e-mail…