I read or hear sentences such as:

> 
> The Java Persistence API (JPA) is a Java application programming
>  interface specification...
> 
> 
> 

or

> 
> JavaServer Faces (JSF) is a Java specification...
> 
> 
> 

but I am not sure if I understand what a specification exactly is.. 

Lets say I create a new specification JMA, Java Math API, which is a Java Math Specification..

Is it enough that I define my specification as follows:

> 
> JMA must provide a method that adds two integers?
> 
> 
> 

or, do I have to create a document something like:

> 
> JMA must provide the method: int jmaAdd(int x,int y)?
> 
> 
> 

or, do I have to create the interfaces and distrubute the source code?

```
public interface JMA{
    int jmaAdd(int x,int y);
}

```

or do I have to compile the interfaces and publish it as jar? 

Also, can a specification contain abstract classes or classes at all? Or must it consist only of interfaces?

What makes a specification, a specification?