6 ms·
I already lost count how many UI frameworks are in windows. It looks like complete chaos and mess. I really wonder what they expect from open-sourcing it. Just
by muhehe 1y ago
I already lost count how many UI frameworks are in windows. It looks like complete chaos and mess.
I really wonder what they expect from open-sourcing it. Just to pretend how open they are? Or is there any real benefit to developers who target windows?
- flohofwoe 1y agoThey probably started something new and shiny (Now with AI!) and want to get rid of the old baggage without causing too much of a user revolt (all dozens of them) ;)
- SkiFire13 1y agohttps://xkcd.com/927/ https://xkcd.com/927/
- cheschire 1y agoWinUI is an evolution of UWP which is an evolution of WinRT. WinUI has been around for years. MAUI is not exactly a competing product and is more about enabling cross platform UI development. Different intent. WinUI is actually ok tech. It’s evolved over the years through a few iterations, now on WinUI 3. Im mostly with you though. Until they rebuild the entire OS in it, including all of the administrative controls and tools, I don’t trust the longevity.
- qcnguy 1y agoWinRT came out of UWP I think. UWP was their first attempt to move beyond .NET
- cheschire 1y agoWinRT was windows 8. Remember the ARM-powered Surface RT had the same branding? UWP came along in windows 10.
- DiabloD3 1y agoYou have that backwards. WinRT is the managed languages runtime for Windows, introduced in Win8. Its sort of the replacement for COM/OLE but also defines the ABI dialect in a way that allows managed languages to call unmanaged code without an FFI penalty. UWP is built on WinRT, and acts as a fully managed app container, similarly to how phone apps exist on your phone. It allows WinRT apps to be deployed to any Microsoft platform, Windows, XBox, Windows Phone, etc, but also Android and iOS, and also as PWA, and are guaranteed to run identically on any of those platforms. UWP apps must be written a fully managed language that runs on the CLR (ex: C# runs on the CLR, but C++/WinRT does not). UWP also uses the second generation of WinUI-family XAML UIs, which means all UWP apps use completely native UIs, instead of slow non-native Javascript shit in a web canvas. The WinUI family of XAML UIs started with WPF, and a slightly incompatible version of it also appeared in Silverlight (WPF = WinUI 1.0), then was brought to UWP (= WinUI 2.0), and is now its own stand alone thing that any app can use, managed or not, as 3.0. WinRT is not an attempt to move beyond .NET, instead it is their way of allowing .NET to natively call code, and make .NET languages first class in Windows.
- qcnguy 1y agoYeah but I think when it was introduced it wasn't a thing you could use separate from the rest of UWP. What changed in Win10 was you could use WinRT APIs from regular Win32 apps too. They started breaking UWP up into independent pieces. Or not. I haven't thought about this stuff for years. Definitely possible I forgot the ordering of things.
- DiabloD3 1y agoUWP most certainly did not exist when WinRT came into existence. WinRT, itself, is also more or less the third version of this attempt: Managed C++ came first, then C++/CLI, then the WinRT era and C++/CX. C++/CLI and C++/CX are semi-managed, you only need to use the extensions when interacting with WinRT, although you're free to write your entire app in that dialect.
- cshokie 1y agoWinRT is not the same thing as managed .NET code. There is no requirement that a UWP is .NET. There are many examples of unmanaged C++ UWPs, including the open source Windows Terminal. WinRT is a mechanism to express APIs in a way that is amenable to cross-language usage. It is built on top of COM, and is not a replacement for COM.
- crinkly 1y agoStill writing win32 stuff like it’s 1995 here. We have bits of ATL/MFC hanging out which are throughly abandoned. I don’t trust WinUI at all. I was surprised, when I spoke to a former colleague, to find that an internal tool I wrote 25 years ago is still being maintained. Win32 as well.
- ffsm8 1y agoSoftware that solves an actual problem has the tendency to stick around, no matter how much time elapsed. Just remember, cobol is still in active use, today
- DougN7 1y agoMFC support is still in the latest Visual Studio, and it looks like ATL as well.
- dh2022 1y agoI was surprised to see ATL/MFC received security updates such as Spectre mitigation. So there is still some support for these 30 year old components.
- crinkly 1y agoThat’s only because half office hangs off it. If it didn’t they wouldn’t have just left it.
- pjmlp 1y agoWhich so much better tooling than XAML C++ with C++/WinRT, it is a tragedy.
- crinkly 1y agoIt’s in there because it’s a cockroach. It is throughly abandoned though, frozen in time. You can observe this looking at the state of old outlook.
- 1y ago
- DiabloD3 1y agoThey already do, though. The big UI refresh in Win10 is all XAML, and the new Win11 taskbar (the one we all hate) is now a totally normal XAML app. WinUI 3's big changes (to get a 3.0 version number) is not with the XAML stack itself, but its new ability to be called by unmanaged apps as a normal UI toolkit, so it can finally be used by all apps. No more using Shell UI like we're writing Win 3.1 apps. And yes, some stuff in Win11 still isn't WinUI, which is kind of annoying, but some of those dialogs hidden away in Windows are at least 20 years old, and probably would need to be entirely rewritten, not merely have their UI's updated. Also, fun fact: The Win8/10 taskbar's code predates Avalon (the prototype/codename for WPF), and trying to change/fix it at all usually ended up breaking it. It's one of the few binaries on Windows that would not be recompiled to build a new release image in fear of breaking it. Rewriting the taskbar made sense, GETTING RID OF SMALL MODE DID NOT, GODDAMNIT MICROSOFT.
- Kwpolska 1y ago> The Win8/10 taskbar's code predates Avalon (the prototype/codename for WPF), and trying to change/fix it at all usually ended up breaking it. It's one of the few binaries on Windows that would not be recompiled to build a new release image in fear of breaking it. The taskbar that underwent a major redesign in Windows 7 (released after WPF)? Also, that binary is explorer.exe, surely it got rebuilt quite often for new ads. features, and fixes?
- DiabloD3 1y agoThe taskbar exists in its own timeline, apparently. (Ex-)Microsoft engineers working in the UI/UX team for Windows itself have spoken about how much of a nightmare dealing with that thing was. Also, the taskbar technically exists as a dll, not an exe, explorer.exe would link to it and run it if it was being ran as the UI shell. This is now split out to its own exe (Shell Experience Host iirc), and explorer.exe is now only File Explorer. Since it exists as a dll, btw, this is how the Win10 taskbar injectors work, they just call the dll (which still ships in Win11) instead of letting Shell Experience Host do the Win11 thing. The sane way of handling this, btw, is just use Shell Experience Host injectors to get the desired behaviors, such as using Windhawk and use m417z's taskbar height and icon size plugin (the third most popular Windhawk plugin); to match Vista/7 era small, set to height 32, icon size 16, taskbar button width 28.
- tcfhgj 1y agoI think only WinUI2 (deprecated) is an evolution of UWP (uses WinRT APIs). WinUI3 is something different.
- cheschire 1y agoWinUI 3 still supports WinRT. It ALSO supports more. It's an evolution of WinUI 2, not just a simple version bump, but also not a completely new tech. It's probably a closer evolution to go from WinUI 2 to 3 than it was to go from Angular 1 to 2. https://learn.microsoft.com/en-us/windows/apps/winui/winui3/xaml-templated-controls-cppwinrt-winui-3 https://learn.microsoft.com/en-us/windows/apps/winui/winui3/... https://learn.microsoft.com/en-us/windows/apps/develop/platform/csharp-winrt/authoring https://learn.microsoft.com/en-us/windows/apps/develop/platf...
- tcfhgj 1y ago> WinUI 3 still supports WinRT. I think this is completely independent. You can simply use WinRT APIs, because Win32 Apps can use them now. WinUI3 apps are win32 apps. > but also not a completely new tech. Not sure about this. UWP APIs work out of the box. For WinUI3 you need the Windows App SDK, and it is much slower and heavy than UWP (out of curiosity I created a very simple app and it was fast just a few dozen kbs big)
- pjmlp 1y agoHardly an evolution, that is how it is sold, reality is something else, trailing behind UWP with half the tooling.
- madduci 1y agoJust go for MFC FTW, it is in feature freeze but I will last probably for the next 20 years yet.
- criddell 1y agoMFC/Win32 + XAML Islands (through the Windows App SDK) is a pretty nice combination for stability and access to new features.
- badsectoracula 1y agoYou could also go for wxWidgets as it is kinda MFC-y but better and cross-platform, though like MFC you can combine it with Win32 API code (almost) seamlessly. Or go with Qt, though that doesn't use native controls.
- deleted 1y ago[deleted]
- deaddodo 1y agoQT uses native controls/widgets, it just polyfills when there is no good native option or if you use custom styling.
- badsectoracula 1y agoNo, it implements its own functionality. As an example consider one of the most basic controls which is available pretty much everywhere (i.e. no need for polyfill), the push button: the source code[0] for QPushButton clearly implements the behavior itself, it does not rely on any native button. Compare with wxWidgets' equivalent to QPushButton, wxButton, where there is a backend-specific header[1] and implementation[2] where 99% of the wxButton functionality is there (there is a `btncmn.cpp` under `common` that is shared across backends but that has very little code itself). [0] https://github.com/qt/qtbase/blob/dev/src/widgets/widgets/qpushbutton.cpp https://github.com/qt/qtbase/blob/dev/src/widgets/widgets/qp... [1] https://github.com/wxWidgets/wxWidgets/blob/master/include/wx/msw/button.h https://github.com/wxWidgets/wxWidgets/blob/master/include/w... [2] https://github.com/wxWidgets/wxWidgets/blob/master/src/msw/button.cpp https://github.com/wxWidgets/wxWidgets/blob/master/src/msw/b...
- deaddodo 1y agoThere are three UI frameworks in Windows, and only two actively used/developed. All the other "countless" frameworks are iterations of one of two lines: Win32/Native (WinAPI, MFC, WinRT, WinUI3, etc) and WPF/Managed (Avalon, WinUI2-3, etc). WinUI3 exists to bridge the gap.
- shortrounddev2 1y agoMaybe people can cannibalize some of the rendering code and extrapolate the controls to a better class library than they already have. Like a kind of winforms but using modern rendering APIs. I know you already can create such controls but they often end up being very verbose and just look like xaml but in C#
- bobmcnamara 1y ago> Maybe people can cannibalize some of the rendering code and extrapolate the controls to a better class library than they already have. This just sounds like another Microsoft UI stack
- octo888 1y agoI genuinely thought a lot of these sibling comments were satire at first! The acronyms, the lengthy and confused explanations of versions, frameworks etc: > WinUI is an evolution of UWP which is an evolution of WinRT > WinUI 3 > WinUI 3 still supports WinRT > XAML > Shell UI > Avalon > WPF > WPF = WinUI 1.0 > Project Reunion > UWP > Win2D > ATL/MFC > Just go for MFC FTW > wxWidgets as it is kinda MFC-y > Or go with Qt > MFC/Win32 + XAML Islands
- pjmlp 1y agoI can produce similar lists on other domains in the industry, it is a matter of being part of the ecosystem.
- octo888 1y agoOK but stick to the UI framework domain for a fairer comparison. (We all know tech has acronyms) So what you got?
- pjmlp 1y agoReplace the Microsoft specific terms of those examples with, - kexts - Cocoa - UIKit - Carbon - SwiftUI - MSL - XPC - ARC - plist - CoreData - CloudKit - SpriteKit - SceneKit - RealityKit Do you think anyone that never bothered with Apple's developer ecosystem has any clue of those names are for? And that is a very small overview.