What do you mean by "machine code" though? To me, the most native you can get is a Java/C++ app that uses Android APIs directly. Anything lower is systems development, something not generally possible for normal developers.
I mean like C/C++ (which compiles to machine code) and not Java (which compiles to bytecode).
Same as the distinction the terminology made on desktop: https://stackoverflow.com/a/855774
Nowadays, my understanding is, if it's not loading a webpage off the internet, people call it "native". Doesn't matter what framework it uses to actually display things (even if it uses web technology).
Just like C# is one of the native ways to make Windows applications.
Please do everyone a favor and, at least for the sake of desktop development, don't misuse the terminology like that if you want people to understand what you're saying. The entire reason ".NET Native" was developed was that C# did not produce "native" applications. Saying C# produces native Windows applications is going to confuse the heck out of everybody.
.NET has always supported AOT via NGEN, although it only supports dynamic linking and was optimized for fast startup of applications.
Windows 8 introduced the Bartok compiler used by Singularity, where applications would be pre-AOT compiled in the Windows store minus linking, with on-device linking happening on installation.
Windows 10, improved the later scenario with the introduction of .NET Native, slightly based on the Midori experience.
The new Windows 11 store is still fully based on .NET Native, as it makes use of WinUI 2.6.
I didn't claim otherwise. But AOT != "native".
What makes something "native" is not merely the fact that you compile to machine code. It's one of the main features of native code but far from the only one. Again: there's a reason they came up with ".NET Native" and called it that despite the fact that NGen always did AOT. And there's a reason the Android NDK has an N, unlike its SDK. It actually means something beyond AOT.
You can go against the grain if you want and call them all native apps, telling people they're Wrong On The Internet, but you're just confusing people.
Curious to find out, how those people distinguish it from an MFC/ATL or an Win32 one.
But see for example https://stackoverflow.com/a/855774
If you still don't like the terminology though, I'm not going to keep arguing. I didn't coin the term. You should go ask Microsoft why they didn't call C# native when NGen was already there. I'm just saying that terminology is already established and you're confusing people by using it differently.
Which isn't what users talk about when arguing about native apps, they don't even know what a GC is.
Because I'm sure if you went and asked the vast majority of "users" what a "native app" is, you'd get a coherent answer instead of a blank stare.
Let's lay this matter to rest. You don't like the definition, I get it. It's fine.
Or are you going to argue that Visual Studio, SQL Server Management Studio, Microsoft Store, Microsoft Blend, Office AddIns, Power Automate Desktop aren't native?
I'm not sure how the discussion turned from "native" to "the way to go".
I get the feeling like you're jumping all over HN trying to reply to me at every comment you find because... you took "not native" as some kind of insult to tools you like/consider superior?
I am jumping because the distinctions you are making aren't the ones that users care about.
So each one can go on their merry lives with their own dictionary version.
So Java, Kotlin, C, C++ and Web.