Monday, November 21, 2005

'Proprietary' APIs

In this discussion over at TSS, the concept of proprietary APIs came up, with Hani Suleiman labeling Hibernate and TopLink proprietary, and EJB 3.0 as non-proprietary. I have seen this logic again and again, and it is wrong.

Nothing makes the API of Hibernate more proprietary than EJB 3.0. You could argue that one API is defined by the implementors and the other API is defined by vendor approved expert groups, but which is which? The difference is that there is only one proprietary implementation of the Hibernate API at the moment, and there will probably be multiple proprietary implementations of the EJB 3.0 API. The very nature of published APIs is that they cannot be proprietary, only the implementations can be. While there can be copyright or other restrictions on them, those generally are not published. See .Net versus the Mono project. There is nothing but time to stop BEA from putting out their own Hibernate 3 compatible code that is optimized for their app server, it might even be worth it for them to do so.

Another important thing to think about is which APIs are better- those designed by committees to address the needs of everyone, or those that solve specific problems? If we were talking about applications, I would choose the latter. I might do the same for APIs.