Even on a node that has been upgraded to IPv6, the use of IPv6 is dependent on the applications. An application might not use a networking API that asks the name service for IPv6 addresses, either because the application uses an API (such as sockets) that requires changes in the application, or the provider of the API (such as an implementation of the java.net class) has no support for IPv6 addresses. In either case the node only sends and receives IPv4 packets like an IPv4 node.
The following names have become standard terminology within the Internet community:
IPv6-unaware--This application cannot handle IPv6 addresses; that is, it cannot communicate with nodes that do not have an IPv4 address.
IPv6-aware--This application can communicate with nodes that do not have an IPv4 address, that is, the application can handle the larger IPv6 addresses. In some cases this might be transparent to the application, for instance, when the API hides the content and format of the actual address.
IPv6-enabled--This application can, in addition to being IPv6-aware, take advantage of some IPv6 specific feature such as flow labels. The enabled applications can still operate over IPv4, though in a degraded mode.
IPv6-required--This application requires some IPv6 specific feature and cannot operate over IPv4.