Ask HN: What subtleties distinguish a native desktop app from cross-platform?

  • Are cross-platform and native even mutually exclusive?

    You can have a C89 application that conditionally (#ifdef) compiles differently on MS Windows and Linux. It’s native. And it’s cross-platform.

  • There are apps that act native on multiple platforms, like IntelliJ. But those are rare.

    Most cross-platform apps feel “out of place” on every platform except web, because different platforms have different styles: button sizes, background colors, whether the menu is in the window or top of screen or there is none, etc.

    Most cross-platform apps are slower and buggier than native UI on every platform, and don’t support accessibility as well, because the native UI has been developed over a long time by a talented group (Apple, Microsoft, the Linux foundation, etc.) whereas most cross-platform implementations are developed in shorter spans. by smaller teams

    If you want a cross-platform app to feel native, you have to re-implement a lot on each system. You must handle that subtle differences between platforms like menu position, even if you try to make your UI generic like IntelliJ’s*. And the library maintainers must develop adapters from each native control to their cross-platform one, and/or implement many accessibility-adapters, edge-cases, and optimizations. It’s almost certainly easier to write a native UI for every target platform than to write a cross-platform library powerful enough to feel native on every target platform, then handle the look-and-feel differences in your app where necessary.

    * Actually, that may be IntelliJ’s only difference between platforms, I can’t think of any others OTOH. While their UI is unique IMO it feels “native” on macOS because it’s similar, and macOS is the OS, I use most, so maybe that’s why I feel it’s an exception to the “cross-platform can’t feel native” rule.