While the argument could be made that Node Webkit and Atom Shell aren't necessarily 'native' apps, MacGap on the other hand needs to be compiled with Xcode just like any other mac app and can be modified/extended to use any native library/functionality one wishes to use. Ultimately it's simply a starter project with an API built in to communicate from js to obj-c via a webview. It's unclear how this no longer makes it not a 'native app'. If that's the case the Mac App store is not a native app either since it uses a webview i.e. html, css, js for the store's content
Where did he said the App Store is native? He didn't. He said claiming interpreted apps are native is a terrible idea and false advertising, which it is.
Nowhere does it say that it has to be run exclusively through the webview using only HTML/JS. Only the javascript API is run through the webview. Whether you choose to use only a webview is up to you, you're not limited to strictly HTML like many other similar solutions.
Why would you use a tool if you're not going to make extensive use of it? It may not say that it has to be run exclusively through webview, but if you're only putting 2% of the application through it, why wouldn't you just configure your own web view control?
A native application means the entire application executes on barebones hardware. Web Browers are native, since they don't actually comprise of the web-pages that they run, the web browser is limited to the actual native code that interprets, executes, and renders the HTML/JS/CSS.
Whether it uses GTK, X11, Cocoa or HTML to render its views, it might contain quite a bit of Objective C code. Besides, not every routine needs to be blazing fast and written in Assembly.
The technology used to deliver that experience is utterly immaterial so long as the experience is there.
I'm sure the GP and I are not the only two people who feel this way.
Edit: how about responding instead of downvoting?
In interpreted code, something like 'var i = 0;' could result in 100+ instructions, from the compilation/parsing of the script, to the actual running of that statement, and then the final execution on the hardware.
In C, `int i = 0;` WILL result in 2 instructions - movl $0, -4(%rbp) movl $0, %eax
There are already terms for what you're talking about: compiled applications, or binary applications.
"Native", to me, simply means an app that does not run in a browser. It is irrespective of language. Reasons this distinction might matter include the degree to which the code is sandboxed, OS and hardware features that the code can access, the distribution method, or the extent to which the app can run without network connectivity.
But then I think there's also hardware native, which means the IR that the code gets compiled into executes directly on the hardware.
Both Java and C are compiled into a binary IR (Intermediate Representation), C is executed directly on the CPU (provided it's in the proper format: ELF, etc...), whereas Java is run in a compatibility layer, the JVM, which interprets the IR into native machine instructions.
I don't think Java is hardware native,but it can be OS native, making use of features or APIs that are OS dependent.
I feel like Android itself is native, it's compiled into direct machine code by each vendor, but I don't feel that the applications that run on it are hardware native, but they are native to Android, in that Dalvik and Hotspot bytecode are incompatible with each other's respective VM.
I guess I'm just a pedantic dickweed :|
Node.js runs Javascript local to the machine in the V8 engine, which compiles it. As I understand it, that is architecturally analogous to running Java locally in the JVM. So I think that practically speaking, Javascript and Java are not so different from one another in how they access the hardware resources of the machine.
At the end of the day it enables developers to access native APIs such as notifications or file writing through their language of choice.