Разбираюсь с Hibernate. Выяснилось, что JPA - это спецификация, а Hibernate - реализующий её ORM, причём Hibernate может работать и через собственное API, а не только через API JPA.
Чем спецификация отличается от обычных интерфейсов / API? Ведь в спецификации, насколько я понимаю, так же декларируется то, что должно быть реализовано, как и в контракте интерфейса.
В данном случае отличается тем, что это стандартная спецификация. Разработчик Hibernate может как угодно и когда угодно поменять своё API, но JPA меняется только в процессе многолетнего согласования примерно полусотни крупных компаний.
Спасибо за ответ!
Я всё ещё не могу догнать, почему используется два отдельных термина. Может быть спецификацией обычно называют то, что не имеет стандартной реализации вообще? Типа "вот вам спецификация, делайте свои программы в соответствии с ней". Или эти термины не отличаются вообще?