JPA is just a specification - it's a set of interfaces to provide common API. It describes the access to relational database to help developers manage multiple dbms vendors. There are multiple implementations of JPA, the reference is EclipseLink developed under Eclipse Public License. In other words it's a standard, like SQL-92 or SQL:2006. Databases that claim to support given standard can implement own features outside it to make data access easier.
In order to use JPA, we need an implementation. Besides EclipseLink the most common are Hibernate, OpenJPA and DataNucleus. All of them support JPA 2.2.
They implement the JPA specification but also provide additional functionalities to overcome some of JPA's shortcomings. Those functionalities are the main difference between implementations and make the code specific i.e. using, for example, Hibernate follows in code changes needed to be done when changing JPA specification. Only when using JPA we can switch between implementations. However I have never seen any project, that changed JPA vendor.