Cela dépend beaucoup du contexte. Pour moi, «natif» signifie qu'une application utilise les fonctionnalités et les mécanismes fournis par le système d'exploitation, plutôt que de rouler les leurs. Cela peut s'appliquer aux fonctionnalités de l'interface utilisateur (boutons, fenêtres, boîtes de dialogue de sélection de fichiers), ainsi qu'aux fonctionnalités sous le capot (par exemple, l'intégration avec "Ouvrir avec ...").
Par exemple, sous Windows, une application native utiliserait "WinAPI" pour obtenir les mêmes boutons, barres de défilement, etc. que d'autres applications. Ils se comportent exactement de la même manière dans les applications système (bloc-notes) que dans les applications tierces natives.
Les applications Java utilisent souvent "Swing" et ont un aspect complètement différent, car elles dessinent elles-mêmes leurs contrôles, plutôt que d'utiliser ceux du système. L'avantage est que le programme est identique sur tous les systèmes d'exploitation.
Une autre option pour construire une interface graphique est une boîte à outils multiplateforme comme "QT". QT demandera au système d'exploitation de dessiner les contrôles pour cela, ils devraient donc être très natifs, que vous exécutiez Windows, OSX ou Linux. Une zone de texte QT ressemblera à une zone de texte Windows, mais ce n'est pas exatly natif, mais une sorte d'émulation. Vous remarquerez peut-être de petites différences dans les détails (par exemple, le menu contextuel, les méthodes de saisie, etc.).
Notez que lorsque les gens disent «natif», cela signifie souvent qu'un programme est compilé en code machine plutôt qu'en code intermédiaire, qui est exécuté sur une machine virtuelle (comme les programmes Java et .NET). Dans les exemples ci-dessus, WinAPI et l'application QT utilisent du code machine, tandis que le programme Java est compilé en bytecode Java. Cette utilisation est un peu problématique de nos jours, car de nombreux utilisateurs considéreraient une application .NET native bien conçue pour Windows - c'est juste un .exe, utilise exactement les mêmes contrôles et API sous le capot, et est presque impossible à distinguer d'un programme compilé en langage machine.
De même, je considérerais un programme qui utilise GTK, connaît la structure du système de fichiers Unix et est peut-être livré dans un package .deb natif pour Ubuntu ou Gnome. Il existe même des applications Gnome propriétaires écrites en javascript que l'on pourrait appeler natif! La même chose s'applique aux applications "Metro" de Windows 8, qui peuvent être écrites dans une variété de langues, certaines compilées, d'autres non.